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增强。