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

对於簇表来说,在数据库中没有与之同名的实体物理表相对应,所以虽然其可在ABAP中使用,但还是有一些限制的:

  • 不能使用Select distinct语法
    BSEG中的字段存储在VARDATA中,所以不能使用distinct语句对单个项目去除重复。
  • 不能使用Native SQL
    在数据库中没有与之同名的实体物理表相对应,所以不能使用Native SQL 对BSEG操作。
  • 不能使用Order by 语法
    BSEG中的字段存储在VARDATA中,所以不能使用Order by语句对单个项目排序。
  • 不能再追加创建索引
    BSEG中的字段存储在VARDATA中,所以不能再追加创建索引。

除此之外,对BSEG的访问要使用主键项目,如果没有主键项目虽然语法调试能够通过,但是程序执行起来,耗时长,效率低,而且随着业务量的增加执行时间问题会越发严重,甚至导致程序不能正常执行结束。
那么如果当键值不足时怎么办呢?回答,使用二次索引透明表,具体方法如下描述。比如,和销售凭证有关的业务,根据销售凭证编号和明细编号,选取相关会计凭证明细信息。

  1. SELECT * FROM bseg
  2. WHERE vbel2 = 'XXXXXXXXXX'     " 销售凭证编号
  3. AND posn2 = 'YYYYYY'.           " 销售凭证明细编号

复制代码

在这个例子中,对BSEG的检索条件中因为没有主键项目,所以执行起来,程序很慢。变通的方法:
1)、首先根据销售凭证编号和明细编号,从BSID中检索出未清帐明细行项目

  1. SELECT BURKS             " 公司代码
  2. BELNR             " 财务凭证编号
  3. GJAHR             " 会计年度
  4. BUZEL             " 会计凭证中的行项目
  5. FROM BSID
  6. INTO TABLE TAB_KEY     " 存放主键项目的内部表
  7. WHERE VBEL2 = 'XXXXXXXXXX' " 销售凭证编号
  8. AND POSN2 = 'YYYYYY'.    " 销售凭证明细编号

复制代码

2)、再根据销售凭证编号和明细编号,从BSAD中检索出已清帐明细行项目

  1. SELECT BURKS             " 公司代码
  2. BELNR             " 财务凭证编号
  3. GJAHR             " 会计年度
  4. BUZEL             " 会计凭证中的行项目
  5. FROM BSAD
  6. APPEND TABLE TAB_KEY   " 存放主键项目的内部表
  7. WHERE VBEL2 = 'XXXXXXXXXX' " 销售凭证编号
  8. AND POSN2 = 'YYYYYY'.    " 销售凭证明细编号

复制代码

3)、然后再根据上面检索出的主键列表,从BSEG中检索出相应的明细行项目

  1. SELECT bschl
  2. koart
  3. umskz
  4. shkzg "借方/貸方
  5. hkont
  6. gsber
  7. dmbtr
  8. wrbtr
  9. zuonr
  10. sgtxt
  11. zfbdt
  12. zterm
  13. zlsch
  14. zlspr
  15. hbkid
  16. bvtyp
  17. FROM bseg
  18. INTO TABLE tab_bseg         " 存放检索结果的内部表
  19. FOR ALL ENTRIES IN tab_key  " 存放主键项目的内部表
  20. WHERE bukrs = tab_key-bukrs " 公司代码
  21. AND gjahr = tab_key-gjahr " 财务凭证编号
  22. AND belnr = tab_key-belnr " 会计年度
  23. 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簇表BSEG取数优化的方法相关推荐

  1. 【MM系列】SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 簇表 A017 物料信息记录 ...

  2. SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表

    正文部分 A017 所属的簇池 KAPOL 的内容被以下几个表包含: KONH 条件( 抬头 ) KONP 条件( 项目 ) KONW 条件(1 维值比例) KONM 定价( 1维数量等级 ) 其中 ...

  3. SAP簇表(cluster table)BSEG使用方法

    1.BSEG可以拆分成6张表 BSAS+BSIS+BSAK+BSIK+BSAD+BSID = BSEG  2.6张表说明 cleared(已清帐) opened(未清帐)   BSAS BSIS GL ...

  4. SAP ABAP 特性相关表取数逻辑

    SAP中不管是特性还是分类在系统里都是经过内部变换转换的,相关表如下: KLAH:分类名称(CL03)与内部编号的转换表 KSML:分类所分配的特性(CT04) TCLA:类类型,分类类型(比如:02 ...

  5. [性能] SAP销售订单取数逻辑优化---索引表

    我也分享了许多篇性能优化的帖子,主要集中在sql.语法及合理的索引方面.我们在表上加索引确实能大幅提升性能,但是索引的数量.所需字段及利用率都是我们在新建索引时需要考虑的,对于大多数abaper而言, ...

  6. mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...

    专注于Java领域优质技术号,欢迎关注 作者:李长念 一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径 ...

  7. mysql的count(*)的优化,获取千万级数据表的总行数

    一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数. 二.关于cou ...

  8. 【DP优化】【P1430】序列取数

    传送门 Description 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自 ...

  9. MySQL 的 count(*) 的优化,获取千万级数据表的总行数

    一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数. 二.关于cou ...

最新文章

  1. 分布式监控报警平台Centreon之:Centreon依赖安装
  2. bzoj1669 [Usaco2006 Oct]Hungry Cows饥饿的奶牛
  3. php 配置域名与端口号,lnmp 配置不同端口号的域名
  4. VTK:图片之FillWindow
  5. Activity启动模式 launchMode
  6. 将mysql从服务器永远变为只读_将mysql从服务器永远变为只读
  7. 超炫酷的枪械3D动图,喜欢的不得了!
  8. 台式计算机有什么配置,目前台式电脑的主流配置有哪些?
  9. Android 反编译快手APP,gksvideourla
  10. 如何在Ruby中编写switch语句
  11. CSS优先级、CSS选择器、编写CSS时的注意事项
  12. 含本土测量软件的Q-Vision+Kvaser CAN/CAN FD/LIN总线解决方案
  13. 格雷码与二进制码的互换
  14. 每日一记—获取Bing每日一图实现Android欢迎页(一)
  15. Noisy machines: understanding noisy NNs and enhancing robustness to analog hardware errors
  16. 教妹学Java(十四):switch 语句详解
  17. len函数python_Python len()函数
  18. mac下 Github添加SSH keys
  19. 电商评论文本情感分类(中文文本分类)(第二部分-Bert)
  20. php 函数索引 中文索引

热门文章

  1. 来吧!我教你画真正的流程图
  2. 浅析Unity中的Enlighten与混合光照
  3. 远离极限编程 (Don’t do XP)
  4. Android学习笔记之SoftReference软引用,弱引用WeakReference
  5. keepalived实现lvs高可用并负载均衡lamp
  6. 【jquery】ajax 请求成功后新开窗口被拦截解决方法
  7. Oracle技术之OCRCONFIG工具
  8. 使用SQL Server 2008 Extended Events SSMS Addin轻松管理XEvents
  9. 给写新疆开放互联网一周纪念
  10. C# 视频监控系列(7):服务器端——封装API(下)(1)