总账会计凭证自动拆分未生效问题处理

作者:ABAP三叔 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:CO, FI, 财务
总账会计凭证自动拆分未生效问题处理 - 封面图
总账会计凭证自动拆分未生效问题处理 - 封面图

前言

在上一篇 [ 会计凭证自动拆分

](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)---------------------------------------------------------------------------------$*$*
ABAP三叔

关于作者:ABAP三叔

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「总账会计凭证自动拆分未生效问题处理.md」整理生成,仅用于内部技术分享与学习交流。