2006 Sep 15 7:55 PM
I wrote a sales order creation BDC, and getting header data properly. But to get line item data, I am stuck. I am able to get only one line item per order.
Can you please correct me what I am doing wrong to get the line item data.
Thankyou. I will really appritiate your help.
Regards
Veni.
FORM populate_data .
data: lv_po(35) type c,
gv_num(3) type n value '001',
gv_fname1(132) type c,
gv_fname2(132) type c,
gv_fname3(132) type c,
GV_FNAME4(132) TYPE C.
Sort gt_sdata by BSTKD POSNR.
describe table gt_sdata lines l1_num.
Loop at gt_sdata INTO gs_sdata.
if lv_po ne gs_sdata-bstkd.
lv_po = gs_sdata-bstkd.
clear: gv_fname1, gv_fname2, gv_fname3, GV_FNAME4.
perform bdc_dynpro using 'SAPMV45A' '0101'.
perform bdc_field using 'BDC_CURSOR' 'VBAK-AUART'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'VBAK-AUART' 'OR'.
perform bdc_field using 'VBAK-VKORG' '300'.
perform bdc_field using 'VBAK-VTWEG' '20'.
perform bdc_field using 'VBAK-SPART' '01'.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE' '=KKAU'.
perform bdc_field using 'VBKD-BSTKD' gs_sdata-BSTKD.
perform bdc_field using 'VBKD-BSTDK' gs_sdata-BSTDK.
perform bdc_field using 'KUAGV-KUNNR' '1195'.
perform bdc_field using 'KUWEV-KUNNR' gs_sdata-KUNNR1.
perform bdc_field using 'RV45A-KETDAT' GS_SDATA-KETDAT.
perform bdc_field using 'RV45A-KPRGBZ' 'D'.
perform bdc_field using 'RV45A-DWERK' 'INDY'.
if gv_num = gs_sdata-POSNR.
concatenate 'RV45A-KWMENG(' gv_num ')' INTO GV_FNAME1.
concatenate 'VBAP-POSNR(' gv_num ')' INTO GV_FNAME2.
concatenate 'RV45A-MABNR(' gv_num ')' INTO GV_FNAME3.
concatenate 'KOMV-KBETR(' gv_num ')' INTO GV_FNAME4.
perform bdc_field using 'BDC_CURSOR' 'GV_FNAME1'.
perform bdc_field using GV_FNAME1 gs_sdata-POSNR.
perform bdc_field using GV_FNAME2 gs_sdata-MABNR.
perform bdc_field using GV_FNAME3 gs_sdata-KWMENG.
perform bdc_field using GV_FNAME4 gs_sdata-KBETR.
gv_num = gv_num + 1.
* APPEND gs_sdata.
* Clear gs_sdata.
endif.
perform bdc_dynpro using 'SAPMV45A' '4002'.
perform bdc_field using 'BDC_OKCODE' '=SICH'.
perform bdc_field using 'BDC_CURSOR' 'VBAK-GWLDT'.
perform bdc_field using 'VBAK-AUDAT' '08/24/2006'.
perform bdc_field using 'VBAK-VKBUR' '30'.
perform bdc_field using 'VBAK-GWLDT' GS_SDATA-GWLDT.
perform bdc_field using 'VBAK-WAERK' 'USD'.
perform bdc_field using 'VBKD-PRSDT' '08/24/2006'.
perform bdc_field using 'VBKD-KDGRP' '03'.
clear gs_sdata.
continue.
endif.
AT END of BSTKD.
perform bdc_transaction using 'VA01'.
clear gs_sdata.
ENDAT.
Endloop.
ENDFORM. " populate_data
OK, so really all you need to do is to add a loop to loop through the items for each order. Within the loop you will fill the BDC data needed for the item line.
The following part needs to be within a loop so that you will fill BDC data for more than just the first item line.
concatenate 'RV45A-KWMENG(' gv_num ')' INTO GV_FNAME1.
concatenate 'VBAP-POSNR(' gv_num ')' INTO GV_FNAME2.
concatenate 'RV45A-MABNR(' gv_num ')' INTO GV_FNAME3.
concatenate 'KOMV-KBETR(' gv_num ')' INTO GV_FNAME4.
perform bdc_field using 'BDC_CURSOR' 'GV_FNAME1'.
perform bdc_field using GV_FNAME1 gs_sdata-POSNR.
perform bdc_field using GV_FNAME2 gs_sdata-MABNR.
perform bdc_field using GV_FNAME3 gs_sdata-KWMENG.
perform bdc_field using GV_FNAME4 gs_sdata-KBETR.
gv_num = gv_num + 1.
2006 Sep 15 8:32 PM
I would start by putting a break point here:
if gv_num = gs_sdata-POSNR.
and see if it passes this check for the second line item.
Actually, your problem is that you are calling the transaction within your loop. You need to set the BDC data for the 'header' data, then loop through your items and append, then call the transaction.
You are missing a loop for your item lines.
Message was edited by: Matt Nagel
2006 Sep 15 9:44 PM
Thank you Nagel,
Do I have to loop at gs_sdata-POSNR or gv_num. gt_sdata is the internal table containing all the data.
Do I have to uppend gt_sdata, or gs_sdata into gt_sdata.
I am very confused.
Please help me.
Thanks
Veni.
2006 Sep 15 9:49 PM
Does gt_sdata hold the data for only one order, or more than one order?
2006 Sep 15 10:02 PM
Hi nagel,
Thank you. More than one order. Do you want me to send the remaining program.
Thank you.
Veni.
2006 Sep 15 11:49 PM
OK, so really all you need to do is to add a loop to loop through the items for each order. Within the loop you will fill the BDC data needed for the item line.
The following part needs to be within a loop so that you will fill BDC data for more than just the first item line.
concatenate 'RV45A-KWMENG(' gv_num ')' INTO GV_FNAME1.
concatenate 'VBAP-POSNR(' gv_num ')' INTO GV_FNAME2.
concatenate 'RV45A-MABNR(' gv_num ')' INTO GV_FNAME3.
concatenate 'KOMV-KBETR(' gv_num ')' INTO GV_FNAME4.
perform bdc_field using 'BDC_CURSOR' 'GV_FNAME1'.
perform bdc_field using GV_FNAME1 gs_sdata-POSNR.
perform bdc_field using GV_FNAME2 gs_sdata-MABNR.
perform bdc_field using GV_FNAME3 gs_sdata-KWMENG.
perform bdc_field using GV_FNAME4 gs_sdata-KBETR.
gv_num = gv_num + 1.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |