如何提高读取BSEG的性能(SAP已清项和未清项的管理)

本文介绍了如何优化SAP系统中BSEG表的读取性能,包括利用辅助索引表(如BSAD、BSID等)来减少查询时间,并讨论了未清项与已清项的概念及其管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何提高读取BSEG的性能(SAP已清项和未清项的管理)

The original URL: http://silverw0396.javaeye.com/blog/90624

 

The FI-GL table BSEG, which is one of our biggest PR1 tables, is an example of a clustered table. At the database-level, there is no table called BSEG, but instead RFBLG is being used for the BSEG data. Most of the fields known in BSEG are not known in the database table RFBLG, but are compressed in a VARDATA field of RFBLG. So tests in the WHERE clause of SELECTs agains BSEG are not used by the database (e.g. lifnr = vendor account number, hkont = G/L account, kostl = cost center). As a consequence, these tests are done after the facts similar to using the CHECK statement, and as already said in tip 1, CHECK statements are worse than tests in the WHERE-clause.

Check this link also.
https://forums.sdn.sap.com/thread.jspa?forumID=50&threadID=38572&messageID=373481#373481
1) select with header information from bkpf
2) use secondary index tables
http://forums.sdn.sap.com/jive3/thread.jspa?forumID=50&threadID=14280&messageID=105504#105504
1.BSAK Accounting: Secondary Index for Vendors
2.BSAS Accounting: Secondary Index for G/L Accounts
3.BSIK Accounting: Secondary Index for Vendors
4.BSID Accounting: Secondary Index for Customers
5.BSIM Secondary Index, Documents for Material
6.BSAD Accounting: Secondary index for customers
7.BSIS Accounting: Secondary Index for G/L Accounts
3) use logical data base e.g.: BRF
4)具体说明
BSAD:应收明细(已清帐)
BSID:应收明细(未清帐)
BSAS:总帐明细(已清帐)
BSIS:总帐明细(未清帐)
BSAK:应付明细(已清帐)
BSIK:应付明细(未清帐)
BSEG主要通过“凭证号”“会计年度”“行号”和这六张表关联,BKPF 是财务凭证抬头,BSEG 是财务凭证行项目。在财务凭证记账的时候,数据被插入 BKPF 和 BSEG,如果有必要,数据同时插入以上六张表中的一个未清表。
一般情况下一笔业务产生的凭证都是未清的,那么:
   如果该业务行是客户相关的,则被记录到BSID;
   如果该业务行是供应商相关的,则被记录到BSIK;
   无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;
   但是如果这笔业务被清帐了,则相应的记录会从BSI*转移到BSA*

一般情况下:
   应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关,又和未清项管理的总帐科目相关;
   应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关,又和未清项管理的总帐科目相关;
   其他总帐科目一般不启用未清项管理,所以记录一般都放在BSIS中。

 

5)未清项和已清项的概念
清项(Open Item),表示财务凭证行项目的一种挂账的状态,这种状态,提示该行项目需要被清帐(Clearing)。在 FS00 设置科目的时候,有一个选项是 'Open Item Mngment',该选项选中后,表示财务凭证行项目中记账科目为此科目时,该行项目有未清或者已清的状态。
已清项(Close Item),表示该行项目已经被清帐。
具体应用中,'Open Item Mngment' 用得比较普遍的是应收(客户)和应付(供应商)的科目。
此外,在总帐中,也有一些应用,比如对于银行的对账单,也一般使用,这样可以再对帐无误后再做清帐。

为什么需要使用到未清项管理?目的是为了记录完整的业务交易。比如对客户A有两笔应收款 A1 与 A2,A1 因为有些商务纠纷,可能需要进一步交涉,所以客户先针对 A2付款。如果没有未清项管理,这一笔收款可能只能针对时间顺序靠前的交易 A1 了,显然,这样是一种比较混乱的状态。实际上,几乎大部分科目理论上都可以进行未清项管理,但是,有可能这样做不能带来显著的效益反而带来管理成本的增加。

