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

optimization of the code

Former Member
0 Likes
493

hi,

plz can suggest to optimize the below code

LOOP AT ibkpf.

DATA v_rate LIKE bset-hwste.

MOVE ibkpf-belnr TO lt_output-belnr.

MOVE ibkpf-awkey TO lt_output-awkey.

MOVE ibkpf-budat TO lt_output-budat.

MOVE ibkpf-blart TO lt_output-blart.

IF ibkpf-blart NE 'EP'.

SELECT SINGLE kschl

INTO (bset-kschl )

FROM bset

WHERE bukrs = ibkpf-bukrs

AND belnr = ibkpf-belnr

AND gjahr = gjahr

AND ( kschl IN zlst OR

kschl IN zcst ).

CHECK sy-subrc = 0.

COMPUTE v_rate = ( bset-hwste / bset-hwbas ) * 100.

IF sy-subrc NE 0.

CLEAR v_rate.

ENDIF.

ENDIF.

SELECT SINGLE vbeln erdat knumv kunag

INTO (vbrk-vbeln,vbrk-erdat,lt_output-knumv,

lt_output-kunag)

FROM vbrk

WHERE vbeln = ibkpf-awkey

AND kunag IN s_kunnr

AND rfbsk = 'C'.

CHECK sy-subrc = 0.

IF sy-subrc <> 0.

CLEAR: lt_output-knumv,lt_output-kunag.

ELSE.

SELECT * FROM vbrp WHERE vbeln = vbrk-vbeln

AND werks = p_werks

AND erdat = vbrk-erdat

AND gsber = p_gsber

AND mvgr3 IN s_mvgr3.

IF sy-subrc EQ 0.

MOVE-CORRESPONDING vbrp TO lt_output.

CONCATENATE lt_output-matnr lt_output-arktx INTO lt_output-fmatnr

SEPARATED BY ' - '.

APPEND lt_output.

MOVE lt_output-knumv TO ttab-knumv.

MOVE vbrk-vbeln TO ttab-vbeln .

MOVE vbrp-mvgr3 TO ttab-mvgr3.

COLLECT ttab.

CLEAR ttab.

ENDIF.

ENDSELECT.

CLEAR lt_output.

ENDIF.

ENDLOOP.

3 REPLIES 3
Read only

Former Member
0 Likes
454

1. Avoid <b>select * from</b> in query, instead of it place the fields sequence whatever you required.

2. avoid <b>MOVE-CORRESPONDING vbrp TO lt_output.</b>. directly get the output from query to it_output.

3.Instead of using MOVE vbrk-vbeln TO ttab-vbeln you can use ttab-vbeln = vbrk-vbeln to improve the perfornance and we have an option to eliminate additional checkings in MOVE stmt.

Read only

Former Member
0 Likes
454

I really don't see a problem with it. Do you?

Rob

Read only

Former Member
0 Likes
454

Hi,

I think the most important for your code is: do not use select single during looping you internal table.

Solution:(For example)

1.Collect data into a local itab first.

loop at ibkpf.

lt_bukrs-bukrs = ibkpf-bukrs.

lt_bukrs-belnr = ibkpf-belnr.

append lt_bukrs.

endloop.

sort lt_bukrs by bukrs belnr. "Distinct itab.

delete adjacent from lt_bukrs comparing bukrs belnr.

2.

check lt_bukrs[] is not initial.

select kschl belnr ....

from bset

into table lt_bset

for all entries in lt_bukrs

WHERE bukrs = lt_bukrs-bukrs

AND belnr = lt_bukrs-belnr

AND gjahr = gjahr

AND ( kschl IN zlst OR

kschl IN zcst ).

3.Read the itab with binary search to double searching speed.

loop at ibkpf.

read table lt_bukrs with key bukrs = ibkpf-bukrs belnr = ibkpf-belnr binary search.

if sy-subrc = 0.

...

endif.

then, modify ibkpf.

endloop.