销售订单创建BAPI:BAPI_SALESORDER_CREATEFROMDAT2
退货销售订单创建BAPI: BAPI_CUSTOMERRETURN_CREATE
DATA:
LS_ORDER_HEADER TYPE BAPISDHD1,
LV_VBELN TYPE BAPIVBELN-VBELN,
LS_RETURN TYPE BAPIRET2,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LT_ORDER_ITEM TYPE STANDARD TABLE OF BAPISDITM,
LS_ORDER_ITEM TYPE BAPISDITM,
LT_ORDER_PARTNERS TYPE STANDARD TABLE OF BAPIPARNR,
LS_ORDER_PARTNERS TYPE BAPIPARNR,
LT_ORDER_SCHEDULES TYPE STANDARD TABLE OF BAPISCHDL,
LS_ORDER_SCHEDULES TYPE BAPISCHDL,
LT_ORDER_CONDITIONS TYPE STANDARD TABLE OF BAPICOND,
LS_ORDER_CONDITIONS TYPE BAPICOND.
DATA: LT_TEMP TYPE STANDARD TABLE OF ZSDS_SALES_ORDER_ALV.
DATA: LS_TEMP TYPE ZSDS_SALES_ORDER_ALV.
DATA: LV_POSNR TYPE VBAP-POSNR.
DATA: LV_MESSAGE TYPE STRING .
DATA: LV_ALL_MESSAGE TYPE STRING .
DATA: LV_FLAG TYPE CHAR01.
LT_TEMP = GT_DATA.
SORT LT_TEMP BY ZINDEX.
DELETE ADJACENT DUPLICATES FROM LT_TEMP COMPARING ZINDEX. "这里是根据销售订单去重
LOOP AT LT_TEMP INTO LS_TEMP WHERE ICONS NE ICON_GREEN_LIGHT.
CLEAR:LS_ORDER_HEADER,LS_ORDER_HEADER,LT_RETURN,LS_RETURN,LV_VBELN,LT_ORDER_ITEM,LS_ORDER_ITEM
,LV_MESSAGE,LV_ALL_MESSAGE,LV_VBELN,LV_FLAG,LS_ORDER_PARTNERS,LT_ORDER_PARTNERS,LS_ORDER_SCHEDULES,LT_ORDER_SCHEDULES,
LS_ORDER_CONDITIONS,LT_ORDER_CONDITIONS.
"抬头-数据
LS_ORDER_HEADER-DOC_TYPE = LS_TEMP-AUART. "订单类型
LS_ORDER_HEADER-SALES_ORG = LS_TEMP-VKORG. "销售组织
LS_ORDER_HEADER-DISTR_CHAN = LS_TEMP-VTWEG. "分销渠道
IF LS_TEMP-SPART = '0'.
LS_ORDER_HEADER-DIVISION = '00'. "产品组
ENDIF.
LS_ORDER_HEADER-PURCH_NO_C = LS_TEMP-BSTDK. "客户的采购订单号
LS_ORDER_HEADER-PURCH_DATE = LS_TEMP-BSTNK. "Customer Reference Date
LS_ORDER_HEADER-PURCH_DATE = LS_TEMP-BSTDK. "Customer Reference Date
LS_ORDER_HEADER-REQ_DATE_H = LS_TEMP-VDATU. "Requested Delivery Date
LS_ORDER_HEADER-DOC_DATE = LS_TEMP-AUDAT . "Document Date (Date Received/Sent)
LS_ORDER_HEADER-PMNTTRMS = LS_TEMP-ZTERM . "Terms of payment key
LS_ORDER_HEADER-INCOTERMS1 = LS_TEMP-INCOV . "Incoterms
LS_ORDER_HEADER-INCOTERMS2L = LS_TEMP-INCO2_L . "Incoterms Location 1
LS_ORDER_HEADER-SHIP_COND = LS_TEMP-VSBED . "Shipping Conditions
LS_ORDER_HEADER-SHIP_TYPE = LS_TEMP-VSART . "Shipping Type
LS_ORDER_HEADER-CURRENCY = LS_TEMP-WAERS . "货币
LOOP AT GT_DATA INTO GS_DATA WHERE ZINDEX = LS_TEMP-ZINDEX AND ICONS NE ICON_GREEN_LIGHT.
CLEAR:LS_ORDER_ITEM.
LV_POSNR = LV_POSNR + 10.
*销售订单行项目
LS_ORDER_ITEM-ITM_NUMBER = LV_POSNR.
LS_ORDER_ITEM-MATERIAL = GS_DATA-MATNR.
LS_ORDER_ITEM-PLANT = GS_DATA-WERKS.
LS_ORDER_ITEM-SALES_UNIT = GS_DATA-MEINS.
LS_ORDER_ITEM-STORE_LOC = GS_DATA-LGORT.
APPEND LS_ORDER_ITEM TO LT_ORDER_ITEM.
*交货计划行
LS_ORDER_SCHEDULES-ITM_NUMBER = LV_POSNR.
LS_ORDER_SCHEDULES-REQ_QTY = GS_DATA-KWMENG.
APPEND LS_ORDER_SCHEDULES TO LT_ORDER_SCHEDULES.
*定价条件
IF GS_DATA-KBETR IS NOT INITIAL.
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS.
LS_ORDER_CONDITIONS-COND_UNIT = GS_DATA-MEINS.
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
IF GS_DATA-KBETR1 IS NOT INITIAL .
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL1 . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR1.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS. "
LS_ORDER_CONDITIONS-COND_UNIT = GS_DATA-MEINS.
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
IF GS_DATA-KBETR2 IS NOT INITIAL .
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL2 . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR2.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS.
LS_ORDER_CONDITIONS-COND_UNIT = GS_DATA-MEINS. "
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
IF GS_DATA-KBETR3 IS NOT INITIAL .
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL3 . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR3.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS.
LS_ORDER_CONDITIONS-COND_UNIT = GS_DATA-MEINS.
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
IF GS_DATA-KBETR4 IS NOT INITIAL .
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL4 . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR4.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS.
LS_ORDER_CONDITIONS-COND_UNIT = '%'.
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
IF GS_DATA-KBETR5 IS NOT INITIAL .
LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR. "itm_number
LS_ORDER_CONDITIONS-COND_TYPE = GS_DATA-KSCHL5 . "定价条件
LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR5.
LS_ORDER_CONDITIONS-CURRENCY = GS_DATA-WAERS.
LS_ORDER_CONDITIONS-COND_UNIT = GS_DATA-MEINS.
APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.
ENDIF.
ENDLOOP.
* PARTENER
LS_ORDER_PARTNERS-PARTN_ROLE = 'AG' .
LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
APPEND LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
LS_ORDER_PARTNERS-PARTN_ROLE = 'RE' .
LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
APPEND LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
LS_ORDER_PARTNERS-PARTN_ROLE = 'RG' .
LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
APPEND LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
LS_ORDER_PARTNERS-PARTN_ROLE = 'WE' .
LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
APPEND LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
IF GS_DATA-PARVW IS NOT INITIAL .
LS_ORDER_PARTNERS-PARTN_ROLE = GS_DATA-PARVW .
LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-PATNR.
APPEND LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
ENDIF.
IF LS_TEMP-AUART = 'ZRE2' OR LS_TEMP-AUART = 'ZRP2'.
CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE'
EXPORTING
RETURN_HEADER_IN = LS_ORDER_HEADER
IMPORTING
SALESDOCUMENT = LV_VBELN
TABLES
RETURN = LT_RETURN
RETURN_ITEMS_IN = LT_ORDER_ITEM
RETURN_CONDITIONS_IN = LT_ORDER_CONDITIONS
RETURN_PARTNERS = LT_ORDER_PARTNERS
RETURN_SCHEDULES_IN = LT_ORDER_SCHEDULES
* ORDER_TEXT = LT_ORDER_TEXT
* PARTNERADDRESSES = PARTNERADDRESSES
.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE .
LV_FLAG = 'X' .
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
ORDER_HEADER_IN = LS_ORDER_HEADER
IMPORTING
SALESDOCUMENT = LV_VBELN
TABLES
RETURN = LT_RETURN
ORDER_ITEMS_IN = LT_ORDER_ITEM
ORDER_CONDITIONS_IN = LT_ORDER_CONDITIONS
ORDER_PARTNERS = LT_ORDER_PARTNERS
ORDER_SCHEDULES_IN = LT_ORDER_SCHEDULES
* ORDER_TEXT = LT_ORDER_TEXT
* PARTNERADDRESSES = PARTNERADDRESSES
.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE .
LV_FLAG = 'X' .
ENDLOOP.
ENDIF.