OBBH 一些见解和心得(原创,请尊重劳动成果,转载请注明出处!)

2021-10-23 16:16发布


          点击此处--->   EasySAP.com 群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)

RS_SET_BREAKPOINT 可以巧妙地找到OBBH 中替代的位置

(专家模式设置断点)  可以看到运行的程序名和行号

生成代码: RGUGBR00 根据OBBH配置,自动生成GBTDOFIB

问题: 如果在BKPF 做了APPEND 结构,为什么OBBH 却替代不上呢?

我做了如下分析:

财务生成会计凭证,主要会涉及一些Function,先后调用执行!!(请注意!)

FUNCTION : FI_DOCUMENT_CHECK

                  G_VSR_SUBSTITUTION_CALL 替代

                  FI_DOCUMENT_project

         BTE: Z*1120(如果启用) FIBF激活


G_VSR_SUBSTITUTION_CALL 会运行OBBH配置走相关逻辑 替代E_BKPF数据

image.png

image.png

image.png

请注意 XBKPF替代的值 会更新ACCHD_FI

image.png

image.png

请注意FKBER, OBBH 如果替代FKBER, 必须要住fkber_long是否有值,如果fkber_long 有值,将以fkber_long 为主,obbh 替代fkber的逻辑将失效!!!

通过FI_DOCUMENT_CHECK 确实可以替代 E_BKPF里面的值.可以将BKPF的附加字段赋值

如图:

通过替代 自定义字段ZZDXM 确实有值替代上了

image.png

然而,当执行到

FI_DOCMENT_PROJECT 中的时候 XBKPF 这个值却消失了

image.png

请注意,XBKPF 值 已经被清空.

那么 XBKPF的值怎么获取的? 然后进入Z*1120?

image.png

image.png

 可以看到 

 SAPLFACI 中P_ACC的值来自ACCHD_FI

故,ACCHD_FI中需要同样添加自定义字段 参与传值!

注意 ACCHD_FI 不能直接做APPEND ,请在ACCHD 直接创建APPEND 添加自定义字段.

P_ACC会把值回传给XBKPF...

代码如下:

image.png

所以我们可以整理出如下的逻辑

OBBH 中我们处理的是XBKPF 结构

XBKPF 结构数据 会传入ACCHD_FI结构中暂存

ACCDH_FI再会将数据 放入P_ACC中

P_ACC 会把值在传入XBKPF 后

image.png

最后进入 BTE:Z*1120的时候  根据P_ACC产生的XBKPF 执行BTE

那么问题来了.

我们可以看到 P_ACC的结构是由SAP自动生成的!

image.png

那如何生成 P_ACC. 经过研究,请执行FUNCITON:FI_DOCUMENT_INIT 即可以重新生成 LFACIGEN 并重构P_ACC

当然可以运行程序:RGZZGLUX.

通过以上代码综合分析得出如下结论:

如果在bkpf 通过append 添加了自定义字段

如果想在OBBH里面实现对自定义字段的替代

需要在结构ACCHD同样添加相同的APPEND结构

运行SE37:FI_DOCUMENT_INIT 或者SE38:RGZZGLUX.

就可以实现OBBH 对BKPF自定义字段的替代

 

总结:

  如果是后勤集成的会计凭证

 1. 首先由后勤数据构建ACCCIT_FI(行项目) ACCHD_FI(抬头)  ACCCR_FI(金额)

 2. 调用FUNCTION: FI_DOCUMENT_CHECK  循环ACCCIT_FI ,循环时ACCCIT_FI的值传入XBSEG

ACCHD_FI传入 XBKPF ,然后 执行obbh逻辑替代 抬头,行项目(通过执行函数G_VSR_SUBSTITUTION_CALL

3.调用FUNCTION:FI_DOCUMENT_PROJECT  ,系统将ACCHD_FI、 ACCCIT_FI 辅值进P_ACC 构建复合内表,合并抬头行项目信息

4.P_ACC 重构 XBSEG XBKPF(重构P_ACC 请使用函数:FI_DOCUMENT_INIT )

5. 调用BTE:1120 传入XBSEG XBKPF

 最后财务更新信息以XBSEG XBKF为准。

 

2016.11.29添加

 G_VSR_SUBSTITUTION_CALL 同样可以用来跟踪CO的替代逻辑

 OKC9的替代是对结构 RCL_ICCF 的替代

 

   CALL FUNCTION 'G_VSR_SUBSTITUTION_CALL'
       EXPORTING
            CALLUP_POINT GC_VALEVENT_ACC_DET
            SUBSTITUTION LD_SUBSTID
            TABNAME      LC_TABNAME
            TAB_DATA1    RCL_ICCF
            VALUSER      GC_VALUSER_CO
       IMPORTING
            RESULT       LD_RESULT
            SUB_DATA1    RCL_ICCF
       EXCEPTIONS
            NOT_FOUND    1
            OTHERS       2.

 

CALLUP_POINT 
SUBSTITUTION 
 是okc9配置信息

TABNAME         是LC_TABNAME = ‘RCL_ICCF’

 VALUSER       是 CO

对于FI的OBBH , VALUSR 是 FI

LD_RESULT 返回值决定是否替代

详情参照FM:K_ICCF_ACCOUNT_DETERMINE_SUBST

 

艾米原创,请尊重劳动成果,转载请注明出处.

欢迎留言进行讨论!


赞赏支持