Application Development and Automation 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: 
Read only

BDC Line item loop

Former Member
0 Likes
1,349

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

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.

5 REPLIES 5
Read only

Former Member
0 Likes
942

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

Read only

0 Likes
942

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.

Read only

0 Likes
942

Does gt_sdata hold the data for only one order, or more than one order?

Read only

0 Likes
942

Hi nagel,

Thank you. More than one order. Do you want me to send the remaining program.

Thank you.

Veni.

Read only

0 Likes
942

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.