Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Batch Splits for inbound delivery (adding new items to a delivery)

Former Member

Hi everyone,

I am trying to automate batch splits for an inbound delivery. Here is an example scenario:

     I have 400 units of material A delivered. I want to pack 100 units of that material and assign a new batch number to those 100 units. So in vl32 I want to have the main item '000010' without a batch number and a child item '900001' with the created batch number. I cannot find a way to ADD new lines to the delivery, I can only change the existing lines.

I have tried using WS_DELIVERY_UPDATE_2 and BAPI_INB_DELIVERY_CHANGE but have not succeeded. Can a new line be added by using the mentioned FM?

Thank you.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Alina,

This is a very tricky problem you are having, I hope I am able to help. I am but a simple ABAP developer but I think this code may work for you, obviously it is only a test program and you will need to change the values to be dynamic but aside from that I deeply believe it will work for you. Please let me know how you get on.

REPORT  z_delivery_batch_split.

DATA:header_data  LIKE  bapiibdlvhdrchg,

header_control  LIKE  bapiibdlvhdrctrlchg,

delivery  LIKE  bapiibdlvhdrchg-deliv_numb,

ls_return LIKE bapiret2,

item_data  TYPE TABLE OF  bapiibdlvitemchg,

item_control  TYPE TABLE OF bapiibdlvitemctrlchg,

ls_item_data  LIKE  bapiibdlvitemchg,

ls_item_control LIKE  bapiibdlvitemctrlchg,

return TYPE TABLE OF bapiret2 WITH NON-UNIQUE KEY type.

header_data-deliv_numb = '1800005005'.

header_control-deliv_numb = '1800005005'.

delivery = '1800005005'.

ls_item_data-deliv_numb = '1800005005'.

ls_item_data-deliv_item = '900001'.

ls_item_data-material = '000000000020067722'.

PERFORM create_batch CHANGING ls_item_data-batch.

ls_item_data-hieraritem = '000010'.

ls_item_data-usehieritm = '1'.

ls_item_data-dlv_qty = 80.

ls_item_data-dlv_qty_imunit = 80.

ls_item_data-fact_unit_nom = '1'.

ls_item_data-fact_unit_denom = '1'.

ls_item_data-sales_unit = 'EA'.

ls_item_data-base_uom = 'EA'.

APPEND ls_item_data TO item_data.

ls_item_data-deliv_numb = '1800005005'.

ls_item_data-deliv_item = '900002'.

ls_item_data-material = '000000000020067722'.

PERFORM create_batch CHANGING ls_item_data-batch.

ls_item_data-hieraritem = '000010'.

ls_item_data-usehieritm = '1'.

ls_item_data-dlv_qty = 60.

ls_item_data-dlv_qty_imunit = 60.

ls_item_data-fact_unit_nom = '1'.

ls_item_data-fact_unit_denom = '1'.

ls_item_data-sales_unit = 'EA'.

ls_item_data-base_uom = 'EA'.

APPEND ls_item_data TO item_data.

ls_item_control-deliv_numb = '1800005005'.

ls_item_control-deliv_item = '900001'.

ls_item_control-chg_delqty = 'X'.

APPEND ls_item_control TO item_control.

ls_item_control-deliv_numb = '1800005005'.

ls_item_control-deliv_item = '900002'.

ls_item_control-chg_delqty = 'X'.

APPEND ls_item_control TO item_control.

break cgavin.

CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'

   EXPORTING

     header_data          = header_data

     header_control       = header_control

     delivery             = delivery

*   TECHN_CONTROL        = TECHN_CONTROL

   TABLES

*   HEADER_PARTNER       = HEADER_PARTNER

*   HEADER_PARTNER_ADDR  = HEADER_PARTNER_ADDR

*   HEADER_DEADLINES     = HEADER_DEADLINES

     item_data            = item_data

     item_control         = item_control

*   ITEM_SERIAL_NO       = ITEM_SERIAL_NO

*   EXTENSION1           = EXTENSION1

*   EXTENSION2           = EXTENSION2

     return               = return

*   TOKENREFERENCE       = TOKENREFERENCE

*   HANDLING_UNIT_HEADER = HANDLING_UNIT_HEADER

*   HANDLING_UNIT_ITEM   = HANDLING_UNIT_ITEM

*   PARTIAL_GR_OBJECTS   =          PARTIAL_GR_OBJECTS

   .

