銷售訂單建立BAPI
READ TABLE IT_OUTPUT INTO WA_OUTPUT WITH KEY SEL = 'X'.
IF SY-SUBRC NE 0.
MESSAGE E000(CL) WITH '請選擇需要建立的資料'.
ENDIF.
*-->表頭
DATA: GS_HEADER_IN LIKE BAPISDHD1,
GS_HEADER_INX LIKE BAPISDHD1X.
DATA: GV_TESTRUN TYPE BAPIFLAG-BAPIFLAG."測試執行標識
DATA: GV_VBELN TYPE BAPIVBELN-VBELN."銷售訂單號
DATA: ET_RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
*-->表體
DATA: GT_ITEMS_IN LIKE TABLE OF BAPISDITM WITH HEADER LINE,
GT_ITEMS_INX LIKE TABLE OF BAPISDITMX WITH HEADER LINE.
DATA: GT_PARTNER LIKE TABLE OF BAPIPARNR WITH HEADER LINE.
DATA: GT_SCHDL TYPE TABLE OF BAPISCHDL WITH HEADER LINE.
DATA: GT_SCHDLX TYPE TABLE OF BAPISCHDLX WITH HEADER LINE.
DATA: GT_BAPICOND LIKE TABLE OF BAPICOND WITH HEADER LINE.
DATA: GT_BAPICONDX LIKE TABLE OF BAPICONDX WITH HEADER LINE.
*****增強欄位
DATA: LS_BAPE_VBAP TYPE BAPE_VBAP,
LS_BAPE_VBAPX TYPE BAPE_VBAPX.
DATA: LS_BAPE_VBAK TYPE BAPE_VBAK,
LS_BAPE_VBAKX TYPE BAPE_VBAKX.
DATA: GT_EXTEN TYPE TABLE OF BAPIPAREX,
GS_EXTEN LIKE LINE OF GT_EXTEN.
DATA:LS_POSNR TYPE POSNR_VA.
*----->新增憑證擡頭資訊
GS_HEADER_INX-UPDATEFLAG = 'X'.
"銷售憑證型別
GS_HEADER_IN-DOC_TYPE = 'ZF08'.
GS_HEADER_INX-DOC_TYPE = 'X'.
"銷售組織
GS_HEADER_IN-SALES_ORG = WA_OUTPUT-VKORG.
GS_HEADER_INX-SALES_ORG = 'X'.
"分銷渠道
GS_HEADER_IN-DISTR_CHAN = WA_OUTPUT-VTWEG.
GS_HEADER_INX-DISTR_CHAN = 'X'.
"分部-產品組
GS_HEADER_IN-DIVISION = WA_OUTPUT-SPART.
GS_HEADER_INX-DIVISION = 'X'.
"銷售組
GS_HEADER_IN-SALES_GRP = WA_OUTPUT-VKGRP.
GS_HEADER_INX-SALES_GRP = 'X'.
"銷售部門
GS_HEADER_IN-SALES_OFF = WA_OUTPUT-VKBUR.
GS_HEADER_INX-SALES_OFF = 'X'.
"收付條件程式碼
SELECT SINGLE ZTERM
INTO GS_HEADER_IN-PMNTTRMS
FROM KNVV
WHERE KUNNR = WA_OUTPUT-KUNNR
AND VKORG = WA_OUTPUT-VKORG
AND VTWEG = WA_OUTPUT-VTWEG
AND SPART = WA_OUTPUT-SPART.
GS_HEADER_INX-PMNTTRMS = 'X'.
*----->客戶資訊
"客戶編號
GT_PARTNER-PARTN_NUMB = WA_OUTPUT-KUNNR.
GT_PARTNER-PARTN_ROLE = 'AG'.
APPEND GT_PARTNER.
*---->新增行專案資訊
LOOP AT IT_OUTPUT INTO WA_OUTPUT WHERE SEL = 'X'.
ADD 10 TO LS_POSNR.
"銷售訂單行專案
GT_ITEMS_IN-ITM_NUMBER = LS_POSNR.
GT_ITEMS_INX-ITM_NUMBER = LS_POSNR.
"物料編號
GT_ITEMS_IN-MATERIAL = WA_OUTPUT-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = GT_ITEMS_IN-MATERIAL
IMPORTING
OUTPUT = GT_ITEMS_IN-MATERIAL
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
GT_ITEMS_INX-MATERIAL = 'X'.
"工廠
CASE WA_OUTPUT-VKORG.
WHEN '1830'.
GT_ITEMS_IN-PLANT = '1830'.
WHEN '6007'.
GT_ITEMS_IN-PLANT = '6710'.
ENDCASE.
GT_ITEMS_INX-PLANT = 'X'.
"庫存地點
* GT_ITEMS_IN-STORE_LOC = '1001'.
* GT_ITEMS_INX-STORE_LOC = 'X'.
"單位
GT_ITEMS_IN-SALES_UNIT = WA_OUTPUT-MEINS.
GT_ITEMS_INX-SALES_UNIT = 'X'.
"銷售訂單段文字
GT_ITEMS_IN-SHORT_TEXT = WA_OUTPUT-ARKTX.
GT_ITEMS_INX-SHORT_TEXT = 'X'.
"銷售憑證專案類別
* GT_ITEMS_IN-ITEM_CATEG = 'ZTFN'.
* GT_ITEMS_INX-ITEM_CATEG = 'X'.
"數量
GT_ITEMS_IN-TARGET_QTY = WA_OUTPUT-ZFOC.
GT_ITEMS_INX-TARGET_QTY = 'X'.
APPEND GT_ITEMS_IN.
APPEND GT_ITEMS_INX.
CLEAR:GT_ITEMS_IN,GT_ITEMS_INX.
*---->維護 SD 憑證計劃行的通訊欄位
"銷售訂單行專案
GT_SCHDL-ITM_NUMBER = LS_POSNR.
GT_SCHDLX-ITM_NUMBER = LS_POSNR.
"以銷售單位計的訂單數量
GT_SCHDL-REQ_QTY = WA_OUTPUT-ZFOC.
GT_SCHDLX-REQ_QTY = 'X'.
"交貨日期
GT_SCHDL-REQ_DATE = SY-DATUM.
GT_SCHDLX-REQ_DATE = 'X'.
APPEND GT_SCHDL.
APPEND GT_SCHDLX.
CLEAR:GT_SCHDL,GT_SCHDLX.
*---->維護訂單條件的通訊欄位
"行專案編號
GT_BAPICOND-ITM_NUMBER = LS_POSNR.
GT_BAPICONDX-ITM_NUMBER = LS_POSNR.
"貨幣碼
GT_BAPICOND-CURRENCY = WA_OUTPUT-WAERS.
GT_BAPICONDX-CURRENCY = 'X'.
"條件型別
GT_BAPICOND-COND_TYPE = 'ZP02'.
GT_BAPICONDX-COND_TYPE = 'ZP02'.
"單價
GT_BAPICOND-COND_VALUE = WA_OUTPUT-KBETR.
GT_BAPICONDX-COND_VALUE = 'X'.
"貨幣
GT_BAPICOND-CURRENCY = WA_OUTPUT-WAERK.
GT_BAPICONDX-CURRENCY = 'X'.
GT_BAPICONDX-UPDATEFLAG = 'I'.
APPEND GT_BAPICOND.
APPEND GT_BAPICONDX.
CLEAR:GT_BAPICOND,GT_BAPICONDX.
ENDLOOP.
"建立SO
* CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
* EXPORTING
* ORDER_HEADER_IN = GS_HEADER_IN
* ORDER_HEADER_INX = GS_HEADER_INX
* TESTRUN = GV_TESTRUN "測試執行
* IMPORTING
* SALESDOCUMENT = GV_VBELN
* TABLES
* RETURN = ET_RETURN
* ORDER_ITEMS_IN = GT_ITEMS_IN
* ORDER_ITEMS_INX = GT_ITEMS_INX
* ORDER_PARTNERS = GT_PARTNER
* ORDER_SCHEDULES_IN = GT_SCHDL
* ORDER_SCHEDULES_INX = GT_SCHDLX.
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
EXPORTING
SALES_HEADER_IN = GS_HEADER_IN
SALES_HEADER_INX = GS_HEADER_INX
TESTRUN = GV_TESTRUN "測試執行
IMPORTING
SALESDOCUMENT_EX = GV_VBELN
TABLES
RETURN = ET_RETURN
SALES_ITEMS_IN = GT_ITEMS_IN
SALES_ITEMS_INX = GT_ITEMS_INX
SALES_PARTNERS = GT_PARTNER
SALES_SCHEDULES_IN = GT_SCHDL
SALES_SCHEDULES_INX = GT_SCHDLX.
READ TABLE ET_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
MESSAGE '操作成功' TYPE 'S'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
MESSAGE '操作失敗' TYPE 'E'.
ENDIF.