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

loop inside loop

Former Member
0 Likes
920

Hi Experts

I am using nested loops

but as it is not good practice

please send me alternative for this......

LOOP AT IT_VBAK INTO WA_VBAK.

READ TABLE IT_VBAP INTO WA_VBAP WITH KEY VBELN = WA_VBAK-VBELN.

READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR.

SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

LOOP AT IT_VBAP INTO WA_VBAP .

READ TABLE IT_VBKD INTO WA_VBKD WITH KEY VBELN = WA_VBAP-VBELN POSNR =

WA_VBAP-POSNR.

READ TABLE IT_VEDA INTO WA_VEDA WITH KEY VBELN = WA_VEDA-VBELN.

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

ENDLOOP.

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

APPEND WA_DISPLAY TO IT_DISPLAY

9 REPLIES 9
Read only

Former Member
0 Likes
900

For Line item data, you should use Loop inside Loop.

Few changes were required in your code. Changes are marked in Bold.

<b>SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

SORT IT_VBAP BY VBELN.

SORT IT_KNA1 by KUNNR.</b>

LOOP AT IT_VBAK INTO WA_VBAK.

READ TABLE IT_VBAP INTO WA_VBAP WITH KEY VBELN = WA_VBAK-VBELN <b>BINARY SEARCH</b>.

READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR <b>BINARY SEARCH</b>.

<i><b>* SORT IT_VBKD BY VBELN POSNR.

  • SORT IT_VEDA BY VBELN .</b></i>

LOOP AT IT_VBAP INTO WA_VBAP <b>WHERE VBELN = WA_VBAK-VEBLN</b> .

READ TABLE IT_VBKD INTO WA_VBKD WITH KEY VBELN = WA_VBAP-VBELN POSNR =

WA_VBAP-POSNR <b>BINARY SEARCH</b>.

READ TABLE IT_VEDA INTO WA_VEDA WITH KEY VBELN = WA_VEDA-VBELN <b>BINARY SEARCH.</b>

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

ENDLOOP.

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

APPEND WA_DISPLAY TO IT_DISPLAY

Read only

0 Likes
900

i want reward points to u how sld i do this?

Read only

0 Likes
900

use 'for all entries'.

Redesign your logic..

Read only

Former Member
0 Likes
900

Hi Ameet,

I think your logic is not correct. VBAP is item structure so you need to use LOOP here but you are not handling it correctly in the output table.

LOOP AT IT_VBAK INTO WA_VBAK.

READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR.

SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

LOOP AT IT_VBAP INTO WA_VBAP .

READ TABLE IT_VBKD INTO WA_VBKD WITH KEY VBELN = WA_VBAP-VBELN POSNR =

WA_VBAP-POSNR.

READ TABLE IT_VEDA INTO WA_VEDA WITH KEY VBELN = WA_VEDA-VBELN.

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

APPEND WA_DISPLAY TO IT_DISPLAY

ENDLOOP.

ENDLOOP.

Regards,

Atish

Read only

0 Likes
900

<b>atish</b>

i dint get you will you please explain more

Read only

varma_narayana
Active Contributor
0 Likes
900

hi Ameet..

Check this code.. It should work for u..

**Since the internal tables are sorted we can use BINARY SEARCH to improve the **performance

SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

SORT IT_VBAK BY VBELN.

SORT IT_VBAP BY VBELN.

SORT IT_KNA1 BY KUNNR.

LOOP AT IT_VBAP INTO WA_VBAP .

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

READ TABLE IT_VBAK INTO WA_VBAK

WITH KEY VBELN = WA_VBAK-VBELN

BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

ENDIF.

ENDIF.

READ TABLE IT_VBKD INTO WA_VBKD

WITH KEY VBELN = WA_VBAP-VBELN POSNR = WA_VBAP-POSNR

BINARY SEACH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

ENDIF.

READ TABLE IT_VEDA INTO WA_VEDA

WITH KEY VBELN = WA_VEDA-VBELN

BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

ENDIF.

APPEND WA_DISPLAY TO IT_DISPLAY

ENDLOOP.

<b>Reward if Helpful.</b>

Read only

Former Member
0 Likes
900

Hi Ameet,

Use parallel cursor method for this. It will be best in terms of performance. As per performance point of view it is not good to sort the tables inside the loop.

One more thing is VBAP is an item table and may contain many records for single VBELN in VBAK. so, we have to loop on that table.

Try using the below code.

Data : lw_index type sy-tabix.

SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

SORT IT_VBAP BY VBELN.

SORT IT_VBAK BY VBELN.

SORT IT_KNA1 by KUNNR.

lw_index = 1.

LOOP AT IT_VBAK INTO WA_VBAK.

READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR.

LOOP AT IT_VBAP INTO WA_VBAP from index lw_index.

If wa_vbap-vbeln GT wa_vbak-vbeln.

lw_index = sy-tabix.

exit.

elseif wa_vbap-vbeln EQ wa_vbak-vbeln.

READ TABLE IT_VBKD INTO WA_VBKD WITH KEY VBELN = WA_VBAP-VBELN POSNR =

WA_VBAP-POSNR binary search.

READ TABLE IT_VEDA INTO WA_VEDA WITH KEY VBELN = WA_VEDA-VBELN binary search.

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

endif.

ENDLOOP.

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

APPEND WA_DISPLAY TO IT_DISPLAY

ENDLOOP.

Hope this will help you.

Read only

0 Likes
900

Hi Ameet,

As you have not posted the thread as a question I think you cant reward points for this thread.

I hope your problem is resolved.

In future post threads as questions.

Read only

varma_narayana
Active Contributor
0 Likes
900

Hi Ameet ..

Some corrections from my Prev post.

Try this:

hi Ameet..

Check this code.. It should work for u..

**Since the internal tables are sorted we can use BINARY SEARCH to improve the **performance

SORT IT_VBKD BY VBELN POSNR.

SORT IT_VEDA BY VBELN .

SORT IT_VBAK BY VBELN.

SORT IT_VBAP BY VBELN.

SORT IT_KNA1 BY KUNNR.

LOOP AT IT_VBAP INTO WA_VBAP .

MOVE-CORRESPONDING WA_VBAP TO WA_DISPLAY.

READ TABLE IT_VBAK INTO WA_VBAK

<b>WITH KEY VBELN = WA_VBAP-VBELN</b>

BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VBAK TO WA_DISPLAY.

READ TABLE IT_KNA1 INTO WA_KNA1

WITH KEY KUNNR = WA_VBAK-KUNNR.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_KNA1 TO WA_DISPLAY.

ENDIF.

ENDIF.

READ TABLE IT_VBKD INTO WA_VBKD

WITH KEY VBELN = WA_VBAP-VBELN POSNR = WA_VBAP-POSNR

BINARY SEACH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VBKD TO WA_DISPLAY.

ENDIF.

READ TABLE IT_VEDA INTO WA_VEDA

<b>WITH KEY VBELN = WA_vbap-VBELN</b>

BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING WA_VEDA TO WA_DISPLAY.

ENDIF.

APPEND WA_DISPLAY TO IT_DISPLAY

ENDLOOP.