Application Development and Automation 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: 
Read only

Performance tuning issues........

Former Member
0 Likes
1,015

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...

9 REPLIES 9
Read only

Former Member
0 Likes
972

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

Read only

Former Member
0 Likes
972

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

Read only

0 Likes
972

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.

Read only

0 Likes
972

Hi Vijay,

While declaring i have given it_knov, change it to it_konv you problem will get solved.

Regards,

Satish

Read only

0 Likes
972

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.

Read only

0 Likes
972

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.

Read only

Former Member
0 Likes
972

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....

Read only

Former Member
0 Likes
972

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..

Read only

Former Member
0 Likes
972

_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