销售订单事务代码:VA01,VA02,VA03
BAPI :SD_SALESDOCUMENT_CREATE
FUNCTION ZSNSDFM_SH_003.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(ZDATA_IN) TYPE ZYKE_JSON
*" EXPORTING
*" REFERENCE(ZTYPE) TYPE ZYKE_TYPE
*" REFERENCE(ZMESSAGE) TYPE ZYKE_MESSAGE
*" REFERENCE(ZDATA_OUT) TYPE ZYKE_JSON
*"----------------------------------------------------------------------
DATA: LT_INPUT TYPE ZSNSDTSH001 .
DATA:BEGIN OF LT_OUT OCCURS 0 ,
ZCLIMNO TYPE BSTKD , "理赔单号 .
VBELN TYPE VBAP-VBELN,
ZMESSAGE TYPE ZYKE_MESSAGE,
END OF LT_OUT .
DATA LV_MATNR TYPE N LENGTH 18 .
DATA LV_NEXT TYPE C .
DATA: LS_SALES_HEADER_IN TYPE BAPISDHD1,
LS_SALES_HEADER_INX TYPE BAPISDHD1X,
LV_VBELN TYPE BAPIVBELN-VBELN,
LT_SALES_ITEMS TYPE STANDARD TABLE OF BAPISDITM WITH HEADER LINE,
LT_SALES_ITEMSX TYPE STANDARD TABLE OF BAPISDITMX WITH HEADER LINE,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE,
LT_SALES_PARTNERS TYPE STANDARD TABLE OF BAPIPARNR WITH HEADER LINE,
LT_SALES_CONDITIONS_IN LIKE TABLE OF BAPICOND WITH HEADER LINE,
LT_SALES_CONDITIONS_INX LIKE TABLE OF BAPICONDX WITH HEADER LINE,
LT_SALES_SCHEDULES_IN LIKE TABLE OF BAPISCHDL WITH HEADER LINE,
LT_SALES_SCHEDULES_INX LIKE TABLE OF BAPISCHDLX WITH HEADER LINE,
LT_PARTNERS_EX TYPE STANDARD TABLE OF BAPISDPART WITH HEADER LINE,
LT_SALES_TEXT LIKE TABLE OF BAPISDTEXT WITH HEADER LINE,
LV_POSNR TYPE VBAP-POSNR,
LV_MSG TYPE C LENGTH 255.
/UI2/CL_JSON=>DESERIALIZE(
EXPORTING
JSON = ZDATA_IN
CHANGING
DATA = LT_INPUT[] ).
LOOP AT LT_INPUT INTO DATA(LS_INPUT).
CLEAR: LS_SALES_HEADER_IN ,LS_SALES_HEADER_INX , LV_VBELN,
LT_SALES_ITEMS, LT_SALES_ITEMS[],
LT_SALES_ITEMSX,LT_SALES_ITEMSX[],
LT_RETURN,LT_RETURN[],
LT_PARTNERS_EX,LT_PARTNERS_EX[],
LT_SALES_PARTNERS,LT_SALES_PARTNERS[].
CLEAR LT_OUT .
LT_OUT-ZCLIMNO = LS_INPUT-ZSALESORDER-ZCLIMNO .
READ TABLE LS_INPUT-ZITEM INTO DATA(LS_ITEMS) INDEX 1 .
CASE LS_ITEMS-ZPRICE.
WHEN 0.
LS_INPUT-ZSALESORDER-AUART = 'ZC11'.
WHEN OTHERS.
LS_INPUT-ZSALESORDER-AUART = 'ZC02'.
ENDCASE.
"销售订单抬头
LS_SALES_HEADER_IN = VALUE #( PURCH_NO_C = LS_INPUT-ZSALESORDER-ZCLIMNO
DOC_TYPE = LS_INPUT-ZSALESORDER-AUART
DOC_DATE = LS_INPUT-ZSALESORDER-AUDAT
SALES_ORG = LS_INPUT-ZSALESORDER-VKORG
DISTR_CHAN = LS_INPUT-ZSALESORDER-VTWEG
SALES_GRP = LS_INPUT-ZSALESORDER-VKGRP
SALES_OFF = LS_INPUT-ZSALESORDER-VKBUR
ORD_REASON = LS_INPUT-ZSALESORDER-AUGRU
).
LS_SALES_HEADER_INX = VALUE #( PURCH_NO_C = 'X'
DOC_TYPE = 'X'
DOC_DATE = 'X'
SALES_ORG = 'X'
DISTR_CHAN = 'X'
SALES_GRP = 'X'
SALES_OFF = 'X'
ORD_REASON = 'X'
).
******** Header texts
LT_SALES_TEXT-ITM_NUMBER = SPACE.
LT_SALES_TEXT-TEXT_ID = '0001'.
LT_SALES_TEXT-LANGU = SY-LANGU.
LT_SALES_TEXT-FORMAT_COL = '*'.
LT_SALES_TEXT-TEXT_LINE = LS_INPUT-ZSALESORDER-ZREMARK.
APPEND LT_SALES_TEXT .
"销售合作伙伴
LS_INPUT-ZSALESORDER-KUNNR = |{ LS_INPUT-ZSALESORDER-KUNNR ALPHA = IN }| .
*
LT_SALES_PARTNERS = VALUE #(
PARTN_ROLE = 'AG' "售达方
PARTN_NUMB = LS_INPUT-ZSALESORDER-KUNNR
).
APPEND LT_SALES_PARTNERS .
"合作伙伴
LT_PARTNERS_EX = VALUE #( PARTN_ROLE = 'ZM'
CUSTOMER = LS_INPUT-ZSALESORDER-KUNNR
PERSON_NO = LS_INPUT-ZSALESORDER-PERNR
).
APPEND LT_PARTNERS_EX .
"销售订单行项目
CLEAR LV_POSNR .
LOOP AT LS_INPUT-ZITEM INTO DATA(LS_ITEM).
CLEAR: LT_SALES_ITEMS ,LT_SALES_ITEMSX.
LV_POSNR = LV_POSNR + 10 .
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = LS_ITEM-MATNR
IMPORTING
OUTPUT = LS_ITEM-MATNR.
LT_SALES_ITEMS = VALUE #(
ITM_NUMBER = LV_POSNR
MATERIAL = LS_ITEM-MATNR
TARGET_QTY = LS_ITEM-KWMENG
TARGET_QU = LS_ITEM-VRKME
PLANT = LS_ITEM-WERKS
).
LT_SALES_ITEMSX = VALUE #(
ITM_NUMBER = LV_POSNR
MATERIAL = 'X'
TARGET_QTY = 'X'
TARGET_QU = 'X'
PLANT = 'X'
).
APPEND LT_SALES_ITEMS.
APPEND LT_SALES_ITEMSX .
******** sales Schedule Line
LT_SALES_SCHEDULES_IN-ITM_NUMBER = LV_POSNR.
LT_SALES_SCHEDULES_IN-SCHED_LINE = '0001'. " L_TABIX.
LT_SALES_SCHEDULES_IN-REQ_DATE = SY-DATUM. " 计划行日期
LT_SALES_SCHEDULES_IN-REQ_QTY = LS_ITEM-KWMENG. "以销售单位计的 订单数量
LT_SALES_SCHEDULES_INX-ITM_NUMBER = LV_POSNR.
LT_SALES_SCHEDULES_INX-SCHED_LINE = '0001'.
LT_SALES_SCHEDULES_INX-REQ_DATE = ABAP_TRUE.
LT_SALES_SCHEDULES_INX-REQ_QTY = ABAP_TRUE.
APPEND: LT_SALES_SCHEDULES_IN, LT_SALES_SCHEDULES_INX.
CLEAR: LT_SALES_SCHEDULES_IN, LT_SALES_SCHEDULES_INX.
LT_SALES_CONDITIONS_IN-ITM_NUMBER = LV_POSNR.
LT_SALES_CONDITIONS_IN-COND_TYPE = 'ZP01'. " 条件类型 定价条件
LT_SALES_CONDITIONS_IN-COND_VALUE = LS_ITEM-ZPRICE. " 价格 定价比率
LT_SALES_CONDITIONS_IN-CURRENCY = 'CNY'. " 货币码
LT_SALES_CONDITIONS_INX-ITM_NUMBER = LV_POSNR.
LT_SALES_CONDITIONS_INX-COND_TYPE = 'ZP01'.
LT_SALES_CONDITIONS_INX-CURRENCY = ABAP_TRUE.
LT_SALES_CONDITIONS_INX-COND_VALUE = ABAP_TRUE.
*
APPEND: LT_SALES_CONDITIONS_IN,LT_SALES_CONDITIONS_INX.
CLEAR: LT_SALES_CONDITIONS_IN,LT_SALES_CONDITIONS_INX .
ENDLOOP.
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
EXPORTING
* SALESDOCUMENT =
SALES_HEADER_IN = LS_SALES_HEADER_IN
SALES_HEADER_INX = LS_SALES_HEADER_INX
* SENDER =
* BINARY_RELATIONSHIPTYPE = ' '
* INT_NUMBER_ASSIGNMENT = ' '
* BEHAVE_WHEN_ERROR = ' '
* LOGIC_SWITCH = ' '
* BUSINESS_OBJECT = ' '
* TESTRUN =
* CONVERT_PARVW_AUART = ' '
* STATUS_BUFFER_REFRESH = 'X'
* CALL_ACTIVE = ' '
* I_WITHOUT_INIT = ' '
IMPORTING
SALESDOCUMENT_EX = LV_VBELN
* SALES_HEADER_OUT =
* SALES_HEADER_STATUS =
TABLES
RETURN = LT_RETURN[]
SALES_ITEMS_IN = LT_SALES_ITEMS[]
SALES_ITEMS_INX = LT_SALES_ITEMSX[]
SALES_PARTNERS = LT_SALES_PARTNERS[]
SALES_SCHEDULES_IN = LT_SALES_SCHEDULES_IN
SALES_SCHEDULES_INX = LT_SALES_SCHEDULES_INX
SALES_CONDITIONS_IN = LT_SALES_CONDITIONS_IN[]
SALES_CONDITIONS_INX = LT_SALES_CONDITIONS_INX[]
* SALES_CFGS_REF =
* SALES_CFGS_INST =
* SALES_CFGS_PART_OF =
* SALES_CFGS_VALUE =
* SALES_CFGS_BLOB =
* SALES_CFGS_VK =
* SALES_CFGS_REFINST =
* SALES_CCARD =
SALES_TEXT = LT_SALES_TEXT[]
* SALES_KEYS =
* SALES_CONTRACT_IN =
* SALES_CONTRACT_INX =
* EXTENSIONIN =
* PARTNERADDRESSES =
* SALES_SCHED_CONF_IN =
* ITEMS_EX =
* SCHEDULE_EX =
* BUSINESS_EX =
* INCOMPLETE_LOG =
* EXTENSIONEX =
* CONDITIONS_EX =
PARTNERS_EX = LT_PARTNERS_EX[]
* TEXTHEADERS_EX =
* TEXTLINES_EX =
* BATCH_CHARC =
* CAMPAIGN_ASGN =
* SALES_ETAX =
* SALES_ETAXX =
* SALES_TRANSP =
* SALES_TRANSPX =
.
DELETE LT_RETURN WHERE TYPE <> 'E'
AND TYPE <> 'A'.
IF LT_RETURN[] IS INITIAL AND LV_VBELN IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LT_OUT-VBELN = LV_VBELN .
LT_OUT-ZMESSAGE = '订单创建成功!'.
APPEND LT_OUT .
CLEAR LT_OUT .
ZTYPE = 'S'.
ZMESSAGE = 'Successful'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_RETURN WHERE TYPE = 'E'.
CLEAR LV_MSG .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LT_RETURN-ID
MSGNR = LT_RETURN-NUMBER
MSGV1 = LT_RETURN-MESSAGE_V1
MSGV2 = LT_RETURN-MESSAGE_V2
MSGV3 = LT_RETURN-MESSAGE_V3
MSGV4 = LT_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MSG.
ZTYPE = 'E'.
ZMESSAGE = ZMESSAGE && LV_MSG .
EXIT.
ENDLOOP.
LT_OUT-ZMESSAGE = '订单创建失败,请检查!'&& ZMESSAGE.
APPEND LT_OUT .
CLEAR LT_OUT .
ENDIF.
ENDLOOP.
CALL METHOD /UI2/CL_JSON=>SERIALIZE
EXPORTING
DATA = LT_OUT[]
RECEIVING
R_JSON = ZDATA_OUT.
ENDFUNCTION.