READ TABLE return

INTO ls_return

WITH TABLE KEY type = 'E'.

IF sy-subrc = 0.

   MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2

   ls_return-message_v3 ls_return-message_v4.

ENDIF.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  EXPORTING

    wait          = 'X'.

break cgavin.

*&---------------------------------------------------------------------*

*&      Form  CREATE_BATCH

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      <--P_LS_ITEM_DATA_BATCH  text

*----------------------------------------------------------------------*

FORM create_batch  CHANGING p_ls_item_data_batch.

   DATA: ls_bncom TYPE bncom.

   ls_bncom-matnr = ls_item_data-material.

   ls_bncom-werks = 'C333'.

   ls_bncom-lgort = '3000'.

   SELECT SINGLE mtart

     FROM mara

     INTO ls_bncom-mtart

     WHERE matnr = ls_bncom-matnr.

   CALL FUNCTION 'VB_NEXT_BATCH_NUMBER'

     EXPORTING

       matnr                          = ls_bncom-matnr

       werks                          = ls_bncom-werks

       check_batch                    = 'X'

       check_material                 = ''

       message_when_auto              = ' '

       x_bncom                        = ls_bncom

       lock_batch                     = ' '

     IMPORTING

       new_charg                      = p_ls_item_data_batch

     EXCEPTIONS

       no_material                    = 1

       no_plant                       = 2

       material_not_found             = 3

       plant_not_found                = 4

       no_batch_handling              = 5

       batch_exist                    = 6

       no_number                      = 7

       illegal_batch_number           = 8

       interval_not_found             = 9

       object_not_found               = 10

       interval_overflow              = 11

       error_automatic_batch_number   = 12

       cancelled                      = 13

       automatic_batch_num_not_active = 14

       OTHERS                         = 15.

   IF sy-subrc = 0.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

       EXPORTING

         wait = 'X'.

   ENDIF.

ENDFORM.                    " CREATE_BATCH

2 REPLIES 2

Former Member
0 Kudos

Hi Alina,

WS_DELIVERY_UPDATE_2 should work for you. I am hoping all the other fields are passed correctly.

Inside the Internal TABLE T_KOPO in WS_DELIVERY_UPDATE_2 you pass it like this.

The line in T_KOPO.Pass the following in addition to the other fields

1. T_KOPO-LIANP = 'X' to change the qty.

2. T_KOPO-POSNR_VL = '000010'.

3. T_KOPO-WMS_RFPOS = '000010'.

4. T_KOPO-CHARG = <Batch Number>.

5. T_KOPO-VBELN_VL = <Delivery Number>.

6 T_KOPO-LFIMG/LGMNG = <Qty>.

7. T_KOPO-MEINS/VRKME = <UOM>.

8 T_KOPO-MATNR = <Material>

Try this. Please note for picking and PGI you need to pass other field. For packing use internal table

T_VSEK.

Hope it works for you. The error will come in T_PROT table. Please check that incase you get any error.

Regards,

R

Former Member
0 Kudos

Hi Alina,

This is a very tricky problem you are having, I hope I am able to help. I am but a simple ABAP developer but I think this code may work for you, obviously it is only a test program and you will need to change the values to be dynamic but aside from that I deeply believe it will work for you. Please let me know how you get on.

REPORT  z_delivery_batch_split.

DATA:header_data  LIKE  bapiibdlvhdrchg,

header_control  LIKE  bapiibdlvhdrctrlchg,

delivery  LIKE  bapiibdlvhdrchg-deliv_numb,

ls_return LIKE bapiret2,

item_data  TYPE TABLE OF  bapiibdlvitemchg,

item_control  TYPE TABLE OF bapiibdlvitemctrlchg,

ls_item_data  LIKE  bapiibdlvitemchg,

ls_item_control LIKE  bapiibdlvitemctrlchg,

return TYPE TABLE OF bapiret2 WITH NON-UNIQUE KEY type.

header_data-deliv_numb = '1800005005'.

header_control-deliv_numb = '1800005005'.

delivery = '1800005005'.

ls_item_data-deliv_numb = '1800005005'.

ls_item_data-deliv_item = '900001'.

ls_item_data-material = '000000000020067722'.

PERFORM create_batch CHANGING ls_item_data-batch.

ls_item_data-hieraritem = '000010'.

