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




