6)未清项和已清项sap提供的TCODE
在 SAP R/3 中,使用 FBL1N , FBL3N, FBL5N 分别可以查看供应商,总账,客户类型科目的未清已清项。
via: https://forums.sdn.sap.com/thread.jspa?threadID=100759  

### 验证 SAP 数据表 BSEG 中字段 ZUONR PRPS-PSPHI 的关系 在 SAP 系统中,`BSEG` 表存储了财务凭证的行项目数据,而 `PRPS` 表则用于存储项目的结构层次信息。要验证 `BSEG-ZUONR` 字段与 `PRPS-PSPHI` 字段之间的关系是否正确,可以从以下几个方面入手: #### 1. **理解字段含义** - `ZUONR`: 在 `BSEG` 表中代表分配号,通常用于关联其他业务对象(如采购订单、合同等)。其具体意义取决于科目配置中的排序码设置[^5]。 - `PSPHI`: 在 `PRPS` 表中表示工作细分结构 (WBS Element),主要用于项目管理模块。 两者的关系通常是通过特定的业务逻辑建立起来的,例如当创建一个与项目相关的财务凭证时,系统会自动将 WBS 元素 (`PSPHI`) 映射到分配号 (`ZUONR`) 上。 #### 2. **验证方法** ##### 方法一:SQL 查询验证 可以通过 SQL 查询的方式直接对比两个字段的数据一致性。以下是示例代码: ```sql SELECT b.zuonr, p.pspid, p.psphi FROM bseg AS b INNER JOIN prps AS p ON b.bukrs = p.kokrs AND b.prctr = p.prctr WHERE b.gjahr = '2023' -- 替换为具体的年度 AND b.bukrs = '1000'; -- 替换为具体的公司代码 ``` 上述查询假设 `BSEG.PRCTR` (利润中心)作为两者的共同键之一,并且 `BSEG.ZUONR` 应该等于 `PRPS.PSPHI` 或者存在某种映射关系。 ##### 方法二:事务代码 SE16N/SE16 利用标准事务代码 `SE16N` 或 `SE16` 手动查看数据的一致性。输入条件如下: - 对于 `BSEG` 表,筛选出目标期间内的记录; - 对应的 `PRPS` 表,则需提供相同的利润中心或其他匹配条件。 比较结果集中 `ZUONR` 是否对应至有效的 `PSPHI` 值。 ##### 方法三:ABAP 报表开发 编写自定义 ABAP 程序实现更复杂的校验逻辑。以下是一个简单的程序框架: ```abap REPORT zvalidate_bseg_prps. DATA: lt_bseg TYPE TABLE OF bseg, ls_bseg LIKE LINE OF lt_bseg, lt_prps TYPE TABLE OF prps, ls_prps LIKE LINE OF lt_prps. START-OF-SELECTION. SELECT bukrs gjahr belnr zeile zuonr INTO CORRESPONDING FIELDS OF TABLE lt_bseg FROM bseg WHERE gjahr = '2023'. LOOP AT lt_bseg INTO ls_bseg. SELECT SINGLE kokrs psphi INTO CORRESPONDING FIELDS OF ls_prps FROM prps WHERE kokrs = ls_bseg-bukrs AND prctr = ls_bseg-prctr. IF sy-subrc NE 0 OR ls_prps-psphi <> ls_bseg-zuonr. WRITE: / 'Mismatch found:', ls_bseg-belnr, ls_bseg-zeile, ls_bseg-zuonr, ls_prps-psphi. ENDIF. ENDLOOP. ``` 此脚本遍历指定时间段内的所有 `BSEG` 记录并尝试找到对应的 `PRPS` 条目。如果发现不一致的情况,则输出错误消息。 #### 3. **注意事项** 尽管可以直接访问 `BSEG` 表,但在 S/4HANA 环境下推荐优先考虑使用透明表 `ACDOCA` 取代传统集群表 `BSEG`,因为后者性能较差且维护成本高[^4]。此外,在设计任何涉及大规模读取的操作,请务必评估索引策略以及可能存在的锁争用风险[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值