ls_item_data-usehieritm = '1'.

ls_item_data-dlv_qty = 80.

ls_item_data-dlv_qty_imunit = 80.

ls_item_data-fact_unit_nom = '1'.

ls_item_data-fact_unit_denom = '1'.

ls_item_data-sales_unit = 'EA'.

ls_item_data-base_uom = 'EA'.

APPEND ls_item_data TO item_data.

ls_item_data-deliv_numb = '1800005005'.

ls_item_data-deliv_item = '900002'.

ls_item_data-material = '000000000020067722'.

PERFORM create_batch CHANGING ls_item_data-batch.

ls_item_data-hieraritem = '000010'.

ls_item_data-usehieritm = '1'.

ls_item_data-dlv_qty = 60.

ls_item_data-dlv_qty_imunit = 60.

ls_item_data-fact_unit_nom = '1'.

ls_item_data-fact_unit_denom = '1'.

ls_item_data-sales_unit = 'EA'.

ls_item_data-base_uom = 'EA'.

APPEND ls_item_data TO item_data.

ls_item_control-deliv_numb = '1800005005'.

ls_item_control-deliv_item = '900001'.

ls_item_control-chg_delqty = 'X'.

APPEND ls_item_control TO item_control.

ls_item_control-deliv_numb = '1800005005'.

ls_item_control-deliv_item = '900002'.

ls_item_control-chg_delqty = 'X'.

APPEND ls_item_control TO item_control.

break cgavin.

CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'

   EXPORTING

     header_data          = header_data

     header_control       = header_control

     delivery             = delivery

*   TECHN_CONTROL        = TECHN_CONTROL

   TABLES

*   HEADER_PARTNER       = HEADER_PARTNER

*   HEADER_PARTNER_ADDR  = HEADER_PARTNER_ADDR

*   HEADER_DEADLINES     = HEADER_DEADLINES

     item_data            = item_data

     item_control         = item_control

*   ITEM_SERIAL_NO       = ITEM_SERIAL_NO

*   EXTENSION1           = EXTENSION1

*   EXTENSION2           = EXTENSION2

     return               = return

*   TOKENREFERENCE       = TOKENREFERENCE

*   HANDLING_UNIT_HEADER = HANDLING_UNIT_HEADER

*   HANDLING_UNIT_ITEM   = HANDLING_UNIT_ITEM

*   PARTIAL_GR_OBJECTS   =          PARTIAL_GR_OBJECTS

   .

READ TABLE return

INTO ls_return

WITH TABLE KEY type = 'E'.

IF sy-subrc = 0.

   MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2

   ls_return-message_v3 ls_return-message_v4.

ENDIF.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  EXPORTING

    wait          = 'X'.

break cgavin.

*&---------------------------------------------------------------------*

*&      Form  CREATE_BATCH

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      <--P_LS_ITEM_DATA_BATCH  text

*----------------------------------------------------------------------*

FORM create_batch  CHANGING p_ls_item_data_batch.

   DATA: ls_bncom TYPE bncom.

   ls_bncom-matnr = ls_item_data-material.

   ls_bncom-werks = 'C333'.

   ls_bncom-lgort = '3000'.

   SELECT SINGLE mtart

     FROM mara

     INTO ls_bncom-mtart

     WHERE matnr = ls_bncom-matnr.

   CALL FUNCTION 'VB_NEXT_BATCH_NUMBER'

     EXPORTING

       matnr                          = ls_bncom-matnr

       werks                          = ls_bncom-werks

       check_batch                    = 'X'

       check_material                 = ''

       message_when_auto              = ' '

       x_bncom                        = ls_bncom

       lock_batch                     = ' '

     IMPORTING

       new_charg                      = p_ls_item_data_batch

     EXCEPTIONS

       no_material                    = 1

       no_plant                       = 2

       material_not_found             = 3

       plant_not_found                = 4

       no_batch_handling              = 5

       batch_exist                    = 6

       no_number                      = 7

       illegal_batch_number           = 8

       interval_not_found             = 9

       object_not_found               = 10

       interval_overflow              = 11

       error_automatic_batch_number   = 12

       cancelled                      = 13

       automatic_batch_num_not_active = 14

       OTHERS                         = 15.

   IF sy-subrc = 0.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

       EXPORTING

         wait = 'X'.

   ENDIF.

ENDFORM.                    " CREATE_BATCH