2007 Mar 19 3:10 AM
Hello Experts,
I am having a problem modifying a report wherein one of its internal
tables contains around 300,000 lines and it always gives us time limit
exceeded error in prod server. Our time limit is only 10 mins and I
would like to know on how should I go about this. Below is the original
and the revised code. Any inputs would be greatly appreciated. Again,
thank you guys and take care!
Original code:
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_cdpos
FROM cdpos FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas EQ it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
AND tabname = lc_tabname_mcha
AND fname IN (lc_fname_zustd,'LWEDT').
SORT it_cdpos ASCENDING BY objectid changenr.
LOOP AT it_cdpos INTO wa_cdpos.
l_matnr = wa_cdpos-objectid+00(18).
l_charg = wa_cdpos-objectid+22(10).
l_zustd = wa_cdpos-value_new+00(01).
READ TABLE it_batch INTO wa_batch
WITH KEY matnr = l_matnr
charg = l_charg.
IF sy-subrc EQ 0.
l_tabix = sy-tabix.
wa_batch-zustd = l_zustd.
MODIFY it_batch FROM wa_batch INDEX l_tabix
TRANSPORTING zustd.
ELSE.
wa_batch-matnr = l_matnr.
wa_batch-charg = l_charg.
wa_batch-zustd = l_zustd.
wa_batch-code = 'A'. "selected within period
APPEND wa_batch TO it_batch.
ENDIF.
ENDLOOP.
DELETE it_batch WHERE zustd EQ lc_zustd_x.
My version:
TYPES: BEGIN OF t_cdpos,
objectid TYPE cdpos-objectid,
changenr TYPE cdpos-changenr,
value_new TYPE cdpos-value_new,
END OF t_cdpos.
DATA: it_cdpos TYPE SORTED TABLE OF t_cdpos
WITH NON-UNIQUE KEY objectid changenr.
FIELD-SYMBOLS: <fs_cdpos> LIKE LINE OF it_cdpos.
SELECT objectid changenr value_new
FROM cdpos
INTO TABLE it_cdpos
FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas EQ it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
AND tabname = lc_tabname_mcha
AND fname IN (lc_fname_zustd,'LWEDT').
DELETE it_cdpos WHERE value_new+00(01) = 'X'.
LOOP AT it_cdpos ASSIGNING <fs_cdpos>.
l_matnr = <fs_cdpos>-objectid+00(18).
l_charg = <fs_cdpos>-objectid+22(10).
l_zustd = <fs_cdpos>-value_new+00(01).
wa_batch-matnr = l_matnr.
wa_batch-charg = l_charg.
wa_batch-zustd = l_zustd.
wa_batch-code = 'A'.
APPEND wa_batch TO it_batch.
CLEAR wa_batch.
ENDLOOP.
***Also, do you think the original and modified code will give the same result?
Hello Experts,
I am having a problem modifying a report wherein one of its internal
tables contains around 300,000 lines and it always gives us time limit
exceeded error in prod server. Our time limit is only 10 mins and I
would like to know on how should I go about this. Below is the original
and the revised code. Any inputs would be greatly appreciated. Again,
thank you guys and take care!
Original code:
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_cdpos
FROM cdpos FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas EQ it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
AND tabname = lc_tabname_mcha
AND fname IN (lc_fname_zustd,'LWEDT').
SORT it_cdpos ASCENDING BY objectid changenr.
LOOP AT it_cdpos INTO wa_cdpos.
l_matnr = wa_cdpos-objectid+00(18).
l_charg = wa_cdpos-objectid+22(10).
l_zustd = wa_cdpos-value_new+00(01).
READ TABLE it_batch INTO wa_batch
WITH KEY matnr = l_matnr
charg = l_charg.
IF sy-subrc EQ 0.
l_tabix = sy-tabix.
wa_batch-zustd = l_zustd.
MODIFY it_batch FROM wa_batch INDEX l_tabix
TRANSPORTING zustd.
ELSE.
wa_batch-matnr = l_matnr.
wa_batch-charg = l_charg.
wa_batch-zustd = l_zustd.
wa_batch-code = 'A'. "selected within period
APPEND wa_batch TO it_batch.
ENDIF.
ENDLOOP.
DELETE it_batch WHERE zustd EQ lc_zustd_x.
My version:
TYPES: BEGIN OF t_cdpos,
objectid TYPE cdpos-objectid,
changenr TYPE cdpos-changenr,
value_new TYPE cdpos-value_new,
END OF t_cdpos.
DATA: it_cdpos TYPE SORTED TABLE OF t_cdpos
WITH NON-UNIQUE KEY objectid changenr.
FIELD-SYMBOLS: <fs_cdpos> LIKE LINE OF it_cdpos.
SELECT objectid changenr value_new
FROM cdpos
INTO TABLE it_cdpos
FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas EQ it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
AND tabname = lc_tabname_mcha
AND fname IN (lc_fname_zustd,'LWEDT').
DELETE it_cdpos WHERE value_new+00(01) = 'X'.
LOOP AT it_cdpos ASSIGNING <fs_cdpos>.
l_matnr = <fs_cdpos>-objectid+00(18).
l_charg = <fs_cdpos>-objectid+22(10).
l_zustd = <fs_cdpos>-value_new+00(01).
wa_batch-matnr = l_matnr.
wa_batch-charg = l_charg.
wa_batch-zustd = l_zustd.
wa_batch-code = 'A'.
APPEND wa_batch TO it_batch.
CLEAR wa_batch.
ENDLOOP.
***Also, do you think the original and modified code will give the same result?
2007 Mar 19 3:16 AM
hI,
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_cdpos
FROM cdpos FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas EQ it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
AND tabname = lc_tabname_mcha
AND fname IN (lc_fname_zustd,'LWEDT').
Avoid this and use CHANGE_DOCUMENT_READ
or search for fm CHANGE*DOCUMENT*RANGE* in se37
aRs
2007 Mar 19 4:29 AM
Hi,
You can use the following fun modules instead of using select statements for CDHDR and CDPOS tables:
CHANGEDOCUMENT_READ_HEADERS
CHANGEDOCUMENT_READ_POSITIONS
Ask your basis person to increase time Limit (from 10 minutes)for execution to more time to avoid run time error.
But generally 10 minutes is good time. If you wants run the report for more than 3 minutes you have to schedule it in background, that will be better instead of running in foreground, instead of wasting system resources.
reward if useful.
Regards,
Anji
| User | Count |
|---|---|
| 5 | |
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |