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

performane tuning

Former Member
0 Likes
422

hi,

can any one help me out in increasing the performance of the following code,

plz help me out in increasing the performance of the following code.

regards.

SELECT mara~matnr marc~werks mara~mtart mara~matkl mara~meins

marc~dismm marc~dispo marc~disgr marc~mmsta marc~perkz

marc~periv

FROM mara

INNER JOIN marc

ON mara~matnr = marc~matnr

INTO CORRESPONDING FIELDS OF TABLE it_alv

WHERE mara~matnr IN so_matnr

AND mara~matkl IN so_matkl

AND mara~mtart IN so_mtart

AND marc~werks IN so_werks

AND marc~disgr IN so_disgr

AND marc~dismm IN so_dismm

AND marc~dispo IN so_dispo.

DESCRIBE TABLE it_alv LINES w_nbitems.

l_count = 0.

LOOP AT it_alv INTO is_alv.

l_tabix = sy-tabix.

l_count = l_count + 1.

PERFORM sr_progress_bar USING l_count

w_nbitems

text-m02.

  • Read last stock movement for selected material

SELECT mkpf~budat mkpf~mblnr mkpf~mjahr mseg~zeile mseg~bwart

mseg~menge mseg~kostl mkpf~usnam mseg~wempf

UP TO 1 ROWS

FROM mseg

JOIN mkpf

ON mkpf~mblnr = mseg~mblnr

AND mkpf~mjahr = mseg~mjahr

INTO (is_alv-budat, is_alv-mblnr, is_alv-mjahr, is_alv-zeile,

is_alv-bwart, is_alv-menge, is_alv-kostl, is_alv-usnam,

is_alv-wempf)

WHERE mseg~matnr = is_alv-matnr

AND mseg~werks = is_alv-werks

AND mseg~bwart IN so_bwart

ORDER BY MKPF~BUDAT descending.

ENDSELECT.

IF is_alv-budat >= w_startdate. " OR is_alv-budat IS INITIAL.

DELETE it_alv INDEX l_tabix.

CONTINUE.

ENDIF.

  • Retrieve material description

SELECT SINGLE maktx

FROM makt

INTO is_alv-maktx

WHERE matnr = is_alv-matnr

AND spras = sy-langu.

  • Sums different stock quantities for all storage locations

SELECT *

FROM mard

INTO TABLE it_mard

WHERE matnr = is_alv-matnr

AND werks = is_alv-werks.

LOOP AT it_mard INTO is_mard.

is_alv-labst = is_alv-labst + is_mard-labst.

is_alv-umlme = is_alv-umlme + is_mard-umlme.

is_alv-insme = is_alv-insme + is_mard-insme.

is_alv-einme = is_alv-einme + is_mard-einme.

is_alv-speme = is_alv-speme + is_mard-speme.

is_alv-retme = is_alv-retme + is_mard-retme.

ENDLOOP.

  • Currency for valuated stock

SELECT SINGLE t001~waers

FROM t001k

INNER JOIN t001

ON t001k~bukrs = t001~bukrs

INTO is_alv-waers

WHERE t001k~bwkey = is_alv-werks.

SELECT SINGLE *

FROM mbew

WHERE matnr = is_alv-matnr

AND bwkey = is_alv-werks.

IF sy-subrc = 0.

is_alv-stprs = mbew-stprs.

is_alv-peinh = mbew-peinh.

ENDIF.

is_alv-labst_einme = is_alv-labst + is_alv-einme.

is_alv-othme = is_alv-umlme + is_alv-retme.

is_alv-lbkum = is_alv-labst + is_alv-umlme + is_alv-insme +

is_alv-einme + is_alv-speme + is_alv-retme.

*>>> BEGIN OF MODIFICATION CPE " SBDK919741

  • Total valuated stock = total stock * Standard price / price unit

  • is_alv-salk3 = is_alv-lbkum * is_alv-stprs.

is_alv-salk3 = is_alv-lbkum * is_alv-stprs / is_alv-peinh.

2 REPLIES 2
Read only

Former Member
0 Likes
394

hi,

Remove joins and use FOR ALL ENTERIES.

use select single not select upto 1 row

remove "INTO CORRESPONDING FIELDS OF" and use "INTO TABLE OF" and select the fields in the order that u declared for internal table.

Read only

Former Member
0 Likes
394

First, make sure that so_matnr is not empty before doing the select. If it is empty, it will have problems using the index.

Get rid of the call to sr_progress_bar for every material. If you do it every 10%, that will be more than enough.

You are doing a number of selects within a loop on it_alv. Try changing that to FOR ALL ENTRIES.

Rob