BADI-AC_DOCUMENT-交货单过账科目替代
一、业务场景
- 事务代码VL02N/VL22N及其他交货单过账事务,在交货单过账生成会计凭证的时候对科目进行替代
二、BADI增强:AC_DOCUMENT
-
这个BADI理论上可以处理很多的会计凭证科目替代,不止是交货单过账,MIRO和MIGO都会走这个BADI。
-
修改方法 CHANGE_INITIAL,可以在这个方法内进行科目替代
-
注意事项替代的部分代码是必须的 , ex_document - header - bktxt = im_document - header - bktxt .在方法CHANGE_AFTER_CHECK中也必须写一个bktxt的传值。此处 BKTXT 不传替代将不起效 。
-
参考代码
METHOD if_ex_ac_document~change_initial .DATA : it_accit TYPE accit_t .DATA : wa_accit TYPE accit .DATA : it_sub_t TYPE accit_sub_t .DATA : wa_accit_sub TYPE accit_sub .DATA : l_kosar TYPE kosar .DATA : l_kostl TYPE kostl .DATA : l_lfart TYPE lfart .DATA ls_alter TYPE ztfico_alter .IF im_document-header-tcode = 'VL02N' .it_accit = im_document-item[] .CLEAR wa_accit .LOOP AT it_accit INTO wa_accit .IF wa_accit-vbeln IS NOT INITIAL AND wa_accit-ktosl EQ 'GBB' .CLEAR : l_lfart, l_kosar .SELECT SINGLE lfart INTO l_lfart FROM likp WHERE vbeln = wa_accit-vbeln .SELECT SINGLE kosar INTO l_kosar FROM csks WHERE kostl = wa_accit-kostl AND kokrs = 'QY00' .CLEAR ls_alter .SELECT SINGLE * INTO ls_alter FROM ztfico_alter WHERE lfart = l_lfart AND kosar = l_kosar .IF ls_alter IS NOT INITIAL .wa_accit-hkont = ls_alter-hkont .ENDIF .MODIFY it_accit FROM wa_accit .ENDIF .CLEAR wa_accit .ENDLOOP .CLEAR wa_accit .LOOP AT it_accit INTO wa_accit .CLEAR wa_accit_sub .MOVE-CORRESPONDING wa_accit TO wa_accit_sub .APPEND wa_accit_sub TO it_sub_t .CLEAR wa_accit .ENDLOOP .ex_document-item[] = it_sub_t[] . " 输入行项目替代输出行项目ex_document-header = im_document-header . " 输入的抬头替代输出的ENDIF .ex_document-header-bktxt = im_document-header-bktxt . " 输入的抬头替代输出的 ENDMETHOD .METHOD if_ex_ac_document~change_after_check .ex_document-header-bktxt = im_document-header-bktxt . ENDMETHOD .
-
注意:在标准的会计凭证替代不起效的时候考虑使用AC_DOCUMENT增强和BTE增强。