‎2006 Jul 09 5:07 AM
Hi folks,
I have a internal table
data : begin of it_itab occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab.
with data in it. Let us say the data is in this way
mwsk1 | kwert | knumh | kopos
-
A0 |100.00 | 02 | 01
E1 |200.00 | 04 | 01
A0 |400.00 | 02 | 01
E8 |900.00 | 06 | 01
E1 |600.00 | 04 | 01
A0 |000.00 | 02 | 01
My requirement is, take all the records with same 'mwsk1' and add their 'kwert' and put in a new internal table with same four fields i.e., in the above internal table add the 'kwert' of all the records with 'A0' and put that result in the new internal table.
All the records with same 'mwsk1' will have the same 3rd and 4th field values.
So the result internal table should look like
mwsk1 | kwert | knumh | kopos
-
A0 |500.00 | 02 | 01
E1 |800.00 | 04 | 01
E8 |900.00 | 06 | 01
Please help me with your ideas. Thanks.
‎2006 Jul 09 7:23 AM
Hi
data : begin of it_itab occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab.
data : begin of it_itab2 occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab2.
LOOP AT it_ITAB1 INTO IT_ITAB2.
COLLECT IT_ITAB2.
ENDLOOP.
Max
‎2006 Jul 09 5:18 AM
Hi,
types : begin of t_tab,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of t_tab.
data : it_tab1 type standard table of t_tab,
it_tab2 type standard table of t_tab,
it_new type standard table of t_tab,
l_lines type i,
l_count type i.
it_tab2[] = it_tab1[].
sort it_tab2 by mwsk1.
delete adajacent duplicates from it_tab2 comparing mwsk1.
describe it_tab2 line l_lines.
l_count = 0.
do.
l_count = l_count + 1.
if l_count gt l_lines.
exit.
endif.
read table it_tab2 into wa_tab2 index l_count.
loop at it_tab1 into wa_tab1 where mwsk1 = wa_tab2-mwsk1.
l_kwert = wa_tab1-kwert + l_kwert.
endloop.
wa_tab2-kwert = l_kwert.
append wa_tab2 into it_new.
enddo.
Best regards,
Prashant
‎2006 Jul 09 6:27 AM
Hi Raju,
Please check this snippet of code.
types : begin of t_it,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of t_it.
data : it type standard table it t_it with header line,
it1 type standard table it t_it with header line,
l_t_mwsk1 type komv-mwsk1,
l_t_kwert type komv-kwert.
it-t_mwsk1 = 'A0'.
it-t_kwert = '100.00'.
it-t_knumh = 02.
it-t_kopos = 01.
append it.
it-t_mwsk1 = 'E1'.
it-t_kwert = '200.00'.
it-t_knumh = 04.
it-t_kopos = 01.
append it.
it-t_mwsk1 = 'A0'.
it-t_kwert = '400.00'.
it-t_knumh = 02.
it-t_kopos = 01.
append it.
it-t_mwsk1 = 'E8'.
it-t_kwert = '900.00'.
it-t_knumh = 06.
it-t_kopos = 01.
append it.
it-t_mwsk1 = 'E1'.
it-t_kwert = '600.00'.
it-t_knumh = 04.
it-t_kopos = 01.
append it.
it-t_mwsk1 = 'A0'.
it-t_kwert = '000.00'.
it-t_knumh = 02.
it-t_kopos = 01.
append it.
sort it by mwsk1.
delete adajacent duplicates from it
comparing mwsk1 kwert knumh kopos.
loop at it.
at new t_mwsk1.
l_t_mwsk1 = it-t_mwsk1.
l_t_kwert = '0.0'.
endat.
if l_t_mwsk1 = it-t_mwsk1.
l_t_kwert = it-t_kwert + l_t_kwert.
endif.
at end of t_mwsk1.
it1-t_mwsk1 = it-t_mwsk1.
it1-t_kwert = it-t_kwert.
it1-t_knumh = it-t_knumh.
it1-t_kopos = it-t_kopos.
append it1.
endat.
endloop.
loop at it1.
write: / it1-t_mwsk1, it1-t_kwert, it1-t_knumh, it1-t_kopos.
endloop.
Otherwise u can use collect statement if u have only one numeric field (kwert) and the remaining fields are of type char.
Please mark helpful answers.
‎2006 Jul 09 7:23 AM
Hi
data : begin of it_itab occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab.
data : begin of it_itab2 occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab2.
LOOP AT it_ITAB1 INTO IT_ITAB2.
COLLECT IT_ITAB2.
ENDLOOP.
Max
‎2006 Jul 09 8:14 AM
Hello,
You can use collect statement to add the numeric values.
data : begin of it_itab occurs 0,
mwsk1 like komv-mwsk1,
kwert like komv-kwert,
knumh like komv-knumh,
kopos like komv-kopos,
end of it_itab.
data : begin of itab occurs 0,
mwsk1 like komv-mwsk1,
kwert like komv-kwert,
knumh like komv-knumh,
kopos like komv-kopos,
end of itab.
it_itab-mwsk1 = 'A0'.
it_itab-kwerT = '100'.
it_itab-knumh = '02'.
it_itab-kopOs = '01'.
append it_itab.
it_itab-mwsk1 = 'E1'.
it_itab-kwerT = '200'.
it_itab-knumh = '04'.
it_itab-kopOs = '01'.
append it_itab.
it_itab-mwsk1 = 'A0'.
it_itab-kwerT = '400'.
it_itab-knumh = '02'.
it_itab-kopOs = '01'.
append it_itab.
it_itab-mwsk1 = 'E1'.
it_itab-kwerT = '900'.
it_itab-knumh = '04' .
it_itab-kopOs = '01'.
append it_itab.
*--collect
LOOP AT IT_ITAB.
MOVE IT_ITAB TO ITAB.
COLLECT ITAB.
ENDLOOP.
LOOP AT ITAB.
WRITE : / ITAB-MWSK1, ITAB-KWERT.
ENDLOOP.
Regards,
vasavi.K
‎2006 Jul 09 12:36 PM
hi,
Use Collect....it would work...
kindly reward points.....
data : begin of it_itab occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab.
data : begin of it_itab2 occurs 0,
t_mwsk1 like komv-mwsk1,
t_kwert like komv-kwert,
t_knumh like komv-knumh,
t_kopos like komv-kopos,
end of it_itab2.
LOOP AT it_ITAB1.
clear it_itab2.
move-corresponding it_tab1 to it_itab2.
COLLECT IT_ITAB2.
ENDLOOP
‎2006 Jul 09 2:05 PM
Hi,
sort itab1 by mwsk1.
loop at itab1.
itab2 = itab1.
collect itab2.
endloop.
Regards
Amole
‎2006 Jul 09 3:24 PM
Hi all,
Thank you everyone for your replies. Especially Max, thank you very much for your reply. I think my problem is solved.
‎2006 Jul 09 2:52 PM
Hi Raju,
Consider this code.
REPORT zzarun_1.
TYPES : BEGIN OF str,
t_mwsk1 LIKE komv-mwsk1,
t_kwert LIKE komv-kwert,
t_knumh LIKE komv-knumh,
t_kopos LIKE komv-kopos,
END OF str.
DATA : itab TYPE STANDARD TABLE OF str WITH HEADER LINE,
ifinal TYPE STANDARD TABLE OF str WITH HEADER LINE,
kwert TYPE kwert. "Temp variable to hold the sum
itab-t_mwsk1 = 'A0'.
itab-t_kwert = '100.00'.
itab-t_knumh = 02.
itab-t_kopos = 01.
APPEND itab.
itab-t_mwsk1 = 'E1'.
itab-t_kwert = '200.00'.
itab-t_knumh = 04.
itab-t_kopos = 01.
APPEND itab.
itab-t_mwsk1 = 'A0'.
itab-t_kwert = '400.00'.
itab-t_knumh = 02.
itab-t_kopos = 01.
APPEND itab.
itab-t_mwsk1 = 'E8'.
itab-t_kwert = '900.00'.
itab-t_knumh = 06.
itab-t_kopos = 01.
APPEND itab.
itab-t_mwsk1 = 'E1'.
itab-t_kwert = '600.00'.
itab-t_knumh = 04.
itab-t_kopos = 01.
APPEND itab.
itab-t_mwsk1 = 'A0'.
itab-t_kwert = '000.00'.
itab-t_knumh = 02.
itab-t_kopos = 01.
APPEND itab.
SORT itab BY t_mwsk1.
DELETE ADJACENT DUPLICATES FROM itab
COMPARING ALL FIELDS .
LOOP AT itab.
ifinal-t_knumh = itab-t_knumh.
ifinal-t_kopos = itab-t_kopos.
<b> kwert = kwert + itab-t_kwert.</b>
<b>AT END OF t_mwsk1.</b>
ifinal-t_mwsk1 = itab-t_mwsk1.
ifinal-t_kwert = kwert.
<b> APPEND ifinal.
CLEAR : ifinal, itab, kwert.</b>
ENDAT.
ENDLOOP.
LOOP AT ifinal.
WRITE: / ifinal-t_mwsk1,
ifinal-t_kwert,
ifinal-t_knumh,
ifinal-t_kopos.
ENDLOOP.
Regards,
Arun Sambargi.