本文共 26480 字,大约阅读时间需要 88 分钟。
FUNCTION ZMM_CONTRACT_CREATE . *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_HEAD) TYPE ZVS_EKKO *" VALUE(BAPIFUN) TYPE CHAR1 *" VALUE(TESTRUN) TYPE CHAR1 OPTIONAL *" VALUE(NOAPPLLOG) TYPE CHAR1 OPTIONAL *" EXPORTING *" VALUE(E_SUCC) TYPE CHAR1 *" VALUE(E_EBELN) TYPE EBELN *" VALUE(E_MESSAGE) TYPE GTER_TEXT *" TABLES *" I_ITEM STRUCTURE ZVS_EKPO *" ET_RETURN STRUCTURE BAPIE1RET2 OPTIONAL *"---------------------------------------------------------------------- REFRESH ET_RETURN . CLEAR :GS_CTRD_LOG . MOVE-CORRESPONDING I_HEAD TO GS_CTRD_LOG . GS_CTRD_LOG -TESTRUN = TESTRUN . GS_CTRD_LOG -BAPIFUN = BAPIFUN . DATA : HEADER LIKE BAPIMEOUTHEADER , HEADERX LIKE BAPIMEOUTHEADERX , TECHNICAL_DATA LIKE BAPIMEOUTTECH , LV_EBELN TYPE BAPIMEOUTHEADER - NUMBER , LT_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE , LT_ITEM LIKE TABLE OF BAPIMEOUTITEM WITH HEADER LINE , LT_ITEMX LIKE TABLE OF BAPIMEOUTITEMX WITH HEADER LINE , LT_ITEM_CONDITION LIKE TABLE OF BAPIMEOUTCONDITION WITH HEADER LINE , LT_ITEM_CONDITIONX LIKE TABLE OF BAPIMEOUTCONDITIONX WITH HEADER LINE , LT_VALID LIKE TABLE OF BAPIMEOUTVALIDITY WITH HEADER LINE , LT_VALIDX LIKE TABLE OF BAPIMEOUTVALIDITYX WITH HEADER LINE , LT_EXTENSIONIN LIKE TABLE OF BAPIPAREX WITH HEADER LINE , LT_EXTENSIONOUT LIKE TABLE OF BAPIPAREX WITH HEADER LINE , LT_PARTNER LIKE TABLE OF BAPIMEOUTPARTNER WITH HEADER LINE , LT_PARTNERX LIKE TABLE OF BAPIMEOUTPARTNERX WITH HEADER LINE , LT_ITEM_TEXT LIKE TABLE OF BAPIMEOUTITEMTEXT WITH HEADER LINE , LT_HEADER_TEXT LIKE TABLE OF BAPIMEOUTTEXT WITH HEADER LINE , LS_HEADEXIN TYPE BAPI_TE_MEOUTHEADER . DATA :LT_WYT3 LIKE TABLE OF WYT3 WITH HEADER LINE . DATA : LW_GCJZNQ TYPE ZMM_GCJZNQ . IF I_HEAD -WAERS = '' . SELECT SINGLE WAERS FROM LFM1 INTO I_HEAD -WAERS WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG . ENDIF . CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_HEAD -LIFNR IMPORTING OUTPUT = I_HEAD -LIFNR . IF I_HEAD -ZZEVRT IS NOT INITIAL . CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_HEAD -ZZEVRT IMPORTING OUTPUT = I_HEAD -ZZEVRT . ENDIF . HEADER - NUMBER = I_HEAD -EBELN . HEADER -COMP_CODE = I_HEAD -BUKRS . HEADERX -COMP_CODE = 'X' . HEADER -DOC_TYPE = I_HEAD -EVART . HEADERX -DOC_TYPE = 'X' . HEADER -CREAT_DATE = SY -DATUM . HEADERX -CREAT_DATE = 'X' . HEADER -CREATED_BY = SY -UNAME . HEADERX -CREATED_BY = 'X' . HEADER -VENDOR = I_HEAD -LIFNR . HEADERX -VENDOR = 'X' . HEADER -ITEM_INTVL = 1 . HEADERX -ITEM_INTVL = 'X' . HEADER -SUBITEMINT = '1' . HEADERX -SUBITEMINT = 'X' . HEADER -PURCH_ORG = I_HEAD -EKORG . HEADERX -PURCH_ORG = 'X' . HEADER -PUR_GROUP = I_HEAD -EKGRP . HEADERX -PUR_GROUP = 'X' . HEADER - CURRENCY = I_HEAD -WAERS . HEADERX - CURRENCY = 'X' . HEADER -DOC_DATE = I_HEAD -VEDAT . HEADERX -DOC_DATE = 'X' . HEADER -VPER_START = I_HEAD -KDATB . HEADERX -VPER_START = 'X' . HEADER -VPER_END = I_HEAD -KDATE . HEADERX -VPER_END = 'X' . IF I_HEAD -TXT_K01 <> '' . LT_HEADER_TEXT -TEXT_FORM = '*' . LT_HEADER_TEXT -TEXT_ID = 'K01' . LT_HEADER_TEXT -TEXT_LINE = I_HEAD -TXT_K01 . APPEND LT_HEADER_TEXT . CLEAR LT_HEADER_TEXT . ENDIF . *采购客服 ZZCGKH REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C1' AND PERNR = I_HEAD -ZZCGKH . IF LT_WYT3[] IS INITIAL . * CONCATENATE E_MESSAGE '该采购客服不存在于采购组织中,请联系IT修改!' INTO E_MESSAGE. ENDIF . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C1' . LT_PARTNERX -PARTN_ROLE = 'C1' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = I_HEAD -ZZCGKH . LT_PARTNERX -PARTNR = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C1' . LOOP AT LT_WYT3 WHERE PERNR <> I_HEAD -ZZCGKH . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C1' . LT_PARTNERX -PARTN_ROLE = 'C1' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = LT_WYT3 -PERNR . LT_PARTNERX -PARTNR = 'X' . LT_PARTNER -DELETE_IND = 'X' . "采购凭证中的删除标识 LT_PARTNERX -DELETE_IND = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . ENDLOOP . *采购协助 ZZCGXZ IF I_HEAD -ZZCGXZ IS NOT INITIAL . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C2' AND PERNR = I_HEAD -ZZCGXZ . IF LT_WYT3[] IS INITIAL . * CONCATENATE E_MESSAGE '该采购协助不存在于采购组织中,请联系IT修改!' INTO E_MESSAGE. ENDIF . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C2' . LT_PARTNERX -PARTN_ROLE = 'C2' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = I_HEAD -ZZCGXZ . LT_PARTNERX -PARTNR = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C2' . LOOP AT LT_WYT3 WHERE PERNR <> I_HEAD -ZZCGXZ . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C2' . LT_PARTNERX -PARTN_ROLE = 'C2' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = LT_WYT3 -PERNR . LT_PARTNERX -PARTNR = 'X' . LT_PARTNER -DELETE_IND = 'X' . "采购凭证中的删除标识 LT_PARTNERX -DELETE_IND = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . ENDLOOP . ELSE . "如果采购协助为空,就去取主数据,校验一个与采购客服相同的人员,删除其他 REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C2' AND PERNR = I_HEAD -ZZCGKH . IF SY -SUBRC = 0 . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C2' . LT_PARTNERX -PARTN_ROLE = 'C2' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = I_HEAD -ZZCGKH . LT_PARTNERX -PARTNR = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C2' . LOOP AT LT_WYT3 WHERE PERNR <> I_HEAD -ZZCGKH . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C2' . LT_PARTNERX -PARTN_ROLE = 'C2' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = LT_WYT3 -PERNR . LT_PARTNERX -PARTNR = 'X' . LT_PARTNER -DELETE_IND = 'X' . "采购凭证中的删除标识 LT_PARTNERX -DELETE_IND = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . ENDLOOP . ELSE . "要是没有和采购客服相同的人员的话,不取 ENDIF . ENDIF . *采购驻厂 ZZZCRY IF I_HEAD -ZZZCRY IS NOT INITIAL . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C3' AND PERNR = I_HEAD -ZZZCRY . IF LT_WYT3[] IS INITIAL . * CONCATENATE E_MESSAGE '该驻厂人员不存在于采购组织中,请联系IT修改!' INTO E_MESSAGE. ENDIF . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C3' . LT_PARTNERX -PARTN_ROLE = 'C3' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = I_HEAD -ZZZCRY . LT_PARTNERX -PARTNR = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . REFRESH LT_WYT3[] . SELECT * FROM WYT3 INTO TABLE LT_WYT3 WHERE LIFNR = I_HEAD -LIFNR AND EKORG = I_HEAD -EKORG AND PARVW = 'C3' . LOOP AT LT_WYT3 WHERE PERNR <> I_HEAD -ZZZCRY . CLEAR : LT_PARTNER ,LT_PARTNERX . LT_PARTNER -PARTN_ROLE = 'C3' . LT_PARTNERX -PARTN_ROLE = 'C3' . LT_PARTNER -LANGU = '1' . LT_PARTNERX -LANGU = 'X' . LT_PARTNER -PARTNR = LT_WYT3 -PERNR . LT_PARTNERX -PARTNR = 'X' . LT_PARTNER -DELETE_IND = 'X' . "采购凭证中的删除标识 LT_PARTNERX -DELETE_IND = 'X' . APPEND LT_PARTNER . APPEND LT_PARTNERX . ENDLOOP . ELSE . "因为驻厂只会有一个人,要是为空的话,那就不用考虑别的了,直接抓取主数据中的 ENDIF . DATA :LV_SERIAL_ID TYPE N LENGTH 10 , LV_KOPOS TYPE KOPOS . DATA :L_ITNO TYPE EBELP . LOOP AT I_ITEM . IF I_ITEM -MATNR IS NOT INITIAL . CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING INPUT = I_ITEM -MATNR IMPORTING OUTPUT = I_ITEM -MATNR EXCEPTIONS LENGTH_ERROR = 1 OTHERS = 2 . ENDIF . LT_ITEM -ITEM_NO = I_ITEM -EBELP . LT_ITEMX -ITEM_NO = I_ITEM -EBELP . LT_ITEMX -ITEM_NOX = 'X' . LT_ITEM -SHORT_TEXT = I_ITEM -TXZ01 . LT_ITEMX -SHORT_TEXT = 'X' . LT_ITEM -MATERIAL = I_ITEM -MATNR . LT_ITEMX -MATERIAL = 'X' . LT_ITEM -PLANT = I_ITEM -WERKS . LT_ITEMX -PLANT = 'X' . LT_ITEM -STGE_LOC = I_ITEM -LGORT . LT_ITEMX -STGE_LOC = 'X' . LT_ITEM -MATL_GROUP = I_ITEM -MATKL . LT_ITEMX -MATL_GROUP = 'X' . LT_ITEM -ITEM_CAT = I_ITEM -EPSTP . LT_ITEMX -ITEM_CAT = 'X' . LT_ITEM -TARGET_QTY = I_ITEM -KTMNG . LT_ITEMX -TARGET_QTY = 'X' . LT_ITEM -PO_UNIT = I_ITEM -MEINS . LT_ITEMX -PO_UNIT = 'X' . LT_ITEM -NET_PRICE = I_ITEM -NETPR . LT_ITEMX -NET_PRICE = 'X' . LT_ITEM -PRICE_UNIT = 1 . LT_ITEMX -PRICE_UNIT = 'X' . LT_ITEM -INFO_UPD = '' . LT_ITEMX -INFO_UPD = 'X' . APPEND LT_ITEM . CLEAR LT_ITEM . APPEND LT_ITEMX . CLEAR LT_ITEMX . IF I_ITEM -TXT_K01 <> '' . LT_ITEM_TEXT -ITEM_NO = I_ITEM -EBELP . LT_ITEM_TEXT -TEXT_FORM = '*' . LT_ITEM_TEXT -TEXT_ID = 'K01' . LT_ITEM_TEXT -TEXT_LINE = I_ITEM -TXT_K01 . APPEND LT_ITEM_TEXT . CLEAR LT_ITEM_TEXT . ENDIF . LV_SERIAL_ID = LV_SERIAL_ID + 1 . LV_KOPOS = 1 . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'PB00' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -NETPR . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . "I_HEAD-KDATB. LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . IF I_ITEM -ZYF <> 0 . "ZMB1 运费 ZYFDD ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZMB1' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZYFDD / '1.17' . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . IF I_ITEM -ZYF <> 0 . "ZRB1 运费(代垫) ZYF ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZRB1' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZYF . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . IF I_ITEM -ZSLDD <> 0 . "ZRB2 上力费(代垫) ZSLDD ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZRB2' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZSLDD . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . IF I_ITEM -ZSL <> 0 . "ZMB2 上力费(一票) ZSL ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZMB2' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZSL / '1.17' . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . IF I_ITEM -ZQTDD <> 0 . "ZRB3 其他(代垫) ZQTDD ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZRB3' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZQTDD . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . IF I_ITEM -ZQT <> 0 . "ZMB3 其他(一票) ZQT ADD 1 TO LV_SERIAL_ID . ADD 1 TO LV_KOPOS . LT_ITEM_CONDITION -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NO = I_ITEM -EBELP . LT_ITEM_CONDITIONX -ITEM_NOX = 'X' . LT_ITEM_CONDITION -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_ID = LV_SERIAL_ID . LT_ITEM_CONDITIONX -SERIAL_IDX = 'X' . LT_ITEM_CONDITION -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNT = LV_KOPOS . LT_ITEM_CONDITIONX -COND_COUNTX = 'X' . LT_ITEM_CONDITION -COND_TYPE = 'ZMB3' . LT_ITEM_CONDITIONX -COND_TYPE = 'X' . LT_ITEM_CONDITION -COND_VALUE = I_ITEM -ZQT / '1.17' . LT_ITEM_CONDITIONX -COND_VALUE = 'X' . LT_ITEM_CONDITION - CURRENCY = I_HEAD -WAERS . LT_ITEM_CONDITIONX - CURRENCY = 'X' . LT_ITEM_CONDITION -COND_P_UNT = 1 . LT_ITEM_CONDITIONX -COND_P_UNT = 'X' . LT_ITEM_CONDITION -COND_UNIT = I_ITEM -MEINS . LT_ITEM_CONDITIONX -COND_UNIT = 'X' . LT_ITEM_CONDITION -CHANGE_ID = 'I' . APPEND LT_ITEM_CONDITION . APPEND LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITIONX . CLEAR LT_ITEM_CONDITION . LT_VALID -ITEM_NO = I_ITEM -EBELP . LT_VALID -SERIAL_ID = LV_SERIAL_ID . * LT_VALID-PLANT = I_ITEM-WERKS. LT_VALID -VALID_FROM = SY -DATUM . LT_VALID -VALID_TO = '99991231' . APPEND LT_VALID . LT_VALIDX -ITEM_NO = I_ITEM -EBELP . LT_VALIDX -SERIAL_ID = LV_SERIAL_ID . LT_VALIDX -SERIAL_IDX = 'X' . LT_VALIDX -ITEM_NOX = 'X' . * LT_VALIDX-PLANT = 'X'. LT_VALIDX -VALID_FROM = 'X' . LT_VALIDX -VALID_TO = 'X' . APPEND LT_VALIDX . ENDIF . ENDLOOP . "若月奖励勾选,则季奖励和年奖励同时勾选传输 IF I_HEAD -ZZFANL_Y = 'X' . I_HEAD -ZZFANL_J = 'X' . I_HEAD -ZZFANL_N = 'X' . ENDIF . * 自定义字段 CLEAR LT_EXTENSIONIN . LT_EXTENSIONIN - STRUCTURE = 'BAPI_TE_MEOUTHEADER' . LT_EXTENSIONIN -VALUEPART1+0 ( 10 ) = I_HEAD -EBELN . LT_EXTENSIONIN -VALUEPART1+10 ( 10 ) = I_HEAD -ZZEVRT . LT_EXTENSIONIN -VALUEPART1+20 ( 5 ) = I_HEAD -ZZEVRTP . LT_EXTENSIONIN -VALUEPART1+25 ( 16 ) = I_HEAD -ZZMQTY . LT_EXTENSIONIN -VALUEPART1+41 ( 3 ) = I_HEAD -ZZMEINS . LT_EXTENSIONIN -VALUEPART1+44 ( 1 ) = I_HEAD -ZZZHANL . LT_EXTENSIONIN -VALUEPART1+45 ( 1 ) = I_HEAD -ZZBUC . LT_EXTENSIONIN -VALUEPART1+46 ( 1 ) = I_HEAD -ZZFANL . * LT_EXTENSIONIN-VALUEPART1+47(8) = I_HEAD-ZZCGKH * LT_EXTENSIONIN-VALUEPART1+55(8) = I_HEAD-ZZCGXZ * LT_EXTENSIONIN-VALUEPART1+63(8) = I_HEAD-ZZZCRY * LT_EXTENSIONIN-VALUEPART1+71(4) = I_HEAD-ZZYYBM * LT_EXTENSIONIN-VALUEPART1+75(10) = I_HEAD-ZZVBELN LT_EXTENSIONIN -VALUEPART1+85 ( 1 ) = I_HEAD -ZZFANL_Y . LT_EXTENSIONIN -VALUEPART1+86 ( 1 ) = I_HEAD -ZZFANL_J . LT_EXTENSIONIN -VALUEPART1+87 ( 1 ) = I_HEAD -ZZFANL_N . LT_EXTENSIONIN -VALUEPART1+88 ( 3 ) = I_HEAD -ZZFKFS . LT_EXTENSIONIN -VALUEPART1+91 ( 1 ) = I_HEAD -ZZJHTQ . APPEND LT_EXTENSIONIN . CLEAR LT_EXTENSIONIN . LT_EXTENSIONIN - STRUCTURE = 'BAPI_TE_MEOUTHEADERX' . LT_EXTENSIONIN -VALUEPART1+0 ( 10 ) = I_HEAD -EBELN . LT_EXTENSIONIN -VALUEPART1+10 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+11 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+12 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+13 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+14 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+15 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+16 ( 1 ) = 'X' . * LT_EXTENSIONIN-VALUEPART1+17(1) = 'X'. * LT_EXTENSIONIN-VALUEPART1+18(1) = 'X'. * LT_EXTENSIONIN-VALUEPART1+19(1) = 'X'. * LT_EXTENSIONIN-VALUEPART1+20(1) = 'X'. * LT_EXTENSIONIN-VALUEPART1+21(1) = 'X'. LT_EXTENSIONIN -VALUEPART1+22 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+23 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+24 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+25 ( 1 ) = 'X' . LT_EXTENSIONIN -VALUEPART1+26 ( 1 ) = 'X' . APPEND LT_EXTENSIONIN . * DATA: LS_BAPI_TE_MEOUTHEADERX LIKE BAPI_TE_MEOUTHEADERX, * LS_BAPI_TE_MEOUTHEADER LIKE BAPI_TE_MEOUTHEADER. * CLEAR LT_EXTENSIONIN. * LT_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEOUTHEADER'. * LS_BAPI_TE_MEOUTHEADER-NUMBER = I_HEAD-EBELN. * LS_BAPI_TE_MEOUTHEADER-ZZEVRT = I_HEAD-ZZEVRT. * LS_BAPI_TE_MEOUTHEADER-ZZEVRTP = I_HEAD-ZZEVRTP. * LS_BAPI_TE_MEOUTHEADER-ZZMQTY = I_HEAD-ZZMQTY. * LS_BAPI_TE_MEOUTHEADER-ZZMEINS = I_HEAD-ZZMEINS. * LS_BAPI_TE_MEOUTHEADER-ZZZHANL = I_HEAD-ZZZHANL. * LS_BAPI_TE_MEOUTHEADER-ZZBUC = I_HEAD-ZZBUC. * * LS_BAPI_TE_MEOUTHEADER-ZZFANL = ''. * LS_BAPI_TE_MEOUTHEADER-ZZCGKH = ''. * LS_BAPI_TE_MEOUTHEADER-ZZCGXZ = ''. * LS_BAPI_TE_MEOUTHEADER-ZZZCRY = ''. * LS_BAPI_TE_MEOUTHEADER-ZZYYBM = ''. * LS_BAPI_TE_MEOUTHEADER-ZZVBELN = ''. * * LS_BAPI_TE_MEOUTHEADER-ZZFANL_Y = I_HEAD-ZZFANL_Y. * LS_BAPI_TE_MEOUTHEADER-ZZFANL_J = I_HEAD-ZZFANL_J. * LS_BAPI_TE_MEOUTHEADER-ZZFANL_N = I_HEAD-ZZFANL_N. * LS_BAPI_TE_MEOUTHEADER-ZZFKFS = I_HEAD-ZZFKFS. * LS_BAPI_TE_MEOUTHEADER-ZZJHTQ = I_HEAD-ZZJHTQ. * LT_EXTENSIONIN+30(960) = LS_BAPI_TE_MEOUTHEADER. ** CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C ** EXPORTING ** IM_VALUE = LS_BAPI_TE_MEOUTHEADER ** IMPORTING ** EX_CONTAINER = LT_EXTENSIONIN-VALUEPART1 ** EXCEPTIONS ** ILLEGAL_PARAMETER_TYPE = 1 ** OTHERS = 2. * APPEND LT_EXTENSIONIN. * * CLEAR LT_EXTENSIONIN. * LT_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEOUTHEADERX'. * LT_EXTENSIONIN+30(960) = LS_BAPI_TE_MEOUTHEADERX. ** LS_BAPI_TE_MEOUTHEADERX-NUMBER = I_HEAD-EBELN. ** LS_BAPI_TE_MEOUTHEADERX-ZZEVRT = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZEVRTP = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZMQTY = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZMEINS = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZZHANL = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZBUC = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZFANL_Y = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZFANL_J = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZFANL_N = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZFKFS = 'X'. ** LS_BAPI_TE_MEOUTHEADERX-ZZJHTQ = 'X'. ** CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C ** EXPORTING ** IM_VALUE = LS_BAPI_TE_MEOUTHEADERX ** IMPORTING ** EX_CONTAINER = LT_EXTENSIONIN-VALUEPART1 ** EXCEPTIONS ** ILLEGAL_PARAMETER_TYPE = 1 ** OTHERS = 2. * APPEND LT_EXTENSIONIN. IF BAPIFUN = 'I' . TECHNICAL_DATA -NO_MESSAGING = 'X' . TECHNICAL_DATA -NO_AUTHORITY_CHECK = 'X' . CALL FUNCTION 'BAPI_CONTRACT_CREATE' EXPORTING HEADER = HEADER HEADERX = HEADERX * VENDOR_ADDRESS = TESTRUN = TESTRUN TECHNICAL_DATA = TECHNICAL_DATA IMPORTING PURCHASINGDOCUMENT = E_EBELN * EXP_HEADER = TABLES RETURN = LT_RETURN ITEM = LT_ITEM ITEMX = LT_ITEMX * ACCOUNT = * ACCOUNTPROFITSEGMENT = * ACCOUNTX = * DELIVERY_ADDRESS = ITEM_COND_VALIDITY = LT_VALID ITEM_COND_VALIDITYX = LT_VALIDX ITEM_CONDITION = LT_ITEM_CONDITION ITEM_CONDITIONX = LT_ITEM_CONDITIONX * ITEM_COND_SCALE_VALUE = * ITEM_COND_SCALE_QUAN = ITEM_TEXT = LT_ITEM_TEXT HEADER_TEXT = LT_HEADER_TEXT * HEAD_COND_VALIDITY = * HEAD_COND_VALIDITYX = * HEAD_CONDITION = * HEAD_CONDITIONX = * HEAD_COND_SCALE_VAL = * HEAD_COND_SCALE_QUAN = PARTNER = LT_PARTNER PARTNERX = LT_PARTNERX EXTENSIONIN = LT_EXTENSIONIN * EXTENSIONOUT = . ELSEIF BAPIFUN = 'U' . E_EBELN = I_HEAD -EBELN . CALL FUNCTION 'BAPI_CONTRACT_CHANGE' EXPORTING PURCHASINGDOCUMENT = I_HEAD -EBELN HEADER = HEADER HEADERX = HEADERX * VENDOR_ADDRESS = TESTRUN = TESTRUN TECHNICAL_DATA = TECHNICAL_DATA * IMPORTING * EXP_HEADER = TABLES ITEM = LT_ITEM ITEMX = LT_ITEMX * ACCOUNT = * ACCOUNTPROFITSEGMENT = * ACCOUNTX = * DELIVERY_ADDRESS = * ITEM_COND_VALIDITY = * ITEM_COND_VALIDITYX = ITEM_CONDITION = LT_ITEM_CONDITION ITEM_CONDITIONX = LT_ITEM_CONDITIONX * ITEM_COND_SCALE_VALUE = * ITEM_COND_SCALE_QUAN = * ITEM_TEXT = * HEADER_TEXT = * HEAD_COND_VALIDITY = * HEAD_COND_VALIDITYX = * HEAD_CONDITION = * HEAD_CONDITIONX = * HEAD_COND_SCALE_VAL = * HEAD_COND_SCALE_QUAN = * PARTNER = * PARTNERX = * RELEASE_DOCU = * EXTENSIONIN = * EXTENSIONOUT = RETURN = LT_RETURN . ENDIF . APPEND LINES OF LT_RETURN TO ET_RETURN . LOOP AT LT_RETURN WHERE TYPE = 'E' OR TYPE = 'A' . E_SUCC = 'E' . IF LT_RETURN - ID = 'BAPI' AND LT_RETURN - NUMBER = '001' AND LT_RETURN - TYPE = 'E' . "排除此消息 ELSE . CONCATENATE E_MESSAGE LT_RETURN - MESSAGE ';' INTO E_MESSAGE . ENDIF . ENDLOOP . IF SY -SUBRC <> 0 . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' . E_SUCC = 'S' . IF TESTRUN = '' . GS_CTRD_LOG -EBELN = E_EBELN . CONCATENATE E_MESSAGE '采购合同' E_EBELN '创建成功!' INTO E_MESSAGE . CLEAR LW_GCJZNQ . LW_GCJZNQ -EBELN = E_EBELN . LW_GCJZNQ -GCJZNQ = I_HEAD -GCJZNQ . LW_GCJZNQ -BEIZ = '采购合同' . LW_GCJZNQ -ERDAT = SY -DATUM . LW_GCJZNQ -ERZET = SY -UZEIT . MODIFY ZMM_GCJZNQ FROM LW_GCJZNQ . IF SY -SUBRC = 0 . COMMIT WORK . ENDIF . ELSE . CONCATENATE E_MESSAGE '采购合同检查成功!' INTO E_MESSAGE . ENDIF . ELSE . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ENDIF . CLEAR : HEADER ,HEADERX ,TECHNICAL_DATA ,LT_RETURN ,LT_ITEM ,LT_ITEMX ,LT_VALID ,LT_VALIDX ,LT_ITEM_CONDITION ,LT_ITEM_CONDITIONX ,LT_EXTENSIONIN ,LT_HEADER_TEXT ,LT_ITEM_TEXT . REFRESH :LT_RETURN ,LT_ITEM ,LT_ITEMX ,LT_VALID ,LT_VALIDX ,LT_ITEM_CONDITION ,LT_ITEM_CONDITIONX ,LT_EXTENSIONIN ,LT_HEADER_TEXT ,LT_ITEM_TEXT ,LT_PARTNER ,LT_PARTNERX . * 写日志 IF NOAPPLLOG = '' . GS_CTRD_LOG -E_MESSAGE = E_MESSAGE . GS_CTRD_LOG -E_SUCC = E_SUCC . PERFORM SAVE_CTRD_LOG TABLES I_ITEM . ENDIF . ENDFUNCTION .转载地址:http://olqaf.baihongyu.com/