‎2008 Jan 08 8:03 AM
Please guide me alternate option for below set of code:
LOOP AT ITAB1 WHERE DISC LT 0.
SELECT * FROM KONV WHERE KNUMV EQ ITAB1-KNUMV AND
KPOSN EQ ITAB1-POSNR AND
KSTEU EQ 'C'.
IF SY-SUBRC EQ 0.
ITAB1-FREE_INDI = 'Y'.
EXIT.
ENDIF.
ENDSELECT.
MODIFY ITAB1 TRANSPORTING FREE_INDI.
ENDLOOP.
*How to merge into one loop :
LOOP AT ITAB1.
IF ITAB1-FREE_MATL NE ''.
ITAB1-FREE_INDI = 'Y'.
MODIFY ITAB1.
GTEST = ITAB1-POSNR - 10.
READ TABLE ITAB1 WITH KEY SAL_ORD_NUM = ITAB1-SAL_ORD_NUM
POSNR = GTEST.
ITAB1-FREE_MATL = 'X'.
MODIFY ITAB1 TRANSPORTING FREE_MATL WHERE
SAL_ORD_NUM = ITAB1-SAL_ORD_NUM AND POSNR EQ GTEST.
CLEAR GTEST.
ENDIF.
ENDLOOP.
LOOP AT ITAB1 WHERE FREE_INDI EQ 'Y'.
IF ITAB1-UEPOS EQ G_UEPOS.
CLEAR ITAB1-FREE_INDI.
MODIFY ITAB1.
ENDIF.
MOVE ITAB1-UEPOS TO G_UEPOS.
ENDLOOP.
Thanx & Regrds.
Vijay...
‎2008 Jan 08 8:12 AM
Hi, instead of using select statement inside the Loop, use read statement.
Example,
SELECT * FROM KONV into table itab_konv.(at first)
Loop at itab.
read table itab_konv with key knumv = itab1-knumv kposn = itab1-posnr ksteu = 'C'.
endloop.
try this way
‎2008 Jan 08 8:18 AM
Hi Vijay,
Remove select query inside the loop and do like this
Types: begin of ty_konv,
knumv type konv-knumv,
kposn type konv-kposn,
end of ty_konv.
Data: it_knov type table of ty_konv,
wa_konv type ty_konv.
SELECT * FROM KONV into table it_konv for all entries in itab1 WHERE KNUMV EQ ITAB1-KNUMV AND
KPOSN EQ ITAB1-POSNR AND
KSTEU EQ 'C'.
sort it_konv by knumv kposn.
LOOP AT ITAB1 WHERE DISC LT 0.
read table it_konv into wa_konv with key knumv = itab1-knumv kposn = itab1-posnr binary search.
IF SY-SUBRC EQ 0.
ITAB1-FREE_INDI = 'Y'.
EXIT.
ENDIF.
MODIFY ITAB1 TRANSPORTING FREE_INDI.
ENDLOOP.
Regards,
Satish
‎2008 Jan 08 8:32 AM
Thank you sathis.
Now am trying this code but it says ,
"The field "IT_KONV" is unknown, but there is a field with the similar"
what happen in this sathis?
Vijay.
‎2008 Jan 08 8:46 AM
Hi Vijay,
While declaring i have given it_knov, change it to it_konv you problem will get solved.
Regards,
Satish
‎2008 Jan 08 12:11 PM
Thank u dear sathis..
I used u r code but it says " The work Area 'IT-KONV' IS LONGER ENOUGH...
Here what can i do sathis..
Thanks & Regds.
Vijay.
‎2008 Jan 08 12:13 PM
Sorry for my prev msg...
Thank u dear sathis..
I used u r code but it says " The work Area 'IT-KONV' IS NOT LONGER ENOUGH...
Here what can i do sathis..
Thanks & Regds.
Vijay.
‎2008 Jan 08 8:29 AM
vijay,
DATA : Begin of i_konv occurs 0.
knumv LIKE KONV-knumv,
END OF i_KONV.
IF NOT itab1[] IS INITIAL.
SELECT knumv FROM KONV
INTO TABLE i_konv
FOR ALL ENTRIES IN itab1
WHERE KNUMV EQ ITAB1-KNUMV AND
KPOSN EQ ITAB1-POSNR AND
KSTEU EQ 'C'.
ENDIF.
LOOP AT ITAB1 WHERE DISC LT 0.
LOOP AT i_konv WHERE
KNUMV EQ ITAB1-KNUMV AND
KPOSN EQ ITAB1-POSNR AND
KSTEU EQ 'C'.
IF sy-subrc EQ 0.
ITAB1-FREE_INDI = 'Y'.
CONTINUE.
ENDIF.
MODIFY ITAB1 TRANSPORTING FREE_INDI.
ENDLOOP.
ENDLOOP.
Don't forget to reward if useful....
‎2008 Jan 08 8:40 AM
Hi Vijay,
The alternative method for ur problem is.
select * from konv into table gt_tab where knumv eq itab-knumv and kposn eq itab1-posnr and ksteu eq 'C' and itab1-disc lt 0.
IF SY-SUBRC EQ 0.
ITAB1-FREE_INDI = 'Y'.
ENDIF.
modify gt_tab.
2. MERGE INTO SINGLE LOOP.
LOOP AT ITAB1.
IF ITAB1-FREE_MATL NE ''.
ITAB1-FREE_INDI = 'Y'.
MODIFY ITAB1.
GTEST = ITAB1-POSNR - 10.
READ TABLE ITAB1 WITH KEY SAL_ORD_NUM = ITAB1-SAL_ORD_NUM
POSNR = GTEST.
ITAB1-FREE_MATL = 'X'.
MODIFY ITAB1 TRANSPORTING FREE_MATL WHERE
SAL_ORD_NUM = ITAB1-SAL_ORD_NUM AND POSNR EQ GTEST.
CLEAR GTEST.
ENDIF.
IF ITAB1-UEPOS EQ G_UEPOS AND FREE_INDI EQ 'Y'..
CLEAR ITAB1-FREE_INDI.
MODIFY ITAB1.
MOVE ITAB1-UEPOS TO G_UEPOS.
ENDIF.
ENDLOOP.
Award points if helpful.
Kiran Kumar.G
Have a Nice Day..
‎2008 Jan 08 12:25 PM
_How to Optimize this Code_
FORM MATL_CODE_DESC.
SELECT * FROM VBAK WHERE VKORG EQ SAL_ORG AND
VBELN IN VBELN AND
VTWEG IN DIS_CHN AND
SPART IN DIVISION AND
VKBUR IN SAL_OFF AND
VBTYP EQ 'C' AND
KUNNR IN KUNNR AND
ERDAT BETWEEN DAT_FROM AND DAT_TO.
SELECT * FROM VBAP WHERE VBELN EQ VBAK-VBELN AND
MATNR IN MATNR.
SELECT SINGLE * FROM MAKT WHERE MATNR EQ VBAP-MATNR.
IF SY-SUBRC EQ 0.
IF ( VBAP-NETWR EQ 0 AND VBAP-UEPOS NE 0 ).
IF ( VBAP-UEPVW NE 'B' AND VBAP-UEPVW NE 'C' ).
MOVE VBAP-VBELN TO ITAB1-SAL_ORD_NUM.
MOVE VBAP-POSNR TO ITAB1-POSNR.
MOVE VBAP-MATNR TO ITAB1-FREE_MATL.
MOVE VBAP-KWMENG TO ITAB1-FREE_QTY.
MOVE VBAP-KLMENG TO ITAB1-KLMENG.
MOVE VBAP-VRKME TO ITAB1-FREE_UNIT.
MOVE VBAP-WAVWR TO ITAB1-FREE_VALUE.
MOVE VBAK-VTWEG TO ITAB1-VTWEG.
MOVE VBAP-UEPOS TO ITAB1-UEPOS.
ENDIF.
ELSE.
MOVE VBAK-VBELN TO ITAB1-SAL_ORD_NUM.
MOVE VBAK-VTWEG TO ITAB1-VTWEG.
MOVE VBAK-ERDAT TO ITAB1-SAL_ORD_DATE.
MOVE VBAK-KUNNR TO ITAB1-CUST_NUM.
MOVE VBAK-KNUMV TO ITAB1-KNUMV.
SELECT SINGLE * FROM KONV WHERE KNUMV EQ VBAK-KNUMV AND
KSTEU = 'C' AND
KHERK EQ 'A' AND
KMPRS = 'X'.
IF SY-SUBRC EQ 0.
ITAB1-REMARKS = 'Manual Price Change'.
ENDIF.
SELECT SINGLE * FROM KONV WHERE KNUMV EQ VBAK-KNUMV AND
KSTEU = 'C' AND
KHERK IN ('C','D') AND
KMPRS = 'X' AND
KRECH IN ('A','B').
IF SY-SUBRC EQ 0.
IF KONV-KRECH EQ 'A'.
MOVE : KONV-KSCHL TO G_KSCHL.
G_KBETR = ( KONV-KBETR / 10 ).
MOVE G_KBETR TO G_KBETR1.
CONCATENATE G_KSCHL G_KBETR1 '%'
INTO ITAB1-REMARKS SEPARATED BY SPACE.
ELSEIF KONV-KRECH EQ 'B'.
MOVE : KONV-KSCHL TO G_KSCHL.
G_KBETR = KONV-KBETR.
MOVE G_KBETR TO G_KBETR1.
CONCATENATE G_KSCHL G_KBETR1
INTO ITAB1-REMARKS SEPARATED BY SPACE.
ENDIF.
ELSE.
ITAB1-REMARKS = 'Manual Price Change'.
ENDIF.
CLEAR : G_KBETR, G_KSCHL,G_KBETR1.
MOVE VBAP-KWMENG TO ITAB1-QTY.
MOVE VBAP-VRKME TO ITAB1-QTY_UNIT.
IF VBAP-UMVKN NE 0.
ITAB1-KLMENG = ( VBAP-UMVKZ / VBAP-UMVKN ) * VBAP-KWMENG.
ENDIF.
IF ITAB1-KLMENG NE 0.
VBAP-NETWR = ( VBAP-NETWR / VBAP-KWMENG ).
MOVE VBAP-NETWR TO ITAB1-INV_PRICE.
ENDIF.
MOVE VBAP-POSNR TO ITAB1-POSNR.
MOVE VBAP-MATNR TO ITAB1-MATNR.
MOVE MAKT-MAKTX TO ITAB1-MAKTX.
ENDIF.
SELECT SINGLE * FROM VBKD WHERE VBELN EQ VBAK-VBELN AND
BSARK NE 'DFUE'.
IF SY-SUBRC EQ 0.
ITAB1-INV_PRICE = ITAB1-INV_PRICE * VBKD-KURSK.
APPEND ITAB1.
CLEAR ITAB1.
ELSE.
CLEAR ITAB1.
ENDIF.
ENDIF.
ENDSELECT.
ENDSELECT.
ENDFORM. " MATL_CODE_DESC
Edited by: Vijay kumar on Jan 8, 2008 6:50 PM