前言
在上一篇 [ 会计凭证自动拆分
](http://mp.weixin.qq.com/s?__biz=MzkwNzUxNDQ5Mg==&mid=2247484460&idx=1&sn=60d6b1b6ea517db239b016b3740bb470&chksm=c0d9433ff7aeca2996b00827e8e59ac1486d8a8b98a1e7b6b892dbf7b7617cfad14192c3a480&scene=21#wechat_redirect)
文章介绍过, 实施BADI 'FI_GL_POSTING_SPLIT'后,可实现总账凭证的自动拆分,然而在实际使用过程中,调用BAPI
'BAPI_ACC_DOCUMENT_POST'后,仍然会报凭证超过999行错误
。在badi中打断点调试的时候,发现程序未进入断点。所以凭证拆分功能未生效。
问题原因分析
在'FI_GL_POSTING_SPLIT_CHECK'方法中可以看到,如果凭证行项目的统驭科目的科目类型是D(客户)/V/K(供应商)时,方法直接返回了,未执行BADI
解决方案
在
'FI_GL_POSTING_SPLIT_CHECK'方法开始处,增加隐式增强,当满足某些条件时(如凭证抬头文本或bapi的调用程序为自开发的程序时),去调用badi,使得拆分标记字段e_split为'X'.
代码 如下:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Function Module FI_GL_POSTING_SPLIT_CHECK, Start A*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 7 ZFI_DOCUMENT_CHECK. "active version DATA: lv_flag_split TYPE xfeld. DATA: lt_callstack TYPE abap_callstack, ls_callstack TYPE abap_callstack_line. IF gr_badi_gl_posting_split IS INITIAL. "note 2808896 TRY. GET BADI gr_badi_gl_posting_split. "note 2808896 CATCH cx_badi_not_implemented. CLEAR gr_badi_gl_posting_split. "note 2808896 ENDTRY. ENDIF. "note 2808896
CHECK gr_badi_gl_posting_split IS BOUND. "note 2808896
CLEAR lv_flag_split. REFRESH lt_callstack.
CALL FUNCTION 'SYSTEM_CALLSTACK' EXPORTING max_level = 0 IMPORTING callstack = lt_callstack.
*&---1. 发票输出凭证拆分 LOOP AT t_bkpf TRANSPORTING NO FIELDS WHERE bktxt = '零售公司应收' OR bktxt = '门店分公司应付'. EXIT. ENDLOOP. IF sy-subrc = 0. lv_flag_split = abap_true. ENDIF.
*&---2. FICO009接口凭证拆分 LOOP AT lt_callstack INTO ls_callstack WHERE mainprogram = 'ZPO_CL_SI_SAP_FICO009_ACC_VOUCCP'. EXIT. ENDLOOP. IF sy-subrc = 0. lv_flag_split = abap_true. ENDIF.
IF lv_flag_split = abap_true. CALL BADI gr_badi_gl_posting_split->activate_document_split "2808896 IMPORTING e_split = e_split. ENDIF.
ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*