FUNCTION zif_sd_002
.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(CODE) TYPE CHAR1
*" VALUE(MESSAGE) TYPE CHAR200
*" TABLES
*" PICK STRUCTURE ZSD_DN_PICK OPTIONAL
*" PSN STRUCTURE ZSD_P_SN OPTIONAL
*" TRETURN STRUCTURE ZSD_RET OPTIONAL
*" EXCEPTIONS
*" SYSTEM_FAILURE
*" COMMUNICATION_FAILURE
*"----------------------------------------------------------------------
DATA :header_data LIKE bapiobdlvhdrchg . "Delivery header
DATA :header_control LIKE bapiobdlvhdrctrlchg . "delivery header control
DATA :i_delivery_no LIKE bapiobdlvhdrchg -deliv_numb . "deliver number
DATA :techn_control LIKE bapidlvcontrol . "TECHN_CONTROL
DATA :item_data LIKE bapiobdlvitemchg OCCURS 0 WITH HEADER LINE . "ITEM_DATA delivery item
DATA :item_control LIKE bapiobdlvitemctrlchg OCCURS 0 WITH HEADER LINE . "ITEM_CONTROL
DATA :item_serial_no LIKE bapidlvitmserno OCCURS 0 WITH HEADER LINE .
DATA : return LIKE bapiret2 OCCURS 0 WITH HEADER LINE . "Return
DATA :wa_pick TYPE zsd_dn_pick .
DATA :deliv_item LIKE bapiobdlvitemchg -deliv_item .
DATA :lt_psn TYPE TABLE OF zsd_p_sn WITH HEADER LINE .
DATA :l_count TYPE i .
DATA :l_charg LIKE mseg -charg .
DATA : i_vbkok LIKE vbkok , "Delivery header
i_vbpok LIKE vbpok OCCURS 0 WITH HEADER LINE , "Delivery Picking
vbkok_wa TYPE vbkok ,
vbpok_tab TYPE vbpok OCCURS 0 WITH HEADER LINE ,
lt_prott TYPE TABLE OF prott ,
lt_prott1 TYPE TABLE OF prott ,
ls_prott TYPE prott .
DATA :l_flag ( 1 ) .
DATA :ls_delivery_return TYPE bapiret2 .
DATA :str TYPE string .
DATA :i_message TYPE string .
SORT pick BY vbeln posnr .
lt_psn[] = psn[] .
*Set Delivery Header data
LOOP AT pick .
MOVE-CORRESPONDING pick TO wa_pick .
AT NEW vbeln .
CLEAR i_delivery_no .
CLEAR header_data .
CLEAR techn_control .
CLEAR header_control .
REFRESH item_data .
CLEAR item_data .
REFRESH item_control .
CLEAR item_control .
REFRESH item_serial_no .
CLEAR item_serial_no .
REFRESH i_vbpok .
CLEAR i_vbpok .
REFRESH vbpok_tab .
CLEAR vbpok_tab .
CLEAR deliv_item .
CLEAR l_flag .
deliv_item = '900000' .
i_delivery_no = wa_pick -vbeln . "'0080249529'.
header_data -deliv_numb = i_delivery_no .
techn_control -upd_ind = 'U' .
header_control -deliv_numb = i_delivery_no .
CLEAR i_vbkok .
i_vbkok -vbeln_vl = i_delivery_no .
i_vbkok -wabuc = 'X' . "Post Good Issue Automatic
i_vbkok -wadat_ist = sy -datum .
CLEAR vbkok_wa .
vbkok_wa -vbeln_vl = i_delivery_no .
CLEAR l_charg .
CLEAR l_count .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
l_count = l_count + 1 .
l_charg = lt_psn -charg .
ENDLOOP .
IF l_count > 1 AND l_charg <> '' .
l_flag = '1' .
ELSEIF l_count <= 1 AND l_charg <> '' .
l_flag = '2' .
ELSEIF l_count >= 1 AND l_charg = '' .
l_flag = '3' .
ENDIF .
ENDAT .
"处理需要批次拆分的行项目
IF l_flag = '1' .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
deliv_item = deliv_item + 1 .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = deliv_item . "'900001'.
item_data -hieraritem = wa_pick -posnr . "'40'. "The batch split record below delivery item hierary
item_data -usehieritm = '1' .
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -batch = lt_psn -charg . "'BCFA2907'.
item_data -dlv_qty = lt_psn -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
CLEAR item_control .
READ TABLE item_control WITH KEY deliv_numb = i_delivery_no deliv_item = wa_pick -posnr .
IF sy -subrc <> 0 .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
ENDIF .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = deliv_item . "'900001'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = deliv_item . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = deliv_item . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = lt_psn -charg .
i_vbpok -lfimg = lt_psn -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = deliv_item .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = deliv_item .
vbpok_tab -charg = lt_psn -charg . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = lt_psn -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDLOOP .
ELSEIF l_flag = '2' .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = wa_pick -posnr . "'900001'.
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -batch = lt_psn -charg . "'BCFA2907'.
item_data -dlv_qty = lt_psn -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = wa_pick -posnr . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = wa_pick -posnr . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = lt_psn -charg .
i_vbpok -lfimg = lt_psn -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = wa_pick -posnr .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = wa_pick -posnr .
vbpok_tab -charg = lt_psn -charg . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = lt_psn -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDLOOP .
ELSEIF l_flag = '3' .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = wa_pick -posnr . "'900001'.
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -dlv_qty = wa_pick -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
LOOP AT psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
item_serial_no -deliv_numb = i_delivery_no .
item_serial_no -itm_number = wa_pick -posnr .
item_serial_no -serialno = psn -sernr .
APPEND item_serial_no .
CLEAR item_serial_no .
ENDLOOP .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = wa_pick -posnr . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = wa_pick -posnr . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = '' .
i_vbpok -lfimg = wa_pick -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = wa_pick -posnr .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = wa_pick -posnr .
vbpok_tab -charg = '' . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = wa_pick -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDIF .
AT END OF vbeln .
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = header_data
header_control = header_control
delivery = i_delivery_no
techn_control = techn_control
TABLES
item_data = item_data
item_control = item_control
item_serial_no = item_serial_no
return = return .
CLEAR return .
READ TABLE return WITH KEY type = 'E' .
IF sy -subrc NE 0 .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
"修改拣配数量
CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'
EXPORTING
vbkok_wa = vbkok_wa
synchron = 'X'
TABLES
vbpok_tab = vbpok_tab
prot = lt_prott1 .
READ TABLE lt_prott1 INTO ls_prott WITH KEY msgty = 'E' .
IF sy -subrc EQ 0 .
LOOP AT lt_prott1 INTO ls_prott WHERE msgty CA 'AE' .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_prott -msgid
msgnr = ls_prott -msgno
msgv1 = ls_prott -msgv1
msgv2 = ls_prott -msgv2
msgv3 = ls_prott -msgv3
msgv4 = ls_prott -msgv4
IMPORTING
message_text_output = str .
IF i_message IS INITIAL .
MOVE str TO i_message .
ELSE .
CONCATENATE i_message '/' str INTO i_message .
ENDIF .
ENDLOOP .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'E' .
treturn -zmessage = '交货单修改批次成功,拣配失败!' .
ELSE .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'S' .
treturn -zmessage = '交货单拣配成功!' .
ENDIF .
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
LOOP AT return INTO ls_delivery_return WHERE type CA 'AE' .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_delivery_return - id
msgnr = ls_delivery_return - number
msgv1 = ls_delivery_return -message_v1
msgv2 = ls_delivery_return -message_v2
msgv3 = ls_delivery_return -message_v3
msgv4 = ls_delivery_return -message_v4
IMPORTING
message_text_output = str .
IF i_message IS INITIAL .
MOVE str TO i_message .
ELSE .
CONCATENATE i_message '/' str INTO i_message .
ENDIF .
ENDLOOP .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'E' .
treturn -zmessage = i_message .
ENDIF .
APPEND treturn .
CLEAR treturn .
ENDAT .
ENDLOOP .
ENDFUNCTION .
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(CODE) TYPE CHAR1
*" VALUE(MESSAGE) TYPE CHAR200
*" TABLES
*" PICK STRUCTURE ZSD_DN_PICK OPTIONAL
*" PSN STRUCTURE ZSD_P_SN OPTIONAL
*" TRETURN STRUCTURE ZSD_RET OPTIONAL
*" EXCEPTIONS
*" SYSTEM_FAILURE
*" COMMUNICATION_FAILURE
*"----------------------------------------------------------------------
DATA :header_data LIKE bapiobdlvhdrchg . "Delivery header
DATA :header_control LIKE bapiobdlvhdrctrlchg . "delivery header control
DATA :i_delivery_no LIKE bapiobdlvhdrchg -deliv_numb . "deliver number
DATA :techn_control LIKE bapidlvcontrol . "TECHN_CONTROL
DATA :item_data LIKE bapiobdlvitemchg OCCURS 0 WITH HEADER LINE . "ITEM_DATA delivery item
DATA :item_control LIKE bapiobdlvitemctrlchg OCCURS 0 WITH HEADER LINE . "ITEM_CONTROL
DATA :item_serial_no LIKE bapidlvitmserno OCCURS 0 WITH HEADER LINE .
DATA : return LIKE bapiret2 OCCURS 0 WITH HEADER LINE . "Return
DATA :wa_pick TYPE zsd_dn_pick .
DATA :deliv_item LIKE bapiobdlvitemchg -deliv_item .
DATA :lt_psn TYPE TABLE OF zsd_p_sn WITH HEADER LINE .
DATA :l_count TYPE i .
DATA :l_charg LIKE mseg -charg .
DATA : i_vbkok LIKE vbkok , "Delivery header
i_vbpok LIKE vbpok OCCURS 0 WITH HEADER LINE , "Delivery Picking
vbkok_wa TYPE vbkok ,
vbpok_tab TYPE vbpok OCCURS 0 WITH HEADER LINE ,
lt_prott TYPE TABLE OF prott ,
lt_prott1 TYPE TABLE OF prott ,
ls_prott TYPE prott .
DATA :l_flag ( 1 ) .
DATA :ls_delivery_return TYPE bapiret2 .
DATA :str TYPE string .
DATA :i_message TYPE string .
SORT pick BY vbeln posnr .
lt_psn[] = psn[] .
*Set Delivery Header data
LOOP AT pick .
MOVE-CORRESPONDING pick TO wa_pick .
AT NEW vbeln .
CLEAR i_delivery_no .
CLEAR header_data .
CLEAR techn_control .
CLEAR header_control .
REFRESH item_data .
CLEAR item_data .
REFRESH item_control .
CLEAR item_control .
REFRESH item_serial_no .
CLEAR item_serial_no .
REFRESH i_vbpok .
CLEAR i_vbpok .
REFRESH vbpok_tab .
CLEAR vbpok_tab .
CLEAR deliv_item .
CLEAR l_flag .
deliv_item = '900000' .
i_delivery_no = wa_pick -vbeln . "'0080249529'.
header_data -deliv_numb = i_delivery_no .
techn_control -upd_ind = 'U' .
header_control -deliv_numb = i_delivery_no .
CLEAR i_vbkok .
i_vbkok -vbeln_vl = i_delivery_no .
i_vbkok -wabuc = 'X' . "Post Good Issue Automatic
i_vbkok -wadat_ist = sy -datum .
CLEAR vbkok_wa .
vbkok_wa -vbeln_vl = i_delivery_no .
CLEAR l_charg .
CLEAR l_count .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
l_count = l_count + 1 .
l_charg = lt_psn -charg .
ENDLOOP .
IF l_count > 1 AND l_charg <> '' .
l_flag = '1' .
ELSEIF l_count <= 1 AND l_charg <> '' .
l_flag = '2' .
ELSEIF l_count >= 1 AND l_charg = '' .
l_flag = '3' .
ENDIF .
ENDAT .
"处理需要批次拆分的行项目
IF l_flag = '1' .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
deliv_item = deliv_item + 1 .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = deliv_item . "'900001'.
item_data -hieraritem = wa_pick -posnr . "'40'. "The batch split record below delivery item hierary
item_data -usehieritm = '1' .
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -batch = lt_psn -charg . "'BCFA2907'.
item_data -dlv_qty = lt_psn -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
CLEAR item_control .
READ TABLE item_control WITH KEY deliv_numb = i_delivery_no deliv_item = wa_pick -posnr .
IF sy -subrc <> 0 .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
ENDIF .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = deliv_item . "'900001'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = deliv_item . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = deliv_item . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = lt_psn -charg .
i_vbpok -lfimg = lt_psn -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = deliv_item .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = deliv_item .
vbpok_tab -charg = lt_psn -charg . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = lt_psn -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDLOOP .
ELSEIF l_flag = '2' .
LOOP AT lt_psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = wa_pick -posnr . "'900001'.
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -batch = lt_psn -charg . "'BCFA2907'.
item_data -dlv_qty = lt_psn -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = wa_pick -posnr . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = wa_pick -posnr . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = lt_psn -charg .
i_vbpok -lfimg = lt_psn -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = wa_pick -posnr .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = wa_pick -posnr .
vbpok_tab -charg = lt_psn -charg . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = lt_psn -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDLOOP .
ELSEIF l_flag = '3' .
item_data -deliv_numb = i_delivery_no .
item_data -deliv_item = wa_pick -posnr . "'900001'.
item_data -material = wa_pick -matnr . "'W065B0X030601002'.
item_data -dlv_qty = wa_pick -lfimg .
item_data -fact_unit_nom = 1 .
item_data -fact_unit_denom = 1 .
APPEND item_data .
CLEAR item_data .
item_control -deliv_numb = i_delivery_no .
item_control -deliv_item = wa_pick -posnr . "'40'.
item_control -chg_delqty = 'X' .
APPEND item_control .
CLEAR item_control .
LOOP AT psn WHERE vbeln = wa_pick -vbeln AND posnr = wa_pick -posnr .
item_serial_no -deliv_numb = i_delivery_no .
item_serial_no -itm_number = wa_pick -posnr .
item_serial_no -serialno = psn -sernr .
APPEND item_serial_no .
CLEAR item_serial_no .
ENDLOOP .
CLEAR i_vbpok .
i_vbpok -vbeln_vl = i_delivery_no . "Delivery NO
i_vbpok -posnr_vl = wa_pick -posnr . "Delivery Item
i_vbpok -vbeln = i_delivery_no . "Delivery NO
i_vbpok -posnn = wa_pick -posnr . "Delivery Item
i_vbpok -matnr = wa_pick -matnr .
i_vbpok -charg = '' .
i_vbpok -lfimg = wa_pick -lfimg . "Actual quantity delivered (in sales units)
APPEND i_vbpok .
CLEAR : vbpok_tab .
vbpok_tab -vbeln_vl = i_delivery_no .
vbpok_tab -posnr_vl = wa_pick -posnr .
vbpok_tab -vbeln = i_delivery_no .
vbpok_tab -posnn = wa_pick -posnr .
vbpok_tab -charg = '' . "批次
vbpok_tab -matnr = wa_pick -matnr . "物料
vbpok_tab -pikmg = wa_pick -lfimg . "实际已交货量(按销售单位)
vbpok_tab -meins = wa_pick -vrkme . "基本计量单位
APPEND vbpok_tab .
ENDIF .
AT END OF vbeln .
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = header_data
header_control = header_control
delivery = i_delivery_no
techn_control = techn_control
TABLES
item_data = item_data
item_control = item_control
item_serial_no = item_serial_no
return = return .
CLEAR return .
READ TABLE return WITH KEY type = 'E' .
IF sy -subrc NE 0 .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
"修改拣配数量
CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'
EXPORTING
vbkok_wa = vbkok_wa
synchron = 'X'
TABLES
vbpok_tab = vbpok_tab
prot = lt_prott1 .
READ TABLE lt_prott1 INTO ls_prott WITH KEY msgty = 'E' .
IF sy -subrc EQ 0 .
LOOP AT lt_prott1 INTO ls_prott WHERE msgty CA 'AE' .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_prott -msgid
msgnr = ls_prott -msgno
msgv1 = ls_prott -msgv1
msgv2 = ls_prott -msgv2
msgv3 = ls_prott -msgv3
msgv4 = ls_prott -msgv4
IMPORTING
message_text_output = str .
IF i_message IS INITIAL .
MOVE str TO i_message .
ELSE .
CONCATENATE i_message '/' str INTO i_message .
ENDIF .
ENDLOOP .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'E' .
treturn -zmessage = '交货单修改批次成功,拣配失败!' .
ELSE .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'S' .
treturn -zmessage = '交货单拣配成功!' .
ENDIF .
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
LOOP AT return INTO ls_delivery_return WHERE type CA 'AE' .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_delivery_return - id
msgnr = ls_delivery_return - number
msgv1 = ls_delivery_return -message_v1
msgv2 = ls_delivery_return -message_v2
msgv3 = ls_delivery_return -message_v3
msgv4 = ls_delivery_return -message_v4
IMPORTING
message_text_output = str .
IF i_message IS INITIAL .
MOVE str TO i_message .
ELSE .
CONCATENATE i_message '/' str INTO i_message .
ENDIF .
ENDLOOP .
treturn -vbeln = i_delivery_no .
treturn -zflag = 'E' .
treturn -zmessage = i_message .
ENDIF .
APPEND treturn .
CLEAR treturn .
ENDAT .
ENDLOOP .
ENDFUNCTION .