提高BSEG簇表处理效率

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 BSEGWHERE VBEL2 = 'XXXXXXXXXX'     “ 销售凭证编号AND POSN2 = 'YYYYYY'.      “ 销售凭证明细编号在这个例子中,对BSEG的检索条件中因为没有主键项目,所以执行起来,程序很慢。变通的方法:1)首先根据销售凭证编号和明细编号,从BSID中检索出未清帐明细行项目。SELECT BURKS “ 公司代码BELNR “ 财务凭证编号GJAHR “ 会计年度BUZEL “ 会计凭证中的行项目FROM BSIDINTO TABLE TAB_KEY “ 存放主键项目的内部表WHERE VBEL2 = 'XXXXXXXXXX' “ 销售凭证编号AND POSN2 = 'YYYYYY'. “ 销售凭证明细编号2)再根据销售凭证编号和明细编号,从BSAD中检索出已清帐明细行项目。SELECT BURKS “ 公司代码BELNR “ 财务凭证编号GJAHR “ 会计年度BUZEL “ 会计凭证中的行项目FROM BSADAPPEND 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 BSEGINTO 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_BSEGGET_ALL_BSEG另外最有效率的方法是改善你的应到最高化。用和需求,要使需求合理规范,这才能使效率达到最高化。

BSAD:应收明细(已清帐)BSID:应收明细(未清帐)BSAS:总帐明细(已清帐)BSIS:总帐明细(未清帐)BSAK:应付明细(已清帐)BSIK:应付明细(未清帐) BSEG主要通过“凭证号”“会计年度”“行号”和这六张表关联 一般情况下一笔业务产生的凭证都是未清的,那么:如果该业务行是客户相关的,则被记录到BSID;如果该业务行是供应商相关的,则被记录到BSIK;无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;但是如果这笔业务被清帐了,则相应的记录会从BSIS转移到BSAS 一般情况下:应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关,又和未清项管理的总帐科目相关;应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关,又和未清项管理的总帐科目相关; 其他总帐科目一般不启用未清项管理,所以记录一般都放在BSIS中。SAP R/3系统中也有几个专门用来读取BSEG表信息的函数,可适当参考使用,它们是: READ_BSEG和 GET_ALL_BSEG.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值