2011 Sep 23 2:45 PM
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.
2011 Sep 23 2:49 PM
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
2011 Sep 23 5:20 PM
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
2011 Sep 23 5:24 PM
Thank you to both , i have got it................thanks once again
2011 Sep 23 5:28 PM
now I have been asked to do this program using two different internal tables ......how to do it??
2011 Sep 23 5:29 PM
2011 Sep 23 7:22 PM
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
2011 Sep 23 11:19 PM
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.