现状:我们在使用BAPI_ACC_DOCUMENT_POST生成会计凭证时,大家会注意到,票据相关凭证无法通过该BAPI进行调用,为此SAP提供的方式有2种:1、使用BDC生成会计凭证;2、调用程序RFBIBL00(底层也是使用BDC)
在调用BAPI生成票据相关凭证(W特殊总帐)时,需要注意2点,1、返回F5 246的错误消息;2、票据相关内容无传入参数可以进行写入;
解决:1、针对报错消息,对标准代码进行修改(增加调用程序判断,以免影响标准业务)
代码位置:LFACIF02 1944行
*{ REPLACE YZDK906844 1
*\ MESSAGE E246 WITH X_UMSKS X_UMSKZ.
"如果资金系统BAPI函数调用,则不进行报错,应付票据进行过账
DATA lt_callstack TYPE SYS_CALLST.
CALL FUNCTION 'SYSTEM_CALLSTACK'
* EXPORTING
* MAX_LEVEL = 0
IMPORTING
* CALLSTACK =
ET_CALLSTACK = lt_callstack
.
READ TABLE lt_callstack WITH KEY PROGNAME = 'SAPLZFG_FI003' EVENTNAME = 'ZFM_FI_ACCDOC_CREATE' TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
MESSAGE E246 WITH X_UMSKS X_UMSKZ.
ENDIF.
*} REPLACE
2、票据相关参数传入需要借助Memory ID进行传入,然后在标准代码中进行引入,然后写入数据即可。
在程序LFACIF5D的FI_DOCUMENT_PREPARE中读取Memory ID内容,将字段写入到XBSED内表中,实现票据字段的传输。
总结:以上两点搞定之后,正常调用BAPI生成票据相关的会计凭证即可。