05-30-2006 12:42 PM
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
05-30-2006 3:17 PM
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.
05-30-2006 1:05 PM
Hi Ramya,
To which parameter r u passing the quantity ?
Trying passing the value to ORDER_SCHEDULES_IN-REQ_QTY
Regards
Beena
05-30-2006 1:28 PM
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.
05-30-2006 2:31 PM
Hi ,
Ideally this should work
Can u send the code that u r using ? I will look into that
Rgds
beena
05-30-2006 2:52 PM
hi , u can bapi_salesorder_createfromdat1, u r problem will be solved
05-30-2006 1:13 PM
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.
05-30-2006 6:47 PM
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.
05-31-2006 6:03 AM
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
05-30-2006 2:40 PM
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.
05-30-2006 3:17 PM
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.
05-30-2006 3:59 PM
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?
05-30-2006 4:10 PM
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.
05-30-2006 4:16 PM
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.
05-30-2006 5:20 PM
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