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: 

Help regarding BAPI_SALESORDER_CREATEFROMDAT2

Former Member
0 Kudos

Hi All

I am using BAPI_SALESORDER_CREATEFROMDAT2 to create new sales order. Everything is working fine except for the Order quantity which is not getting populated from the second item and as a result the schedule line is not getting created from the second item onwards

Any clues on why the BAPI is behaving in this way?

Thanks in advance

Sree Ramya

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

if u solved ur problem then its ok..........otherwise u can follow this code.

  • Populate the SD header data.

l_x_sd_header-sales_org = p_vkorg. "Sales organization

l_x_sd_header-distr_chan = p_vtweg. "Distribution channel

l_x_sd_header-division = p_spart. "Sales division

l_x_sd_header-created_by = c_author. "'MMLS'

  • Populate the SD header data check list.

l_x_sd_header_x-doc_type = c_checked.

l_x_sd_header_x-sales_org = c_checked.

l_x_sd_header_x-distr_chan = c_checked.

l_x_sd_header_x-division = c_checked.

  • Populate SD item data check list.

l_w_sd_item_x-itm_number = c_checked.

l_w_sd_item_x-material = c_checked.

l_w_sd_item_x-batch = c_checked.

l_w_sd_item_x-store_loc = c_checked.

l_w_sd_item_x-plant = c_checked.

APPEND l_w_sd_item_x TO l_t_sd_item_x.

  • For each record populate the BAPI FM parameters and call the BAPI

  • function module BAPI_SALESORDER_CREATEFROMDAT2 to create the sales

  • order and send notification to user for incomplete and unprocessed

  • sales order.

LOOP AT t_infile INTO l_w_infile.

l_index = sy-tabix.

  • Populate SD header data.

IF l_w_infile-dirid EQ c_r1. "R1

l_x_sd_header-doc_type = c_zkb. "ZKB (Order type)

ELSEIF l_w_infile-dirid EQ c_r2. "R2

l_x_sd_header-doc_type = c_ka. "KA (Order type)

ENDIF.

  • Populate SD partner data.

PERFORM sub_populate_partner USING l_w_infile-dicus

CHANGING l_w_sd_partner-partn_numb.

l_w_sd_partner-partn_role = c_sold_to_party. "AG

APPEND l_w_sd_partner TO l_t_sd_partner.

CLEAR l_w_sd_partner.

PERFORM sub_populate_partner USING l_w_infile-dienp

CHANGING l_w_sd_partner-partn_numb.

l_w_sd_partner-partn_role = c_sp_stock_partner."SB

APPEND l_w_sd_partner TO l_t_sd_partner.

  • Populate SD item data

l_w_sd_item_x-itm_number = 10. "Item number

l_w_sd_item-material = l_w_infile-dimdel. "Material Number

l_w_sd_item-batch = l_w_infile-disal+0(10)."Batch number

l_w_sd_item-store_loc = l_w_infile-dimcu. "Storage location

l_w_sd_item-plant = c_werks. "Plant(MMLS)'1115'

l_w_sd_item-created_by = c_author. "Created by

APPEND l_w_sd_item TO l_t_sd_item.

  • Populating the sales order schedule line item data

l_w_sd_schedules-itm_number = 10 . "Item number

l_w_sd_schedules-req_qty = l_w_infile-diqty. "Quantity

APPEND l_w_sd_schedules TO l_t_sd_schedules.

  • Call the BAPI function module for sales order creation.

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'

EXPORTING

order_header_in = l_x_sd_header

order_header_inx = l_x_sd_header_x

IMPORTING

salesdocument = l_vbeln

TABLES

return = l_t_return

order_items_in = l_t_sd_item

order_items_inx = l_t_sd_item_x

order_partners = l_t_sd_partner

order_schedules_in = l_t_sd_schedules.

13 REPLIES 13

Former Member
0 Kudos

Hi Ramya,

To which parameter r u passing the quantity ?

Trying passing the value to ORDER_SCHEDULES_IN-REQ_QTY

Regards

Beena

0 Kudos

Hi Beena and Sravanthi

Thanks for the quick response

I did pass value to ORDER_SCHEDULES_IN-REQ_QTY.

