‎2008 May 27 12:04 PM
hi,
data :begin of itab3 occurs 0,
matnr type matnr,
werks type werks,
lgort type lgort_g,
qty type menge_d,
end of itab3.
loop at itab_mard.
loop at itab_mchb where matnr = itab_mard-matnr and
werks = itab_mard-werks and
lgort = itab_mard-lgort.
lv_qty = lv_qty + itab_mchb-qty.
endloop.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort_g.
itab3-qty = lv_qty.
append itab3.
clear lv_qty.
endloop.
In the above code how can avoid nested loop.
‎2008 May 27 12:11 PM
‎2008 May 27 12:14 PM
data :begin of itab3 occurs 0,
matnr type matnr,
werks type werks,
lgort type lgort_g,
qty type menge_d,
end of itab3.
loop at itab_mard.
For all entries in itab_mchb where matnr = itab_mard-matnr and
werks = itab_mard-werks and
lgort = itab_mard-lgort.
lv_qty = lv_qty + itab_mchb-qty.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort_g.
itab3-qty = lv_qty.
append itab3.
clear lv_qty.
endloop.
Regards,
Jagadish
‎2008 May 27 12:15 PM
Hi Ramya,
you can use for all entries as our friend said but be carefull while using it
either in the select clause you should have complete key or else in where clause you should have complete key or else you will get some unexpected results..
if u have still quiries u can contact me
for more details see my business card..
Regards
Sunil Kumar Mutyala....
‎2008 May 27 12:15 PM
Hi,
sort itab_mard by matnr.
loop at itab_mard.
move-corresponding itab_mard to itab3.
collect itab3.
endloop.
since menge is the only quantity filed it will be added ...
regards,
lavanya
‎2008 May 27 12:29 PM
Hi Ramya,
try this:
DATA:
BEGIN OF key_mard,
matnr LIKE mard-matnr,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
END OF key_mard,
BEGIN OF key_mchb,
matnr LIKE mchb-matnr,
werks LIKE mchb-werks,
lgort LIKE mchb-lgort,
END OF key_mchb,
ind TYPE i.
SORT itab_mard BY matnr werks lgort.
SORT itab_mchb BY matnr werks lgort.
CLEAR itab_mard.
LOOP AT itab_mchb.
MOVE-CORRESPONDING itab_mchb TO key_mchb.
MOVE-CORRESPONDING itab_mard TO key_mard.
IF key_mard < key_mchb.
IF NOT key_mard IS INITIAL.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort_g.
itab3-qty = lv_qty.
append itab3.
clear lv_qty.
ENDIF.
ind = ind + 1.
READ TABLE itab_mard INDEX ind.
CONTINUE.
ENDIF.
lv_qty = lv_qty + itab_mchb-qty.
ENDLOOP.
IF NOT key_mard IS INITIAL.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort_g.
itab3-qty = lv_qty.
append itab3.
ENDIF.
regards
Walter Habich
Edited by: Walter Habich on May 27, 2008 1:34 PM
‎2008 May 27 12:32 PM
Hi Ramya,
If u have Nested loops then use PARALLEL CURSOR method. This is more efficient method.
Please check this link for Parallel Cursor Method.
http://www.saptechnical.com/Tutorials/ABAP/ParallelCursor.htm
Best regards,
raam
‎2008 May 27 12:35 PM
Try something like
SORT itab_mchb BY matnr werks lgort.
SORT itab_mard BY matnr werks lgort.
LOOP AT itab_mchb.
AT NEW lgort.
CLEAR itab3.
READ TABLE itab_mard
WITH KEY matnr = itab_mchb-matnr
werks = itab_mchb-werks
lgort = itab_mchb-lgort
BINARY SEARCH.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort.
ENDAT.
ADD itab_mchb-qty TO itab3-qty.
AT END OF lgort.
APPEND itab3.
ENDAT.
ENDLOOP.Regards
‎2008 May 27 1:00 PM
Hi Ramya,
You can use this -
create an internal table lt_itabqty and lt_totqty with struct
matnr.
werks.
lgort
qty
move itab_mard[] to lt_itabqty[]. (if matnr werks lgort qty are the 1st 4 fields) else you'll have to use move-corresponding.
loop at lt_itabqty.
collect lt_itabqty into lt_totqty.
endloop.
-
loop at itab_mard.
read table lt_itabqty with key matnr = itab_mard-matnr
werks = itab_mard-werks
lgort = itab_mard-lgort.
itab3-matnr = itab_mard-matnr.
itab3-werks = itab_mard-werks.
itab3-lgort = itab_mard-lgort_g.
itab3-qty = lt_itabqty-qty.
append itab3.
clear lv_qty.
endloop.
-
This way you can eliminate 1 loop completely.
Reward points if found useful
Regards
Megha
‎2008 May 27 1:07 PM
Hi,
You can use parallel cursor method.
Conventional Code for nested loops
Conventional Method
-
loop at lt_vbpa into wa_vbpa.
loop at lt_kna1 into wa_kna1 where kunnr = wa_vbpa-kunnr.
Your Actual logic within inner loop ******
endloop.
endloop.
Code sample: Parallel Cursor method
Preferred Method
sort: lt_vbpa by kunnr, "Sorting by key is very important
lt_kna1 by kunnr. "Same key which is used for where condition is used here
loop at lt_vbpa into wa_vbpa.
read lt_kna1 into wa_kna1 " This sets the sy-tabix
with key kunnr = wa_vbpa-kunnr
binary search.
if sy-subrc = 0. "Does not enter the inner loop
v_kna1_index = sy-tabix.
loop at lt_kna1 into wa_kna1 from v_kna1_index. "Avoiding Where clause
if wa_kna1-kunnr <> wa_vbpa-kunnr. "This checks whether to exit out of loop
exit.
endif.
Your Actual logic within inner loop ******
endloop. "KNA1 Loop
endif.
endloop. " VBPA Loop
‎2008 May 27 1:07 PM
Conventional Code for nested loops
Conventional Method
loop at lt_vbpa into wa_vbpa.
loop at lt_kna1 into wa_kna1 where kunnr = wa_vbpa-kunnr.
Your Actual logic within inner loop ******
endloop.
endloop.
Code sample: Parallel Cursor method
Preferred Method
sort: lt_vbpa by kunnr, "Sorting by key is very important
lt_kna1 by kunnr. "Same key which is used for where condition is used here
loop at lt_vbpa into wa_vbpa.
read lt_kna1 into wa_kna1 " This sets the sy-tabix
with key kunnr = wa_vbpa-kunnr
binary search.
if sy-subrc = 0. "Does not enter the inner loop
v_kna1_index = sy-tabix.
loop at lt_kna1 into wa_kna1 from v_kna1_index. "Avoiding Where clause
if wa_kna1-kunnr <> wa_vbpa-kunnr. "This checks whether to exit out of loop
exit.
endif.
Your Actual logic within inner loop ******
endloop. "KNA1 Loop
endif.
endloop. " VBPA Loop