‎2007 Jan 27 5:31 AM
Hello Guys,
Following Code is there , Performance is very low.
Any hint. to improve the Performance..
Regards
Swati..
SELECT budat arbid werks wablnr aufnr FROM afru
INTO CORRESPONDING FIELDS OF TABLE it_afru
WHERE werks = s_werks AND budat IN s_dt.
IF s_arbpl-low NE '' .
SELECT objid arbpl FROM crhd
INTO CORRESPONDING FIELDS OF TABLE it_crhd
FOR ALL ENTRIES IN it_afru
WHERE objid = it_afru-arbid AND arbpl IN s_arbpl.
LOOP AT it_afru.
READ TABLE it_crhd WITH KEY objid = it_afru-arbid.
IF sy-subrc = 0.
it_afru-arbpl = it_crhd-arbpl.
MODIFY it_afru.
ENDIF.
ENDLOOP.
ENDIF.
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks AND matnr IN s_matnr
AND bwart = '101' .
IF sy-subrc = 0.
ENDIF.
FURNACE OIL
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm_f
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '261' OR bwart = '201'.
" and matnr = 'SSOLFO0001'. " and mblnr = it_afru-wablnr. " matnr in s_matnr. "
IF sy-subrc = 0.
ENDIF.
Dross and process Scrap
SELECT mblnr matnr erfmg aufnr FROM mseg
INTO CORRESPONDING FIELDS OF TABLE it_mseg
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '552' AND matnr = 'NISCAD0001'
OR matnr = 'NISCBD001' or matnr = 'RMSRPS0001'. " and matnr in s_matnr. and mblnr = it_afru-wablnr."
‎2007 Jan 27 9:07 AM
HI,
In the code modify these Select stmts into one:
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks AND matnr IN s_matnr
AND bwart = '101' .
IF sy-subrc = 0.
ENDIF.
FURNACE OIL
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm_f
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '261' OR bwart = '201'.
SELECT mblnr matnr erfmg aufnr FROM mseg
INTO CORRESPONDING FIELDS OF TABLE it_mseg
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '552' AND matnr = 'NISCAD0001'
OR matnr = 'NISCBD001' or matnr = 'RMSRPS0001'.
to:
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks <b> IN </b> s_werks AND matnr IN s_matnr
<b> "use IN if s_werks is select-options </b>
AND bwart in ( '101' , '261', '201' , '552' ) .
IF sy-subrc = 0.
ENDIF.
Then: you can delete the entries from the internal table as:
it_aufm_f[] = it_aufm[].
it_mseg[] = it_aufm[].
DELETE it_aufm_f where bwart not in ( '261' , '201' ).
delete it_aufm where bwart not in ( '101' ).
delete it_mseg where bwart not in ( '552' ).
Then further you can filter on material numbers.
Regards
Subramanian
‎2007 Jan 27 5:36 AM
‎2007 Jan 27 5:47 AM
first thing which i can understand you have to check it_afru is initial or not before using for all entries. because if it_afru is initial all the data will be fetch.
secondly
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm_f
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND ( bwart = '261' OR bwart = '201' ).
" and matnr = 'SSOLFO0001'. " and mblnr = it_afru-wablnr. " matnr in s_matnr. "
and third
SELECT mblnr matnr erfmg aufnr FROM mseg
INTO CORRESPONDING FIELDS OF TABLE it_mseg
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '552' AND ( matnr = 'NISCAD0001'
OR matnr = 'NISCBD001' or matnr = 'RMSRPS0001' ). " and matnr in s_matnr. and mblnr = it_afru-wablnr."
it may increase your performance. just try that.
regards
shiba dutta
‎2007 Jan 27 6:11 AM
You have to do 2 changes in your query.
1) In place of "into corresponding fields" Use "Appending corresponding fields of table".
2) Don't use "For all entries command as it will drastically reduce the performance.
Pls use 'Loop at Itab" in place of "For all entries".
I hope this will improve your performance.
‎2007 Jan 27 9:07 AM
HI,
In the code modify these Select stmts into one:
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks AND matnr IN s_matnr
AND bwart = '101' .
IF sy-subrc = 0.
ENDIF.
FURNACE OIL
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm_f
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '261' OR bwart = '201'.
SELECT mblnr matnr erfmg aufnr FROM mseg
INTO CORRESPONDING FIELDS OF TABLE it_mseg
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks = s_werks
AND bwart = '552' AND matnr = 'NISCAD0001'
OR matnr = 'NISCBD001' or matnr = 'RMSRPS0001'.
to:
SELECT mblnr matnr charg erfmg aufnr FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afru WHERE
aufnr = it_afru-aufnr AND werks <b> IN </b> s_werks AND matnr IN s_matnr
<b> "use IN if s_werks is select-options </b>
AND bwart in ( '101' , '261', '201' , '552' ) .
IF sy-subrc = 0.
ENDIF.
Then: you can delete the entries from the internal table as:
it_aufm_f[] = it_aufm[].
it_mseg[] = it_aufm[].
DELETE it_aufm_f where bwart not in ( '261' , '201' ).
delete it_aufm where bwart not in ( '101' ).
delete it_mseg where bwart not in ( '552' ).
Then further you can filter on material numbers.
Regards
Subramanian