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
另外最有效率的方法是改善你的应用和需求,要使需求合理规范,这才能使效率达到最高化。
分享到:
相关推荐
预制资产凭证,过账的时候报错:00349 BSEG-BZDAT_PN在SAPMF05A 0305 附件里面有:处理的方案和提供的资源 另外,SAP各种问题大全(持续更新中): ...
BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK说明及数据关系
BSEG与BSIS、BSAS、BSID、BSAD、BSIK、BSAK之间的关系
关于cluster table(簇表)BSEG
网络培训:整批过账、重新过账和过账还原的应用及区别20141029.ppt
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是类似XML的一种SAP系统与其他系统的一种集成工具。 假设I04和I02是同一个集团下两个不同子公司的SAP系统,I04需要将其采购订单信息及时发送给I02。下面简单介绍IDOC的设置步骤,为了避免混淆,我的...
这个错误主要是当初设计系统时,设计师对字段“会计凭证中的行项目数”(BSEG- BUZEI)采用了三位数字(三位数字的最大就是999),因而项目超过999,SAP系统就会提示错误。 SAP近期还没有计划去扩展该字段,何况BSEG表的...
使用改学习环境做物料移动产生凭证时报错: Syntax error in program "SAPLFIN_UI_DECO_DOC_VERIFY have occurred: 数据库表的类型和工作区域(或内部表)"LS_BKPF" 的类型不能在 Unicode 中转换。...
大话MM定价增值税处理 100 SAP 税务配置. 108 SD篇 tax 112 SD一周通系列 114 SD定价实例 118 收入科目确定. 119 税务设置 119 特别总帐 (Special Purpose Ledger) 128 1基本设置(Basic Settings) 129 (1)Perform ...
ECU0013中克隆表达得到重组葡聚糖内切酶BsEG。经镍柱纯化后进行酶学性质表征,其最适反应pH约为6.0;最适反应温度为50℃,具有较好的热稳定性,50℃时半衰期达101 h o K-值为20. 1 g/L,相应的Vmax值为0. 075 g/(L・min...