SAP S4自开发校验程序跳过了OB28校验层面的问题

问题:现在自开发的过账程序在会计凭证过账后,一个凭证产生了两个利润中心。而项目组的一个FICO在OB28出口中做了一个凭证只有一个利润中心的校验。

OB28校验逻辑,如下:
SELECT DISTINCT blart
INTO CORRESPONDING FIELDS OF TABLE lt_fit_058
FROM zfit_058.
READ TABLE lt_fit_058 TRANSPORTING NO FIELDS WITH KEY blart = bkpf-blart.
IF sy-subrc = 0 AND bkpf-tcode NE ‘AFABN’ .
CONSTANTS: c_xbseg(85) VALUE ‘(SAPMF05A)XBSEG[]’.
FIELD-SYMBOLS: TYPE STANDARD TABLE.
……

原因:
经过排查,上述逻辑中使用的凭证内表 ‘(SAPMF05A)XBSEG[]’, 但是在开发的程序调用函数过账时,在这个内表中的数据为空,在另一个内表(SAPLFACI)ACCIT_FI[], 自开发的程序产生的凭证的信息是有数据的。

解决方案:将现在的OB28的校验出口中的内表 ‘(SAPMF05A)XBSEG[]’,替换为(SAPLFACI)ACCIT_FI[]。

重点关注SAP的会计凭证的几个内表:
凭证头保存在内表ACCHD_FI[]中,凭证行项目保存在ACCIT_FI[]中,货币信息保存在ACCCR_FI[]中

参考文献:
【ABAP】会计凭证替代/校验(非BTE方式)如何读取同一凭证的另一个行项目
在执行会计凭证替代(OBBH)/校验(OB28)时,出口提供给我们的BSEG系统工作区中只能得到当前凭证行项目的数据,而不是完整的会计凭证数据。而有时的需求要求我们得到该凭证的另一个行项目的数据,这时候就需要通过动态的方法去读取这条数据。
当程序执行到替代/校验的出口时,会计凭证的数据会保存在函数组FACI的内表ACCIT_FI[]中。我们可以通过FIELD-SYMBOL方式,动态读取(SAPLFACI)ACCIT_FI[],从而得到完整的会计凭证数据。此时凭证号还未分配,如果有多张凭证,则凭证号标记为$1,$2…
值得一提的是,FACI这个函数组的功能就是处理FI凭证,因此FI凭证信息大都可以从这里找到。如凭证头保存在内表ACCHD_FI[]中,凭证行项目保存在ACCIT_FI[]中,货币信息保存在ACCCR_FI[]中…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值