‎2007 Jun 26 3:21 PM
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.
‎2007 Jun 26 3:28 PM
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.
‎2007 Jun 26 4:48 PM
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