销售订单创建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.

猜你喜欢

转载自blog.csdn.net/sq1986127/article/details/81067797
今日推荐