一般情况适用SAP提供的标准替代GGB1即可实现替代功能,一些业务场景下不走标准的替代功能。或者尝试FIBF 00001120 BTE
1,创建BADI实施并重定义方法 CHANGE_AFTER_CHECK
将更改后的数据放入到EX_DOCUMENT中
如果替换的字段不在ACC_DOCUMENT_SUBST中,则添加相应的字段到结构中。
代码示例如下:
METHOD IF_EX_AC_DOCUMENT~CHANGE_AFTER_CHECK.
DATA:LV_FLAG TYPE CHAR01 .
DATA:LV_KUNNR TYPE BSEG-KUNNR .
DATA:LV_ZTERM TYPE BSEG-ZTERM .
DATA:LS_CONFIG TYPE ZFIT0004 .
DATA:LS_ITEM TYPE ACCIT,
LS_SUB_ITEM TYPE ACCIT_SUB.
DATA:LV_LIFNR TYPE LFA1-LIFNR .
DATA:LV_TEXT TYPE STRING .
DATA:
LT_TINLINETAB TYPE TABLE OF TLINE,
LT_TLINETAB TYPE TABLE OF TLINE,
LS_TINLINETAB TYPE TLINE,
LS_TLINETAB TYPE TLINE.
DATA:LS_THEAD TYPE THEAD .
DATA:LV_NAME TYPE THEAD-TDNAME .
IF IM_DOCUMENT-HEADER-TCODE EQ 'VF01' OR IM_DOCUMENT-HEADER-TCODE EQ 'VF04' OR IM_DOCUMENT-HEADER-TCODE EQ 'VF02'.
*获取付款条件 分期开票的,需要替代税科目2221* 为“待转销项税”,付款条件=Z4*开头2221180000
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE KUNNR IS NOT INITIAL AND ZTERM IS NOT INITIAL AND ZTERM CP 'Z4*'.
LV_ZTERM = LS_ITEM-ZTERM .
LV_FLAG = 'X' .
EXIT .
ENDLOOP .
IF LV_FLAG EQ 'X' .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '2221*' .
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
LS_SUB_ITEM-HKONT = '2221180000'.
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '6001*' .
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
LS_SUB_ITEM-HKONT = '6001030101'.
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '6401*' .
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
LS_SUB_ITEM-HKONT = '6401030101'.
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
CLEAR LS_CONFIG .
SELECT
SINGLE
*
INTO LS_CONFIG
FROM
ZFIT0004
WHERE ZTERM = LV_ZTERM .
IF SY-SUBRC = 0 .
IF LS_CONFIG-ZFQS > 12 .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '1122*' .
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
LS_SUB_ITEM-HKONT = '1531020101'.
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
ENDIF .
ENDIF .
ENDIF .
ENDIF .
*发票过账时,将供应商替代到 进项税科目2221* 的 ZZFI001
IF IM_DOCUMENT-HEADER-TCODE EQ 'MIR6' OR IM_DOCUMENT-HEADER-TCODE EQ 'MIRO' OR IM_DOCUMENT-HEADER-TCODE EQ 'MIR7' .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE LIFNR IS NOT INITIAL .
LV_LIFNR = LS_ITEM-LIFNR.
LV_FLAG = 'X' .
EXIT .
ENDLOOP.
IF LV_FLAG EQ 'X' .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '2221*' OR HKONT EQ '2202000000'.
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
LS_SUB_ITEM-ZZFI001 = LV_LIFNR .
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
ENDIF .
ENDIF .
* IF IM_DOCUMENT-HEADER-TCODE = 'AFAB' OR IM_DOCUMENT-HEADER-TCODE = 'AFABN' .
* LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE BUKRS EQ '2600' AND ANLKL EQ 'Z108' AND KOSTL = '2600060000' AND HKONT CP '6601*'.
* MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
* LS_SUB_ITEM-HKONT = '6401010401' .
* LS_SUB_ITEM-KOSTL = SPACE .
* APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
* ENDLOOP.
* ENDIF .
*当事务代码=VF01,VF02时,检查发票抬头问题“免税/免抵退 文本”,根据文本内容替代科目2221* 的ZZFI002
*免税=Z01
*免抵退=Z02
DATA:LV_VBELN TYPE VBRK-VBELN .
DATA:LT_TLINE TYPE TABLE OF TLINE,
LS_TLINE TYPE TLINE.
CLEAR LV_FLAG .
IF IM_DOCUMENT-HEADER-TCODE EQ 'VF01' OR IM_DOCUMENT-HEADER-TCODE EQ 'VF04' OR IM_DOCUMENT-HEADER-TCODE EQ 'VF02'.
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE VBELN IS NOT INITIAL .
LV_VBELN = LS_ITEM-VBELN .
LV_FLAG = 'X' .
EXIT .
ENDLOOP .
IF LV_FLAG IS NOT INITIAL .
*获取发票抬头长文本
LV_NAME = LV_VBELN .
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = 'TX18'
LANGUAGE = SY-LANGU
NAME = LV_NAME
OBJECT = 'VBBK'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
* OLD_LINE_COUNTER =
TABLES
LINES = LT_TLINE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT LT_TLINE INTO LS_TLINE .
CONCATENATE LV_TEXT LS_TLINE-TDLINE INTO LV_TEXT .
ENDLOOP .
LOOP AT IM_DOCUMENT-ITEM INTO LS_ITEM WHERE HKONT CP '6001*' or HKONT CP '6051*' .
MOVE-CORRESPONDING LS_ITEM TO LS_SUB_ITEM .
IF LV_TEXT CP '*免税*'.
LS_SUB_ITEM-ZZFI002 = 'Z01'.
ELSEIF LV_TEXT CP '*免抵退*' .
LS_SUB_ITEM-ZZFI002 = 'Z02'.
ENDIF .
APPEND LS_SUB_ITEM TO EX_DOCUMENT-ITEM .
ENDLOOP .
ENDIF .
ENDIF .
ENDMETHOD.