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

RE: Looping the internal table

Former Member
0 Likes
1,044

Hi everyone,

I have a doubt as I am relatively new,,,, when I use the LOOP AT statement in my program I only get the last record why?. Here is the code.........

&----


*& Report YA3530_FI

*&

&----


*&

*&

&----


REPORT YA3530_FI NO STANDARD PAGE HEADING LINE-SIZE 150.

TABLES: SKA1, SKB1.

TYPES: BEGIN OF str,

saknr TYPE ska1-saknr,

ktopl TYPE ska1-ktopl,

ktoks TYPE ska1-ktoks,

bukrs TYPE skb1-bukrs,

waers TYPE skb1-waers,

xopvw TYPE skb1-xopvw,

xkres TYPE skb1-xkres,

zuawa TYPE skb1-zuawa,

END OF str.

DATA: itab_str TYPE TABLE OF str,

wa_str LIKE LINE OF itab_str.

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME.

SELECT-OPTIONS : s_saknr FOR ska1-saknr,

s_ktopl FOR ska1-ktopl,

s_bukrs FOR skb1-bukrs.

SELECTION-SCREEN END OF BLOCK block1.

SELECT ska1~saknr

ska1~ktopl

ska1~ktoks

skb1~bukrs

skb1~waers

skb1~xopvw

skb1~xkres

skb1~zuawa

FROM ska1 INNER JOIN skb1

ON ska1saknr = skb1saknr

INTO TABLE itab_str

WHERE ska1~saknr IN s_saknr AND

ska1~ktopl IN s_ktopl AND

skb1~bukrs IN s_bukrs.

LOOP AT itab_str INTO wa_str.

write: wa_str-saknr, 30 wa_str-ktopl, 50 wa_str-bukrs, 70 wa_str-ktoks, 90 wa_str-waers,

100 wa_str-xopvw, 110 wa_str-xkres, 130 wa_str-zuawa.

ENDLOOP.

Hi everyone,

I have a doubt as I am relatively new,,,, when I use the LOOP AT statement in my program I only get the last record why?. Here is the code.........

&----


*& Report YA3530_FI

*&

&----


*&

*&

&----


REPORT YA3530_FI NO STANDARD PAGE HEADING LINE-SIZE 150.

TABLES: SKA1, SKB1.

TYPES: BEGIN OF str,

saknr TYPE ska1-saknr,

ktopl TYPE ska1-ktopl,

ktoks TYPE ska1-ktoks,

bukrs TYPE skb1-bukrs,

waers TYPE skb1-waers,

xopvw TYPE skb1-xopvw,

xkres TYPE skb1-xkres,

zuawa TYPE skb1-zuawa,

END OF str.

DATA: itab_str TYPE TABLE OF str,

wa_str LIKE LINE OF itab_str.

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME.

SELECT-OPTIONS : s_saknr FOR ska1-saknr,

s_ktopl FOR ska1-ktopl,

s_bukrs FOR skb1-bukrs.

SELECTION-SCREEN END OF BLOCK block1.

SELECT ska1~saknr

ska1~ktopl

ska1~ktoks

skb1~bukrs

skb1~waers

skb1~xopvw

skb1~xkres

skb1~zuawa

FROM ska1 INNER JOIN skb1

ON ska1saknr = skb1saknr

INTO TABLE itab_str

WHERE ska1~saknr IN s_saknr AND

ska1~ktopl IN s_ktopl AND

skb1~bukrs IN s_bukrs.

LOOP AT itab_str INTO wa_str.

write: wa_str-saknr, 30 wa_str-ktopl, 50 wa_str-bukrs, 70 wa_str-ktoks, 90 wa_str-waers,

100 wa_str-xopvw, 110 wa_str-xkres, 130 wa_str-zuawa.

ENDLOOP.

7 REPLIES 7
Read only

Former Member
0 Likes
979

Hi

Your code is perfect, you have missed next line in write statement in Loop. Because of this the records are getting printed on single line and they are being overwritten.

