Search code examples
abapbapi

How to remove batch number on delivery?


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'.

Solution

  • 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!