1. 程式人生 > >銷售訂單建立BAPI

銷售訂單建立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.