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.