11-07-2007 6:40 AM
hi all,
i have written code .....
SELECT DISTINCT M1VKBUR M1KUNNR M1VBELN M1BSTNK M1AUDAT M1KNUMV M2NETWR M2MWSBP M3ERDAT M3FKART
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM VBAK AS M1 INNER JOIN VBRP AS M2
ON M1VBELN = M2AUBEL
INNER JOIN VBRK AS M3 ON M2VBELN = M3VBELN
WHERE M1~VKBUR IN VKBUR
AND M3~ERDAT IN ERDAT
AND M1~KUNNR IN KUNNR
AND M3~FKART IN FKART .
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN .
LOOP AT ITAB .
SELECT KAWRT KBETR INTO CORRESPONDING FIELDS OF TABLE ITAB2 FROM KONV
WHERE KNUMV = ITAB-KNUMV
AND KSCHL IN ('SKTO' , 'INV1') .
MODIFY ITAB2 INDEX SY-TABIX TRANSPORTING KAWRT KBETR .
ENDLOOP .
********************************************************************
LOOP AT ITAB2 .
ITAB-CD_AMT = ITAB2-KAWRT * ITAB2-KBETR / 10 .
ITAB-AMT_DUE = ITAB-NETWR + ITAB-MWSBP - ITAB-CD_AMT .
MODIFY ITAB INDEX SY-TABIX TRANSPORTING CD_AMT AMT_DUE .
ENDLOOP .
problem is that i m not getting values in itab2 at end of itab, its going to delete after completing last itab value of KNUMV.
can anybody help me its urgent .
thanks in advance .
Anil .
11-07-2007 6:46 AM
Hi Anil..
There are some corrections needed in ur Code..
Check the modified code: Changes in BOLD
SELECT DISTINCT M1VKBUR M1KUNNR M1VBELN M1BSTNK M1AUDAT M1KNUMV M2NETWR M2MWSBP M3ERDAT M3FKART
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM VBAK AS M1 INNER JOIN VBRP AS M2
ON M1VBELN = M2AUBEL
INNER JOIN VBRK AS M3 ON M2VBELN = M3VBELN
WHERE M1~VKBUR IN VKBUR
AND M3~ERDAT IN ERDAT
AND M1~KUNNR IN KUNNR
AND M3~FKART IN FKART .
<b>SORT ITAB BY VBELN.</b>
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN .
<b>IF ITAB[] IS NOT INITIAL.</b>
SELECT KAWRT KBETR INTO CORRESPONDING FIELDS OF TABLE ITAB2
FROM KONV
<b>FOR ALL ENTRIES IN ITAB</b>
WHERE KNUMV = ITAB-KNUMV
AND KSCHL IN ('SKTO' , 'INV1') .
<b>ENDIF.</b>
********************************************************************
LOOP AT ITAB2 .
ITAB-CD_AMT = ITAB2-KAWRT * ITAB2-KBETR / 10 .
ITAB-AMT_DUE = ITAB-NETWR + ITAB-MWSBP - ITAB-CD_AMT .
MODIFY ITAB INDEX SY-TABIX TRANSPORTING CD_AMT AMT_DUE .
ENDLOOP .
Now it works properly.. And with better performance.
Note: Avoid using CORRESPONDING FIELDS option in the SELECT when the Internal table structure is same as the Fields selected.
<b>Reward if Helpful.</b>
11-07-2007 6:48 AM
Hi,
Try this..instead of into..try appending..and remove the modify statement..
LOOP AT ITAB .
SELECT KAWRT KBETR APPENDING CORRESPONDING FIELDS OF TABLE ITAB2 FROM KONV
WHERE KNUMV = ITAB-KNUMV
AND KSCHL IN ('SKTO' , 'INV1') .
ENDLOOP .
Thanks
Naren
11-07-2007 6:51 AM
Hi Anil,
within loop of itab u are modifying the itab2. how can it work?
Pls change it. again within itab2 loop u r modifying the itab. Change the code.
Instead of using the above code. u store the pricing data separately in itab2.
And use READ TABLE statement within itab loop & modify the same.
That will work fine.
Ex.
select vbak & vbrp data store it in itab.
then
select konv data into itab2.
then
loop at itab.
read table itab2 with key knumv = itab-knumv.
if sy-subrc = 0.
itab-KAWRT = itab2-KAWRT.
itab-KBETR = itab2-kbetr.
modify itab.
endif.
endloop.
LOOP AT ITAB .
ITAB-CD_AMT = ITAB-KAWRT * ITAB-KBETR / 10 .
ITAB-AMT_DUE = ITAB-NETWR + ITAB-MWSBP - ITAB-CD_AMT .
MODIFY ITAB INDEX SY-TABIX TRANSPORTING CD_AMT AMT_DUE .
ENDLOOP .
reward it if it is helpfull.
regards
Srimanta
11-07-2007 7:00 AM
Hi friend before using delete adjacent duplicate ,always sort the itab by any of the fields.
also use work area ... and try this...
Data: wa_itab like line of itab,
wa_itab2 like line of itab2.
sort itab by KNUMV." *(or use ur own fields)
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN .
LOOP AT ITAB into wa_itab.
SELECT KAWRT KBETR INTO wa_itab2-KAWRT wa_itab2-KBETR FROM KONV
WHERE KNUMV = wa_ITAB-KNUMV
AND KSCHL IN ('SKTO' , 'INV1') .
MODIFY ITAB2 from wa_itab2 INDEX SY-TABIX TRANSPORTING KAWRT KBETR .
ENDLOOP .