I also filled 'order_item_in' simultaneously while filling 'order_schedules_in'

but it did not work out.

0 Kudos

Hi ,

Ideally this should work

Can u send the code that u r using ? I will look into that

Rgds

beena

0 Kudos

hi , u can bapi_salesorder_createfromdat1, u r problem will be solved

Former Member
0 Kudos

When filling the 'order_item_in', simultaneously fill the Schedules 'order_schedules_in' also.. for example..

  
...
  order_item_in-material = it_matl-material.
  order_item_in-target_qty = it_matl-tgtqty.
  order_item_in-VW_UEPOS = it_matl-vw_uepos.
  append order_item_in.
  clear order_item_in.
...
  loop at order_item_in .
    order_schedules_in-itm_number = 
                          order_item_in-itm_number.
    order_schedules_in-req_qty = it_matl-tgtqty.
    append order_schedules_in.
    clear order_schedules_in.
  endloop.

0 Kudos

Sree,

Has your issue been resolved?

If so, please reward points accordingly and close the thread.

If not, please provide more details of an issue.

Thanks in advance.

0 Kudos

Hi All

Thanks a lot for your timely help.

I was just wondering whether there is any other logic other than incrementing the item number by 10. But seems like it is the only logic.

Thanks once again

Regards

Sree Ramya

Former Member
0 Kudos

Sree,

Make sure that you are filling the Schedule Line checkbox internal table as well - BAPISCHDLX.

You must set REQ_QTY to the appropriate qty in Int table BAPISCHDL

AND

you must set REQ_QTY = 'X' in the BAPISCHDLX for each and every line item.

Former Member
0 Kudos

Hi,

if u solved ur problem then its ok..........otherwise u can follow this code.

  • Populate the SD header data.

l_x_sd_header-sales_org = p_vkorg. "Sales organization

l_x_sd_header-distr_chan = p_vtweg. "Distribution channel

l_x_sd_header-division = p_spart. "Sales division

l_x_sd_header-created_by = c_author. "'MMLS'

  • Populate the SD header data check list.

l_x_sd_header_x-doc_type = c_checked.

l_x_sd_header_x-sales_org = c_checked.

l_x_sd_header_x-distr_chan = c_checked.

l_x_sd_header_x-division = c_checked.

  • Populate SD item data check list.

l_w_sd_item_x-itm_number = c_checked.

l_w_sd_item_x-material = c_checked.

l_w_sd_item_x-batch = c_checked.

l_w_sd_item_x-store_loc = c_checked.

l_w_sd_item_x-plant = c_checked.

APPEND l_w_sd_item_x TO l_t_sd_item_x.

  • For each record populate the BAPI FM parameters and call the BAPI

  • function module BAPI_SALESORDER_CREATEFROMDAT2 to create the sales

  • order and send notification to user for incomplete and unprocessed

  • sales order.

LOOP AT t_infile INTO l_w_infile.

l_index = sy-tabix.

  • Populate SD header data.

IF l_w_infile-dirid EQ c_r1. "R1

l_x_sd_header-doc_type = c_zkb. "ZKB (Order type)

ELSEIF l_w_infile-dirid EQ c_r2. "R2

l_x_sd_header-doc_type = c_ka. "KA (Order type)

ENDIF.

  • Populate SD partner data.

PERFORM sub_populate_partner USING l_w_infile-dicus

CHANGING l_w_sd_partner-partn_numb.

l_w_sd_partner-partn_role = c_sold_to_party. "AG

APPEND l_w_sd_partner TO l_t_sd_partner.

CLEAR l_w_sd_partner.

PERFORM sub_populate_partner USING l_w_infile-dienp

CHANGING l_w_sd_partner-partn_numb.

l_w_sd_partner-partn_role = c_sp_stock_partner."SB

APPEND l_w_sd_partner TO l_t_sd_partner.

  • Populate SD item data

l_w_sd_item_x-itm_number = 10. "Item number

l_w_sd_item-material = l_w_infile-dimdel. "Material Number

l_w_sd_item-batch = l_w_infile-disal+0(10)."Batch number

l_w_sd_item-store_loc = l_w_infile-dimcu. "Storage location

l_w_sd_item-plant = c_werks. "Plant(MMLS)'1115'

l_w_sd_item-created_by = c_author. "Created by

APPEND l_w_sd_item TO l_t_sd_item.

  • Populating the sales order schedule line item data

l_w_sd_schedules-itm_number = 10 . "Item number

l_w_sd_schedules-req_qty = l_w_infile-diqty. "Quantity

APPEND l_w_sd_schedules TO l_t_sd_schedules.

  • Call the BAPI function module for sales order creation.

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'

EXPORTING

order_header_in = l_x_sd_header

order_header_inx = l_x_sd_header_x

IMPORTING

salesdocument = l_vbeln

TABLES

return = l_t_return

order_items_in = l_t_sd_item

order_items_inx = l_t_sd_item_x

order_partners = l_t_sd_partner

order_schedules_in = l_t_sd_schedules.

0 Kudos

Hi Partha

Thx a lot 4 the code

I got the error I was committing, I was not passing itm_number to order_schedules_in.

here, u were hard coding the value of '10', but if there are more than one items, then how do we proceed?

0 Kudos

Sree,

As you loop thru the items to create the Items_IN table, you will have the line number (VBAP-POSNR).

Place that value VBAP-POSNR into the each Sched_IN entry that you are creating.

Make sure to set the Sched_INX-req_qty as well for each sched line.

0 Kudos

Sree,

Something like this:

data: hdr like bapiSDHD1.

data: itm like table of BAPIsditm with header line.

data: schd_lin like table of bapischdl with header line.

data: l_number type POSNR_VA.

l_number = '10'.

loop at i_vbap.

move l_number to itm-itm_number.

  • Build item line.

itm-material = i_vbap-matnr.

itm-store_loc = i_vbap-LGORT.

itm-sales_unit = i_vbap-vrkme.

itm-cust_mat35 = i_vbap-KDMAT.

itm-MAT_ENTRD = i_vbap-matwa.

itm-short_text = i_vbap-arktx.

  • Assigning ref doc to create line item entries in VBFA.

itm-REF_DOC = i_vakgu-vbeln.

itm-REF_DOC_IT = i_vbap-posnr.

itm-REF_DOC_CA = 'B'.

append itm.

  • Build schedule line as well.

move l_number to schd_lin-itm_number.

schd_lin-req_qty = i_vbap-kwmeng.

append schd_lin.

l_number = l_number + 10.

endloop.

0 Kudos

Hi,

Below is the similar code to append more line items.

Check it once.


  LOOP AT P_ZITEMS_IN.

    LV_CURR_ITEM = LV_CURR_ITEM +  10.
    MOVE: LV_CURR_ITEM             TO P_ITEMS-ITM_NUMBER,
          P_ZITEMS_IN-MATNR        TO P_ITEMS-MATERIAL,
          P_ZITEMS_IN-ZMENG        TO P_ITEMS-TARGET_QTY,
          P_ZITEMS_IN-ZIEME        TO P_ITEMS-TARGET_QU,
          P_ZITEMS_IN-MVGR4        TO P_ITEMS-PRC_GROUP4.

    IF LV_CURR_ITEM <> 10.
      MOVE: P_ZITEMS_IN-UEPOS        TO P_ITEMS-HG_LV_ITEM.
    ENDIF.

    IF P_ZHEADER_IN-AUART = K_205.
      MOVE P_ZITEMS_IN-ABGRU       TO P_ITEMS-REASON_REJ.
    ENDIF.

    MOVE: LV_CURR_ITEM             TO P_CUST_ITEMS_IN-POSNR,
          LV_CURR_ITEM             TO P_Z_ITEMS_MSG-SLSDOCITM.

    MODIFY P_CUST_ITEMS_IN TRANSPORTING POSNR
                                  WHERE POSNR = P_ZITEMS_IN-POSNR.

    MODIFY P_Z_ITEMS_MSG   TRANSPORTING SLSDOCITM
                                  WHERE SLSDOCITM = P_ZITEMS_IN-POSNR.

    MOVE: LV_CURR_ITEM             TO P_ZITEMS_IN-POSNR.

    MODIFY P_ZITEMS_IN.

  ENDLOOP. " End loop P_ZITEMS_IN

Please give rewards and close the post if your issues has been solved.

Regards,

Sreekanth