Paste the below code


LOOP AT itab_str INTO wa_str.

write:*/*  wa_str-saknr, 30 wa_str-ktopl, 50 wa_str-bukrs, 70 wa_str-ktoks, 90 wa_str-waers,
100 wa_str-xopvw, 110 wa_str-xkres, 130 wa_str-zuawa.
ENDLOOP.

Shiva

Read only

Former Member
0 Likes
979

Hi prabu,

In loop use new line character i.e "/" next to "write", as shown below. It works fine.

LOOP AT itab_str INTO wa_str.

Write:/ wa_str-saknr, 30 wa_str-ktopl, 50 wa_str-bukrs, 70 wa_str-ktoks, 90 wa_str-waers,

100 wa_str-xopvw, 110 wa_str-xkres, 130 wa_str-zuawa.

ENDLOOP.

As ur printing data from work area, work area holds only one row for each loop. So, it prints row by row each time it loops and after printing each row next row should be printed on the next line and that can achieved by using new line character next to "Write" statements as "WRITE:/".

Hope it solves!

Regards:

-KangArun

Read only

Former Member
0 Likes
979

Thank you to both , i have got it................thanks once again

Read only

Former Member
0 Likes
979

now I have been asked to do this program using two different internal tables ......how to do it??

Read only

0 Likes
979

What do you mean?

Max

Read only

0 Likes
979

This is a separate question. Please mark this as answered and start a new thread. But make sure it is a specific question. The original one is pretty basic.

Rob

Read only

0 Likes
979

Well, could be something like this...


TYPES: BEGIN OF ty_ska1,
         saknr TYPE ska1-saknr,
         ktopl TYPE ska1-ktopl,
         ktoks TYPE ska1-ktoks,
      END OF ty_ska1,
      tt_ska1 TYPE SORTED TABLE OF ty_ska1
      WITH UNIQUE KEY saknr ktopl.

TYPES: BEGIN OF ty_skb1,
         saknr TYPE ska1-saknr,
         bukrs TYPE skb1-bukrs,
         waers TYPE skb1-waers,
         xopvw TYPE skb1-xopvw,
         xkres TYPE skb1-xkres,
         zuawa TYPE skb1-zuawa,
      END OF ty_skb1,
      tt_skb1 TYPE SORTED TABLE OF ty_skb1
      WITH UNIQUE KEY saknr bukrs.

DATA: itab_ska1 TYPE tt_ska1,
      itab_skb1 TYPE tt_skb1.

FIELD-SYMBOLS: <ska1> TYPE ty_ska1,
               <skb1> TYPE ty_skb1.

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME.

SELECT-OPTIONS: s_saknr FOR ska1-saknr,
                s_ktopl FOR ska1-ktopl,
                s_bukrs FOR skb1-bukrs.

SELECTION-SCREEN END OF BLOCK block1.

SELECT saknr ktopl ktoks
  FROM ska1
  INTO TABLE itab_ska1
 WHERE saknr IN s_saknr
   AND ktopl IN s_ktopl.

SELECT saknr bukrs waers xopvw xkres zuawa
  FROM skb1
  INTO TABLE itab_skb1
 WHERE saknr IN s_saknr
   AND bukrs IN s_bukrs.


LOOP AT itab_ska1 ASSIGNING <ska1>.

  LOOP AT itab_skb1 ASSIGNING <skb1> WHERE saknr = <ska1>-saknr.

    WRITE: / <ska1>-saknr, 30 <ska1>-ktopl, 50 <skb1>-bukrs, 70 <ska1>-ktoks, 
          90 <skb1>-waers, 100 <skb1>-xopvw, 110 <skb1>-xkres, 130 <skb1>-zuawa.

  ENDLOOP.

ENDLOOP.

However, I wrote this in notepad, I may have missed something (e.g. check the keys are unique for sorted itabs)

The LOOPS are basic here, could be enhanced with parallel cursor technique... but I don't think it's the purpose of your exercise...

Kr,

m.