点击此处---> 群内免费提供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数据
请注意 XBKPF替代的值 会更新ACCHD_FI
请注意FKBER, OBBH 如果替代FKBER, 必须要住fkber_long是否有值,如果fkber_long 有值,将以fkber_long 为主,obbh 替代fkber的逻辑将失效!!!
通过FI_DOCUMENT_CHECK 确实可以替代 E_BKPF里面的值.可以将BKPF的附加字段赋值
如图:
通过替代 自定义字段ZZDXM 确实有值替代上了
然而,当执行到
FI_DOCMENT_PROJECT 中的时候 XBKPF 这个值却消失了
请注意,XBKPF 值 已经被清空.
那么 XBKPF的值怎么获取的? 然后进入Z*1120?
可以看到
SAPLFACI 中P_ACC的值来自ACCHD_FI
故,ACCHD_FI中需要同样添加自定义字段 参与传值!
注意 ACCHD_FI 不能直接做APPEND ,请在ACCHD 直接创建APPEND 添加自定义字段.
P_ACC会把值回传给XBKPF...
代码如下:
所以我们可以整理出如下的逻辑
OBBH 中我们处理的是XBKPF 结构
XBKPF 结构数据 会传入ACCHD_FI结构中暂存
ACCDH_FI再会将数据 放入P_ACC中
P_ACC 会把值在传入XBKPF 后
最后进入 BTE:Z*1120的时候 根据P_ACC产生的XBKPF 执行BTE
那么问题来了.
我们可以看到 P_ACC的结构是由SAP自动生成的!
那如何生成 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
艾米原创,请尊重劳动成果,转载请注明出处.
欢迎留言进行讨论!