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

How to stop runtime error: time limit exceeded...

aris_hidalgo
Contributor
0 Likes
1,121

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?

2 REPLIES 2
Read only

former_member194669
Active Contributor
0 Likes
656

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

Read only

Former Member
0 Likes
656

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