• March 6, 2026
  • Kishore Thutaram
  • 0

Create a Batch during Sales delivery creation by using the BADI LE_SHP_DELIVERY_PROC

Business Scenario:

“Create a batch during sales delivery creation.”

steps : SE 19 -> Implement the BADI BADI LE_SHP_DELIVERY_PROC

Implement the method IF_EX_LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE

Implement the code according to the requirements.


DATA: lv_mtart      TYPE mara-mtart,
           lv_batch      TYPE bapibatchkey-batch,
          ls_batchatt   TYPE bapibatchatt,
          ls_batchctrl  TYPE bapibatchctrl,
          lv_mat        TYPE bapibatchkey-material,
          lv_plant      TYPE bapibatchkey-plant,
          lt_ret        TYPE TABLE OF bapiret2.
^* Fetch material master data
      SELECT matnr, mtart, sgt_covsa, mhdhb
          FROM mara
          INTO TABLE @DATA(lt_mara)
          FOR ALL ENTRIES IN @xlips
          WHERE matnr = @xlips-matnr.
*--*Batch data
      SELECT matnr, charg, ersda, vfdat, sgt_scat, herkl, hsdat
         FROM mcha
         INTO TABLE @DATA(lt_mcha)
         FOR ALL ENTRIES IN @xlips
         WHERE matnr = @xlips-matnr
           AND lvorm = ' '. " Only consider batches not marked for deletion

*--*Process delivery item table data
  LOOP AT xlips ASSIGNING FIELD-SYMBOL().
      
*^^*  create new batch
              lv_mat = -matnr.
              lv_plant = -werks.
*              IF -vfdat NE '00000000'.
              IF lv_shelflife_chd IS NOT INITIAL.
                ls_batchatt-expirydate = -vfdat.
              ENDIF.

              "Map Date of Manuf.
              IF -hsdat IS NOT INITIAL.
                ls_batchatt-prod_date = -hsdat.
              ENDIF.

                FREE: lv_batch.
              IF -charg IS NOT INITIAL.
                lv_batch = -charg.
              ENDIF.
              ls_batchctrl-nocommit = abap_true. " Not interupt any COMMIT calles

              READ TABLE lt_mcha ASSIGNING FIELD-SYMBOL()
                                 WITH KEY charg = lv_batch.
              IF  IS ASSIGNED.
                "Batch already exists
                UNASSIGN .
              ELSE.
"Create Batch
                CALL FUNCTION 'BAPI_BATCH_CREATE'
                  EXPORTING
                    material           = lv_mat
                    batch              = lv_batch
                    plant              = lv_plant
                    batchcontrolfields = ls_batchctrl
                    batchattributes    = ls_batchatt
                  IMPORTING
                    batch              = lv_batch
                    batchattributes    = ls_batchatt
                  TABLES
                    return             = lt_ret.
                "No Need of Commit

                -charg = lv_batch.
              ENDIF.

              CLEAR: lv_mat, lv_plant.
            ENDIF.
            CLEAR ls_mcha.
          ENDIF.
        ENDIF.
      ENDLOOP.
   
    

Kishore Thutaram

SAP Solution Architect | 16+ Years' Experience in SAP | Sharing Practical SAP Knowledge | Engineering Graduate with Expertise in SAP Architecture

https://fiowelt.com