I need to remove the batch number (LIPS-CHARG) on the delivery item and tried with BAPI_OUTB_DELIVERY_CHANGE without success. I can change the delivery quantity (LIPS-LFIMG) correctly with this BAPI and change the picking number (LIPS-PKIMG) with WS_DELIVERY_UPDATE_2, but can't remove the batch number.
Does someone already remove the batch number? Don't need to use this BAPI, can be another one. I just need to remove the batch in any way.
The following code works to change the delivery quantity and picking quantity. At a certain moment, I change picking quantity to zero and at this moment I need to remove the batch number.
"&**** Begin structures BAPI_OUTB_DELIVERY_CHANGE *******
ls_header_data-deliv_numb = p_vbeln.
ls_header_control-deliv_numb = p_vbeln.
APPEND INITIAL LINE TO lt_item_data ASSIGNING FIELD-SYMBOL(<ls_item_data>).
<ls_item_data>-deliv_numb = p_vbeln.
<ls_item_data>-deliv_item = lv_posnn.
<ls_item_data>-material = <ls_alv>-matnr.
<ls_item_data>-batch = <ls_alv>-charg.
<ls_item_data>-hieraritem = <ls_lips>-posnr.
<ls_item_data>-usehieritm = '1'.
<ls_item_data>-dlv_qty = lv_delivery_qtd. "my delivery quantity
<ls_item_data>-dlv_qty_imunit = lv_delivery_qtd. "my delivery quantity
<ls_item_data>-fact_unit_nom = <ls_lips>-umvkz.
<ls_item_data>-fact_unit_denom = <ls_lips>-umvkn.
<ls_item_data>-sales_unit = <ls_lips>-vrkme.
APPEND INITIAL LINE TO lt_item_control ASSIGNING FIELD-SYMBOL(<ls_item_control>).
<ls_item_control>-deliv_numb = p_vbeln.
<ls_item_control>-deliv_item = lv_posnn.
<ls_item_control>-chg_delqty = 'X'.
"&**** End structures BAPI_OUTB_DELIVERY_CHANGE *******
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = p_vbeln
TABLES
item_data = lt_item_data
item_control = lt_item_control
return = lt_return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
"&**** Begin structures WS_DELIVERY_UPDATE_2 *******
APPEND INITIAL LINE TO lt_vbpok ASSIGNING FIELD-SYMBOL(<ls_vbpok>).
<ls_vbpok>-vbeln_vl = <ls_lips>-vbeln.
<ls_vbpok>-posnr_vl = <ls_lips>-posnr.
<ls_vbpok>-vbeln = <ls_lips>-vgbel.
<ls_vbpok>-posnn = <ls_lips>-vgpos.
<ls_vbpok>-matnr = <ls_lips>-matnr.
<ls_vbpok>-werks = <ls_lips>-werks.
<ls_vbpok>-umvkz = <ls_lips>-umvkz.
<ls_vbpok>-umvkn = <ls_lips>-umvkn.
<ls_vbpok>-gewei = <ls_lips>-gewei.
<ls_vbpok>-charg = <ls_alv>-charg.
<ls_vbpok>-pikmg = lv_picking_qtd. "my picking quantity
ls_vbkok-vbeln_vl = <ls_lips>-vbeln.
ls_vbkok-vbtyp_vl = 'J'.
ls_vbkok-komue = 'X'.
ls_vbkok-gewei = <ls_lips>-gewei.
ls_vbkok-anzpk = lv_anzpk.
ls_vbkok-kzapk = 'X'.
"&**** End structures WS_DELIVERY_UPDATE_2 *******
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = ls_vbkok
delivery = p_vbeln
synchron = abap_true
update_picking = abap_true
nicht_sperren_1 = abap_true
commit = abap_false
if_error_messages_send = abap_false
IMPORTING
ef_error_any = ls_error-any
ef_error_in_item_deletion = ls_error-in_item_deletion
ef_error_in_pod_update = ls_error-in_pod_update
ef_error_in_interface = ls_error-in_interface
ef_error_in_goods_issue = ls_error-in_goods_issue
ef_error_in_final_check = ls_error-in_final_check
ef_error_partner_update = ls_error-partner_update
ef_error_sernr_update = ls_error-sernr_update
TABLES
vbpok_tab = lt_vbpok.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
I found my error! When we need to remove the batch number, we don't need to send value on ITEM_DATA-DELIV_ITEM.
In my code, I was sending '90000001' on ITEM_DATA-DELIV_ITEM and '00010' on ITEM_DATA-USEHIERITM, but to work I just send ITEM_DATA-USEHIERITM and the batch number was removed correctly.
Thanks all!