簇表BSEG及其子表

此贴基本终结 == 在最新的S/4上,bseg能join了,另外基本被新表ACDOCA取代,SAP真会玩~

   早就听前辈们说过之前从bseg表中 取数会比较慢,项目上之前有一个SAP给外围合同系统做的接口,是直接从bseg表中取数,用了一段时间就发现这个接口有点慢,于是改成了从bseg的子表中取数······一直以来只是知道,刚好最近的一个需求中用到相关取数逻辑,尝试把bseg表和ska1表inner join时,报错提示bseg是个簇表,无法关联。于是,打算把bseg的子表和ska1关联起来。借此机会,好好的梳理下bseg及其子表之间的关系。

  • BSEG与BKPF
    BKPF 是财务凭证抬头,BSEG 是财务凭证行项目。

  • BSEG中字段HKONT与SAKNR
    SAKNR: G/L account number——总账科目
    HKONT:General ledger account——总账科目编码

    HKONT里放的是凭证真实的总帐科目,SAKNR放的是供应商或客户的统驭科目.

  • BSEG及其子表
    BSEG = BSAS+BSIS+BSAK+BSIK+BSAD+BSID
    BSEG表通过公司代码(BUKRS)+BELNR(凭证编号)+GJAHR(会计年度)+BUZEI(凭证行项目)这些字段关联子表。

    Question 1:为什么直接从BSEG中取数会比较慢?
      因为每次在BSEG去取一行数据,其实在数据库层是要去六个子表中去查询并返回数据!!!
    Question 2 :为什么BSEG不能inner join?
      因为在数据库层不是和一张表join,所以找不到连接的key,只能通过其子表进行join操作。

    BSAS │ BSIS ==>all GL documents总账
    BSAK │ BSIK ==>all AP documents 供应商
    BSAD │ BSID ==>all AR documents 客户

    BSAD:应收明细(已清帐)
    BSID:应收明细(未清帐)
    BSAS:总帐明细(已清帐)
    BSIS:总帐明细(未清帐)
    BSAK:应付明细(已清帐)
    BSIK:应付明细(未清帐)

一般情况下一笔业务产生的凭证都是未清的,那么:
  如果该业务行是客户相关的,则被记录到BSID;
  如果该业务行是供应商相关的,则被记录到BSIK;

无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;但是如果这笔业务被清帐了,则相应的记录会从BSIS转移到BSAS

BSEG本身是一个 Cluster Table(簇表),BSEG就是由上述的六大表的集成,当要读取”BSEG”Table时就等于去读取那六个表,这样你可以想像它读起来会就多慢。对於簇表或Pool Table,都是SAP系统本身在使用的,因此簇表本身是不存在资料库实体的,虽然是可以在ABAP使用,不过还是有一些限制:
1.不能使用select distinct or group by语法
2.不能使用Native SQL
3.不能使用specify field names after the order by clause
4.不能在建立次索引
5.查询时一定要用KEY FIELD

参考:
http://blog.itpub.net/17204926/viewspace-625298/
http://blog.csdn.net/sunfeng8848/article/details/3953581

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值