`

提高BSEG处理效率

SQL 
阅读更多
BSEG于一般的透明表不同,它是一个簇表。对于一个簇表来说,除了主键项目外,其他项目都被编辑到一个长文本项目中,一起存储在表簇RFBLG中的vardata项目中,这就决定了作为簇表的BSEG无法再建立键值以外的索引(INDEX),所以一般我们对于透明表来说当主键项目不全或完全没有时,追加索引的作法对于BSEG表来说就不好用了。而BSEG簇表又是SAP系统中FI 会计模块中最常被使用的数据表,所以运用好对BSEG表的访问技术对于FI会计模块的扩展开发(ADDON)至关重要。
这篇文章我们就来谈谈如何高效地对BSEG进行访问处理。

对於簇表来说,在数据库中没有与之同名的实体物理表相对应,所以虽然其可在ABAP中使用,但还是有一些限制的:
1. 不能使用Select distinct语法
BSEG中的字段存储在VARDATA中,所以不能使用distinct语句对单个项目去除重复。
2. 不能使用Native SQL
在数据库中没有与之同名的实体物理表相对应,所以不能使用Native SQL 对BSEG操作。
3. 不能使用Order by 语法
BSEG中的字段存储在VARDATA中,所以不能使用Order by语句对单个项目排序。
4. 不能再追加创建索引
BSEG中的字段存储在VARDATA中,所以不能再追加创建索引。

除此之外,对BSEG的访问要使用主键项目,如果没有主键项目虽然语法调试能够通过,但是程序执行起来,耗时长,效率低,而且随着业务量的增加执行时间问题会越发严重,甚至导致程序不能正常执行结束。

那么如果当键值不足时怎么办呢?回答,使用二次索引透明表,具体方法如下描述。

比如和销售凭证有关的业务,根据销售凭证编号和明细编号,选取相关会计凭证明细信息。
SELECT *
FROM BSEG
WHERE VBEL2 = 'XXXXXXXXXX'     “ 销售凭证编号
AND POSN2 = 'YYYYYY'.      “ 销售凭证明细编号
在这个例子中,对BSEG的检索条件中因为没有主键项目,所以执行起来,程序很慢。

变通的方法:
1)首先根据销售凭证编号和明细编号,从BSID中检索出未清帐明细行项目。
SELECT BURKS “ 公司代码
BELNR “ 财务凭证编号
GJAHR “ 会计年度
BUZEL “ 会计凭证中的行项目
FROM BSID
INTO TABLE TAB_KEY “ 存放主键项目的内部表
WHERE VBEL2 = 'XXXXXXXXXX' “ 销售凭证编号
AND POSN2 = 'YYYYYY'. “ 销售凭证明细编号

2)再根据销售凭证编号和明细编号,从BSAD中检索出已清帐明细行项目。
SELECT BURKS “ 公司代码
BELNR “ 财务凭证编号
GJAHR “ 会计年度
BUZEL “ 会计凭证中的行项目
FROM BSAD
APPEND TABLE TAB_KEY “ 存放主键项目的内部表
WHERE VBEL2 = 'XXXXXXXXXX' “ 销售凭证编号
AND POSN2 = 'YYYYYY'. “ 销售凭证明细编号

3)然后再根据上面检索出的主键列表,从BSEG中检索出相应的明细行项目。
SELECT BSCHL "転記キー
KOART "勘定タイプ
UMSKZ "特殊仕訳コ
SHKZG "借方/貸方
HKONT "総勘定元帳
GSBER "事業領域
DMBTR "国内通貨額
WRBTR "伝票通貨額
ZUONR "ソートキー
SGTXT "明細テキス
ZFBDT "期日計算の
ZTERM "支払条件キ
ZLSCH "支払方法
ZLSPR "支払保留キ
HBKID "取引銀行の
BVTYP "取引先銀行
FROM BSEG
INTO TABLE TAB_BSEG “ 存放检索结果的内部表
FOR ALL ENTRIES IN TAB_KEY “ 存放主键项目的内部表
WHERE BUKRS = TAB_KEY-BUKRS. “ 公司代码
AND GJAHR = TAB_KEY-GJAHR “ 财务凭证编号
AND BELNR = TAB_KEY-BELNR “ 会计年度
AND BUZEI = TAB_KEY-BUZEI. “ 会计凭证中的行项目

4)这么处理之所以能够提高效率,关键还得对透明表BSID和BSAD追加以VBEL2(销售凭证编号)和POSN2(销售凭证明细编号)为键值的索引(对于透明表可追加索引)。

这样一来,1)和2)步骤地操作有索引,3)步骤的操作有全主键项目,检索速度应该有保证。

采购方面的业务、物料方面的业务等都可如法炮制。

最后需要说明一点,不是所有的SAP体统都可以使用这种方法,能否使用取决于R/3系统的设计和配置。所以在试图使用该方法时应充分调查相关透明表与BSEG中的纪录是否相符,别速度提高了,结果处理对象范围减小了或增大了,那就与初衷背道而驰了,效率的提升一定要在确保业务数据正确的基础上再加以考虑。

SAP R/3系统中也有几个专门用来读取BSEG表信息的函数,可适当参考使用,它们是:
READ_BSEG
GET_ALL_BSEG

另外最有效率的方法是改善你的应用和需求,要使需求合理规范,这才能使效率达到最高化。

分享到:
评论

相关推荐

    SAP 处理资产预制凭证过账,报错:00349 BSEG-BZDAT_PN在SAPMF05A 0305

    预制资产凭证,过账的时候报错:00349 BSEG-BZDAT_PN在SAPMF05A 0305 附件里面有:处理的方案和提供的资源 另外,SAP各种问题大全(持续更新中): ...

    BSEG表说明

    BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK说明及数据关系

    BSEG与几张子表之间的关系

    BSEG与BSIS、BSAS、BSID、BSAD、BSIK、BSAK之间的关系

    关于cluster table(簇表)BSEG

    关于cluster table(簇表)BSEG

    网络培训:整批过账、重新过账和过账还原的应用及区别20141029.ppt

    网络培训:整批过账、重新过账和过账还原的应用及区别20141029.ppt

    ABAP的程序的类型

    TABLES: BKPF, BSEG. DATA: begin of itab occurs 10, bukrs LIKE BKPF-BUKRS, budat LIKE BKPF-BUDAT, belnr LIKE BKPF-BELNR, shkzg LIKE BSEG-SHKZG, buzei LIKE BSEG-BUZEI, dmbtr LIKE BSEG-DMBTR, ...

    IDOC事务代码和实例

    简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具。 假设I04和I02是同一个集团下两个不同子公司的SAP系统,I04需要将其采购订单信息及时发送给I02。下面简单介绍IDOC的设置步骤,为了避免混淆,我的...

    关于财务凭证的行项目数的最大999的限制

    这个错误主要是当初设计系统时,设计师对字段“会计凭证中的行项目数”(BSEG- BUZEI)采用了三位数字(三位数字的最大就是999),因而项目超过999,SAP系统就会提示错误。 SAP近期还没有计划去扩展该字段,何况BSEG表的...

    EHP7 FB02 FB50 BUG解决方法

    使用改学习环境做物料移动产生凭证时报错: Syntax error in program "SAPLFIN_UI_DECO_DOC_VERIFY have occurred: 数据库表的类型和工作区域(或内部表)"LS_BKPF" 的类型不能在 Unicode 中转换。...

    SAP屠夫作品汇总

    大话MM定价增值税处理 100 SAP 税务配置. 108 SD篇 tax 112 SD一周通系列 114 SD定价实例 118 收入科目确定. 119 税务设置 119 特别总帐 (Special Purpose Ledger) 128 1基本设置(Basic Settings) 129 (1)Perform ...

    枯草芽孢杆菌葡聚糖内切酶的克隆与表征 (2011年)

    ECU0013中克隆表达得到重组葡聚糖内切酶BsEG。经镍柱纯化后进行酶学性质表征,其最适反应pH约为6.0;最适反应温度为50℃,具有较好的热稳定性,50℃时半衰期达101 h o K-值为20. 1 g/L,相应的Vmax值为0. 075 g/(L・min...

Global site tag (gtag.js) - Google Analytics