METHOD zsd_ii_si_delivery_order_in~si_delivery_order_in.
DATA:
input_hd TYPE zmmi005_dt_mesg_hd,
input_body TYPE zsd_dt_delivery_order_msgb_tab,
input_body_item TYPE zsd_dt_delivery_order_msgbd,
gt_hxm TYPE zsd_dt_delivery_order_item_tab,
wa_hxm TYPE zsd_dt_delivery_order_items.
"bapi
DATA:delivery TYPE vbeln,
num_deliveries TYPE bapidlvcreateheader-num_deliveries,
lt_order_items TYPE TABLE OF bapidlvreftosalesorder,
ls_order_items TYPE bapidlvreftosalesorder,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2
.
"反馈
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zsd_dt_hxm_res_msgbd_tab,
output_line TYPE zsd_dt_hxm_res_msgbd.
*接口变量
DATA: go_obj TYPE REF TO zco_si_unhxm_out."接口类
DATA: out TYPE zsd_mt_hxm_res.
DATA: l_ship_point TYPE vstel, "交货单
vbeln TYPE vbeln, "销单
ret_msg TYPE string. "记录反馈信息
"交货单修改
DATA:str_header_data TYPE bapiobdlvhdrchg,
str_header_control TYPE bapiobdlvhdrctrlchg.
DATA :item_data TYPE bapiobdlvitemchg,
item_body TYPE STANDARD TABLE OF bapiobdlvitemchg,
item_control TYPE bapiobdlvitemctrlchg,
item_control_body TYPE STANDARD TABLE OF bapiobdlvitemctrlchg.
DATA:
techn_control TYPE bapidlvcontrol. "TECHN_CONTROL
"删除的发送产销
DATA: lo_output TYPE REF TO zsd_co_si_sap_del_ord_out,
gt_deiv TYPE zsd_mt_sap_del_ord.
DATA: lt_004 TYPE STANDARD TABLE OF ztsd004,
ls_004 TYPE ztsd004.
" header和body
input_hd = input-mt_delivery_order-msghd.
input_body = input-mt_delivery_order-msgbd.
"反馈头信息
out-mt_hxm_res-msghd-msgid = input_hd-msgid.
out-mt_hxm_res-msghd-tlgid = input_hd-tlgid.
out-mt_hxm_res-msghd-tlgname = input_hd-tlgname.
out-mt_hxm_res-msghd-dtsend = sy-datum && sy-uzeit.
out-mt_hxm_res-msghd-sender = 'ERP'.
out-mt_hxm_res-msghd-receiver = input_hd-sender.
"交货单一个电文只传一条211215
LOOP AT input_body INTO input_body_item.
EXPORT deli = input_body_item-items TO MEMORY ID 'DELV'.
CASE input_body_item-cancle_flg.
WHEN 'U'.
delivery = input_body_item-vbeln.
delivery = |{ delivery ALPHA = IN }|. "防止不带前0
str_header_data-deliv_numb = delivery.
str_header_control-deliv_numb = delivery.
LOOP AT input_body_item-items INTO wa_hxm.
item_data-deliv_numb = delivery.
item_data-deliv_item = wa_hxm-posnr.
item_data-dlv_qty = wa_hxm-lfimg.
item_data-fact_unit_nom = 1.
item_data-fact_unit_denom = 1.
item_control-deliv_numb = delivery.
item_control-deliv_item = wa_hxm-posnr.
IF wa_hxm-cancle_flg = 'U'.
item_control-chg_delqty = 'X'.
ELSE.
item_control-del_item = 'X'.
CLEAR:item_data-dlv_qty.
ENDIF.
APPEND item_control TO item_control_body.
APPEND item_data TO item_body.
"20220527手工执行存自建表
ls_004-vbeln = delivery.
ls_004-posnr = wa_hxm-posnr.
ls_004-lgort = wa_hxm-lgort.
ls_004-stat = input_body_item-cancle_flg.
APPEND ls_004 TO lt_004.
CLEAR : item_data, item_control,ls_004.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = str_header_data
header_control = str_header_control
delivery = delivery
-
techn_control = techn_control
-
TECHN_CONTROL =
-
HEADER_DATA_SPL =
-
HEADER_CONTROL_SPL =
-
SENDER_SYSTEM = TABLES
-
HEADER_PARTNER =
-
HEADER_PARTNER_ADDR =
-
HEADER_DEADLINES = item_data = item_body item_control = item_control_body
-
ITEM_SERIAL_NO =
-
SUPPLIER_CONS_DATA =
-
EXTENSION1 =
-
EXTENSION2 = return = lt_return
-
TOKENREFERENCE =
-
ITEM_DATA_SPL =
-
COLLECTIVE_CHANGE_ITEMS =
-
NEW_ITEM_DATA =
-
NEW_ITEM_DATA_SPL =
-
NEW_ITEM_ORG =
-
ITEM_DATA_DOCU_BATCH = . LOOP AT lt_return INTO ls_return WHERE type = 'E'. CLEAR ret_msg. MESSAGE ID ls_return-id TYPE 'E' NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4 INTO ret_msg.
-
WRITE:/ ret_msg. ENDLOOP.
-
"检查bapi
-
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
-
CONCATENATE ret_msg ls_return-message INTO ret_msg SEPARATED BY '/'.
-
ENDLOOP. IF ret_msg IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. output_line-orderunm1 = input_body_item-bl_no. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'S'. "传给产销一份 SUBMIT zsd_r003 WITH delivery = delivery WITH cancel = input_body_item-cancle_flg AND RETURN . "处理成功存自建表 MODIFY ztsd004 FROM TABLE lt_004. COMMIT WORK. ELSE. output_line-orderunm1 = input_body_item-bl_no. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'E'. output_line-msg = ret_msg. ENDIF. APPEND output_line TO output_body . WHEN 'I'. l_ship_point = input_body_item-vstel. vbeln = input_body_item-zvbeln. vbeln = |{ vbeln ALPHA = IN }|. LOOP AT input_body_item-items INTO wa_hxm.
-
wa_hxm-zposnr = |{ wa_hxm-zposnr ALPHA = IN }|. ls_order_items-ref_doc = vbeln. ls_order_items-ref_item = wa_hxm-zposnr. ls_order_items-dlv_qty = wa_hxm-lfimg. SELECT SINGLE meins INTO ls_order_items-sales_unit FROM vbap WHERE vbeln = vbeln AND posnr = ls_order_items-ref_item. APPEND ls_order_items TO lt_order_items. "20220527手工执行存自建表 ls_004-posnr = wa_hxm-posnr. ls_004-lgort = wa_hxm-lgort. ls_004-stat = input_body_item-cancle_flg. APPEND ls_004 TO lt_004. CLEAR: ls_order_items,ls_004. ENDLOOP. CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS' EXPORTING ship_point = l_ship_point
-
DUE_DATE = DUE_DATE
-
DEBUG_FLG =
-
NO_DEQUEUE = ' ' IMPORTING delivery = delivery num_deliveries = num_deliveries TABLES sales_order_items = lt_order_items
-
SERIAL_NUMBERS =
-
EXTENSION_IN =
-
DELIVERIES =
-
CREATED_ITEMS =
-
EXTENSION_OUT = return = lt_return. "检查bapi LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. CONCATENATE ret_msg ls_return-message INTO ret_msg SEPARATED BY '/'. ENDLOOP. IF ret_msg IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. output_line-orderunm1 = input_body_item-bl_no. "处理成功存自建表 LOOP AT lt_004 ASSIGNING FIELD-SYMBOL(<fs>). <fs>-vbeln = delivery. ENDLOOP. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = delivery IMPORTING output = delivery. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'S'. "传给产销一份 SUBMIT zsd_r003 WITH delivery = delivery WITH cancel = input_body_item-cancle_flg AND RETURN . MODIFY ztsd004 FROM TABLE lt_004. COMMIT WORK. ELSE. output_line-orderunm1 = input_body_item-bl_no. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'E'. output_line-msg = ret_msg. ENDIF. APPEND output_line TO output_body . WHEN 'D'. delivery = input_body_item-vbeln. delivery = |{ delivery ALPHA = IN }|. "防止不带前0 str_header_data-deliv_numb = delivery. str_header_control-deliv_numb = delivery. str_header_control-dlv_del = 'X'. "查新 交货单数据 "传给产销一份 SUBMIT zsd_r003 WITH delivery = delivery WITH cancel = input_body_item-cancle_flg AND RETURN . CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING header_data = str_header_data header_control = str_header_control delivery = delivery
-
techn_control = techn_control
-
TECHN_CONTROL =
-
HEADER_DATA_SPL =
-
HEADER_CONTROL_SPL =
-
SENDER_SYSTEM = TABLES
-
HEADER_PARTNER =
-
HEADER_PARTNER_ADDR =
-
HEADER_DEADLINES =
-
item_data = item_body
-
item_control = item_control_body
-
ITEM_SERIAL_NO =
-
SUPPLIER_CONS_DATA =
-
EXTENSION1 =
-
EXTENSION2 = return = lt_return
-
TOKENREFERENCE =
-
ITEM_DATA_SPL =
-
COLLECTIVE_CHANGE_ITEMS =
-
NEW_ITEM_DATA =
-
NEW_ITEM_DATA_SPL =
-
NEW_ITEM_ORG =
-
ITEM_DATA_DOCU_BATCH = . LOOP AT lt_return INTO ls_return WHERE type = 'E'. CLEAR ret_msg. MESSAGE ID ls_return-id TYPE 'E' NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4 INTO ret_msg. ENDLOOP.
-
"检查bapi
-
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
-
CONCATENATE ret_msg ls_return-message INTO ret_msg SEPARATED BY '/'.
-
ENDLOOP. IF ret_msg IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. output_line-orderunm1 = input_body_item-bl_no. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'S'. "成功后调用用发送接口 IMPORT deljhd = gt_deiv FROM MEMORY ID 'DEL'. TRY . CREATE OBJECT lo_output. CALL METHOD lo_output->si_sap_del_ord_out EXPORTING output = gt_deiv. COMMIT WORK AND WAIT. CATCH cx_ai_system_fault. ENDTRY. ELSE. output_line-orderunm1 = input_body_item-bl_no. output_line-orderunm2 = |{ delivery ALPHA = OUT }|. output_line-msgcode = 'E'. output_line-msg = ret_msg. ENDIF. APPEND output_line TO output_body . WHEN OTHERS. ENDCASE. CLEAR:input_body_item,l_ship_point,delivery,num_deliveries,lt_order_items,output_line,vbeln,gt_deiv. FREE MEMORY ID 'DELV'. FREE MEMORY ID 'DEL'.
ENDLOOP.
out-mt_hxm_res-msgbd = output_body.
TRY .
CREATE OBJECT go_obj.
CALL METHOD go_obj->si_unhxm_out
EXPORTING
output = out.
COMMIT WORK AND WAIT.
CALL FUNCTION ‘ZFUN_PO_LOG’
EXPORTING -
OUTPUT1 = output2 = out. CATCH cx_ai_system_fault.
ENDTRY.
ENDMETHOD.