Application Development 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: 

URGENT-- Data is going to delete after end of loop .

Former Member
0 Kudos

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 .

4 REPLIES 4

varma_narayana
Active Contributor
0 Kudos

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>

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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 .