METHOD zii_si_sdi010_s4_ib_syn~si_sdi010_s4_ib_syn.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: ls_item_req_header TYPE zdt_sdi010_s4_req_head.
DATA: lt_item_req_item TYPE zdt_sdi010_s4_req_item_tab,
ls_item_req_item LIKE LINE OF lt_item_req_item.
DATA: order_header_in TYPE bapisdh1. "通讯字段: 销售和分销凭证抬头
DATA: order_header_inx TYPE bapisdh1x. "销售和分销凭证抬头的复选框字段
DATA: it_return TYPE TABLE OF bapiret2.
DATA: is_return TYPE bapiret2.
DATA: it_items TYPE TABLE OF bapisditm. "通讯字段: 销售和分销凭证项目
DATA: is_items TYPE bapisditm.
DATA: it_itemsx TYPE TABLE OF bapisditmx. "通讯字段: 销售和分销凭证项目
DATA: is_itemsx TYPE bapisditmx.
DATA lt_bapiparex TYPE TABLE OF bapiparex.
DATA: is_bapiparex TYPE bapiparex.
DATA ls_zbape_vbap TYPE bape_vbap.
DATA ls_zbape_vbapx TYPE bape_vbapx.
DATA: lt_06 TYPE TABLE OF ztsd006.
DATA: is_06 TYPE ztsd006.
DATA: lv_xh TYPE ztsd006-xh.
DATA: lv_xhitem TYPE ztsd006-xhitem.
DATA: lv_vbeln TYPE vbak-vbeln.
IF input-mt_sdi010_s4_req-head-vbeln = ''.
output-mt_sdi010_s4_res-type = 'E'.
output-mt_sdi010_s4_res-mess = '销售订单号必填!'.
EXIT.
ENDIF.
ls_item_req_header = input-mt_sdi010_s4_req-head.
lt_item_req_item = input-mt_sdi010_s4_req-item.
IF lt_item_req_item IS INITIAL.
output-mt_sdi010_s4_res-type = 'E'.
output-mt_sdi010_s4_res-mess = '订单行不能为空'.
EXIT.
ENDIF.
lv_vbeln = |{ ls_item_req_header-vbeln ALPHA = IN }|.
SELECT MAX( xh ) INTO lv_xh FROM ztsd006.
ADD 1 TO lv_xh.
LOOP AT lt_item_req_item INTO ls_item_req_item.
ADD 1 TO lv_xhitem.
CLEAR is_06.
is_06-xh = lv_xh.
is_06-xhitem = lv_xhitem.
is_06-zdate = sy-datum.
is_06-ztime = sy-uzeit.
is_06-cgsqd = ls_item_req_header-cgsqd.
is_06-zname = ls_item_req_header-zname.
is_06-vbeln = ls_item_req_header-vbeln.
is_06-posnr = ls_item_req_item-posnr.
is_06-matnr = ls_item_req_item-matnr.
is_06-abgru = ls_item_req_item-abgru.
is_06-zprono = ls_item_req_item-zprono.
is_06-zwaprd = ls_item_req_item-zwaprd.
APPEND is_06 TO lt_06.
ENDLOOP.
MODIFY ztsd006 FROM TABLE lt_06.
COMMIT WORK.
order_header_inx-updateflag = 'U'.
LOOP AT lt_06 INTO is_06.
CLEAR:is_items,is_itemsx,ls_zbape_vbap,ls_zbape_vbapx.
is_items-itm_number = |{ is_06-posnr ALPHA = IN }|.
is_items-reason_rej = is_06-abgru.
is_itemsx-itm_number = is_items-itm_number.
is_itemsx-reason_rej = 'X'.
is_itemsx-updateflag = 'U'.
IF is_06-matnr IS NOT INITIAL.
is_items-material = is_06-matnr.
is_itemsx-material = 'X'.
ENDIF.
-
SELECT SINGLE pstyv INTO @DATA(lv_pstyv) FROM vbap WHERE vbeln EQ @lv_vbeln.
-
is_items-item_categ = lv_pstyv.
-
is_itemsx-item_categ = 'X'. APPEND is_items TO it_items. APPEND is_itemsx TO it_itemsx. " 增强字段 CLEAR: ls_zbape_vbap, ls_zbape_vbapx. ls_zbape_vbap = VALUE #( posnr = is_items-itm_number zprono = is_06-zprono zwaprd = is_06-zwaprd ). ls_zbape_vbapx = VALUE #( posnr = is_items-itm_number zprono = 'X' zwaprd = 'X' ). CLEAR:is_bapiparex. is_bapiparex-structure = 'BAPE_VBAP'. is_bapiparex+30(960) = ls_zbape_vbap. APPEND is_bapiparex TO lt_bapiparex. CLEAR:is_bapiparex. is_bapiparex-structure = 'BAPE_VBAPX'. is_bapiparex+30(960) = ls_zbape_vbapx. APPEND is_bapiparex TO lt_bapiparex.
ENDLOOP.
CALL FUNCTION ‘BAPI_SALESORDER_CHANGE’
EXPORTING
salesdocument = lv_vbeln
order_header_inx = order_header_inx
TABLES
return = it_return
order_item_in = it_items
order_item_inx = it_itemsx
extensionin = lt_bapiparex.READ TABLE it_return INTO is_return WITH KEY type = ‘E’.
IF sy-subrc = 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.output-mt_sdi010_s4_res-type = 'E'. LOOP AT it_return INTO is_return WHERE type = 'E'. output-mt_sdi010_s4_res-mess = output-mt_sdi010_s4_res-mess && '/' && is_return-message. ENDLOOP.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
output-mt_sdi010_s4_res-type = ‘S’.
output-mt_sdi010_s4_res-mess = ‘更改成功’.
ENDIF.ENDMETHOD.