Application Development 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: 

Extend execution time

Former Member
0 Kudos

HI Experts,

My Zreport takes long time to execute & coz of that I get Time-out error on PRD Server. Is it possible to extend the time alloted to execute the report in SAP. Urgent.

Thanks

Khan

1 ACCEPTED SOLUTION

Former Member
0 Kudos

First of all, replace the first SELECT and LOOP AT customer with a single SELECT, JOINing KNA1 and KNVP. I have no idea why you do three SELECTs on the same tables in that LOOP.

Also, It looks like you don't need BKPF in the other group of SELECTs. Try using just BSID and BSAD.

Rob

7 REPLIES 7

Former Member
0 Kudos

Hi Khan,

do like this.

set in transaction RZ10 in instance profile parameter rdisp\max_wprun_time.

set number of seconds you want to run ABAP programs in dialog. Default is 600 sec. (10 min.)

You have to restart application server to make it working.

or,

How long is your program taking to execute?

Do you get timeout error in ST22?

If so goto SE38 execute the job in background. Or goto SM36 and scedule the job in background.

You can change the max_wp_runtime but if you Program runs for more than 10mins it should really be run in background to improve dialog performance.

Regards

Kiran Sure

Former Member
0 Kudos

Hi Khan,

You can fine tune the program to avoid it ... so paste the piece of code where it is getting timed out ... You can even contact your basis consultant for increasing the memory....

0 Kudos

below is the code where my Programm gets terminated coz of Time - Out

***************************************

SELECT KUNNR INTO CORRESPONDING FIELDS OF TABLE CUSTOMER

FROM KNA1 WHERE KUNNR IN S_KUNNR.

CLEAR DEL.

DEL = SY-SUBRC .

DELETE ADJACENT DUPLICATES FROM CUSTOMER.

IF DEL = 0.

LOOP AT CUSTOMER.

SELECT SINGLE ANAME1 INTO CUSTOMER-NAMESO FROM KNA1 AS A INNER JOIN KNVP AS B ON AKUNNR = B~KUNN2

WHERE BKUNNR = CUSTOMER-KUNNR AND BPARVW = 'ZA'.

SELECT SINGLE ANAME1 INTO CUSTOMER-NAMEAM FROM KNA1 AS A INNER JOIN KNVP AS B ON AKUNNR = B~KUNN2

WHERE BKUNNR = CUSTOMER-KUNNR AND BPARVW = 'ZB'.

SELECT SINGLE ANAME1 INTO CUSTOMER-NAMERM FROM KNA1 AS A INNER JOIN KNVP AS B ON AKUNNR = B~KUNN2

WHERE BKUNNR = CUSTOMER-KUNNR AND BPARVW = 'ZC'.

MODIFY CUSTOMER INDEX SY-TABIX.

CLEAR CUSTOMER.

ENDLOOP.

SELECT ABELNR ABUDAT AGJAHR BKUNNR BSHKZG BDMBTR INTO CORRESPONDING FIELDS OF TABLE ITABO_BSID

FROM BKPF AS A INNER JOIN BSID AS B ON ABELNR = BBELNR AND AGJAHR EQ BGJAHR

AND AMANDT = BMANDT AND ABUKRS = BBUKRS

WHERE A~BUDAT < S_DATE-LOW

AND A~BUKRS EQ P_BUKRS

AND ( BUMSKZ EQ SPACE OR BUMSKZ EQ 'A')

AND B~ZUMSK EQ SPACE

AND B~KUNNR IN S_KUNNR .

SELECT ABELNR ABUDAT AGJAHR BKUNNR BSHKZG BDMBTR INTO CORRESPONDING FIELDS OF TABLE ITABO_BSAD

FROM BKPF AS A INNER JOIN BSAD AS B ON ABELNR = BBELNR

AND AGJAHR EQ BGJAHR

AND AMANDT = BMANDT AND ABUKRS = BBUKRS

WHERE A~BUDAT < S_DATE-LOW

AND A~BUKRS EQ P_BUKRS

AND ( BUMSKZ EQ SPACE OR BUMSKZ EQ 'A')

AND B~ZUMSK EQ SPACE

AND B~KUNNR IN S_KUNNR .

LOOP AT CUSTOMER.

SELECT ABELNR ABUDAT AGJAHR BKUNNR BBUZEI BSHKZG BSGTXT BZFBDT BZUONR BDMBTR BPSWSL BZTERM B~VBELN

INTO CORRESPONDING FIELDS OF ITAB_BSID

FROM BKPF AS A INNER JOIN BSID AS B ON ABELNR = BBELNR AND AGJAHR EQ BGJAHR

AND AMANDT = BMANDT AND ABUKRS = BBUKRS

FOR ALL ENTRIES IN CUSTOMER

WHERE A~BUDAT IN S_DATE

AND A~BUKRS EQ P_BUKRS

AND ( BUMSKZ EQ SPACE OR BUMSKZ EQ 'A')

  • AND B~KUNNR IN S_KUNNR.

AND B~KUNNR = CUSTOMER-KUNNR.

ITAB_BSID-NAMESO = CUSTOMER-NAMESO.

ITAB_BSID-NAMEAM = CUSTOMER-NAMEAM.

ITAB_BSID-NAMERM = CUSTOMER-NAMERM.

APPEND ITAB_BSID.

CLEAR ITAB_BSID.

ENDSELECT.

SELECT ABELNR ABUDAT AGJAHR BKUNNR BBUZEI BSHKZG BSGTXT BZFBDT BZUONR BDMBTR BPSWSL BZTERM B~VBELN

INTO CORRESPONDING FIELDS OF ITAB_BSAD

FROM BKPF AS A INNER JOIN BSAD AS B ON ABELNR = BBELNR AND AGJAHR EQ BGJAHR

AND AMANDT = BMANDT AND ABUKRS = BBUKRS

WHERE A~BUDAT IN S_DATE

AND A~BUKRS EQ P_BUKRS

AND ( BUMSKZ EQ SPACE OR BUMSKZ EQ 'A')

AND B~ZUMSK EQ SPACE

  • AND B~KUNNR IN S_KUNNR.

AND B~KUNNR = CUSTOMER-KUNNR.

ITAB_BSAD-NAMESO = CUSTOMER-NAMESO.

ITAB_BSAD-NAMEAM = CUSTOMER-NAMEAM.

ITAB_BSAD-NAMERM = CUSTOMER-NAMERM.

APPEND ITAB_BSAD.

CLEAR ITAB_BSAD.

ENDSELECT.

ENDLOOP.

ENDIF.

************************************************************

Plz help. Urgent.

Khan

0 Kudos

Restructure your code:

SELECT KUNNR INTO CORRESPONDING FIELDS OF TABLE CUSTOMER
       FROM KNA1 WHERE KUNNR IN S_KUNNR.
DEL = SY-SUBRC .
IF DEL  NE  0.
  EXIT. "RETURN.
ENDIF.

DELETE ADJACENT DUPLICATES FROM CUSTOMER.


SELECT A~BELNR A~BUDAT A~GJAHR B~KUNNR B~SHKZG B~DMBTR 
       INTO CORRESPONDING FIELDS OF TABLE ITABO_BSID
       FROM BKPF AS A INNER JOIN BSID AS B ON A~BELNR = B~BELNR 
          AND A~GJAHR EQ B~GJAHR
          AND A~MANDT = B~MANDT 
          AND A~BUKRS = B~BUKRS
       WHERE A~BUDAT < S_DATE-LOW   "??? 
       AND A~BUKRS EQ P_BUKRS
       AND ( B~UMSKZ EQ SPACE OR B~UMSKZ EQ 'A')
       AND B~ZUMSK EQ SPACE
       AND B~KUNNR IN S_KUNNR .
SORT ITABO_BSID BY KUNNR.  "Sort

SELECT A~BELNR A~BUDAT A~GJAHR B~KUNNR B~SHKZG B~DMBTR
      INTO CORRESPONDING FIELDS OF TABLE ITABO_BSAD
      FROM BKPF AS A INNER JOIN BSAD AS B ON A~BELNR = B~BELNR
          AND A~GJAHR EQ B~GJAHR
          AND A~MANDT = B~MANDT 
          AND A~BUKRS = B~BUKRS
       WHERE A~BUDAT <  S_DATE-LOW    "???
       AND A~BUKRS EQ P_BUKRS
       AND ( B~UMSKZ EQ SPACE OR B~UMSKZ EQ 'A')
       AND B~ZUMSK EQ SPACE
       AND B~KUNNR IN S_KUNNR .
SORT ITABO_BSAD BY KUNNR.  "Sort



LOOP AT CUSTOMER.
  SELECT SINGLE A~NAME1 INTO CUSTOMER-NAMESO 
    FROM KNA1 AS A INNER JOIN KNVP  AS B ON A~KUNNR = B~KUNN2
    WHERE B~KUNNR = CUSTOMER-KUNNR AND B~PARVW = 'ZA'.

  SELECT SINGLE A~NAME1 INTO CUSTOMER-NAMEAM 
    FROM KNA1 AS A INNER JOIN KNVP AS B ON A~KUNNR = B~KUNN2
    WHERE B~KUNNR = CUSTOMER-KUNNR AND B~PARVW = 'ZB'.

  SELECT SINGLE A~NAME1 INTO CUSTOMER-NAMERM 
    FROM KNA1 AS A INNER JOIN KNVP AS B ON A~KUNNR = B~KUNN2
    WHERE B~KUNNR = CUSTOMER-KUNNR AND B~PARVW = 'ZC'.

  MODIFY CUSTOMER INDEX SY-TABIX.
"  CLEAR CUSTOMER.


* Change this select to be a read on the ITABO_BSID table
SELECT A~BELNR A~BUDAT A~GJAHR B~KUNNR B~BUZEI 
B~SHKZG B~SGTXT B~ZFBDT B~ZUONR B~DMBTR B~PSWSL 
B~ZTERM B~VBELN
INTO CORRESPONDING FIELDS OF ITAB_BSID
FROM BKPF AS A INNER JOIN BSID AS B ON A~BELNR = B~BELNR 
AND A~GJAHR EQ B~GJAHR
AND A~MANDT = B~MANDT AND A~BUKRS = B~BUKRS
FOR ALL ENTRIES IN CUSTOMER   "??? Internal table not header line!
WHERE A~BUDAT IN S_DATE
AND A~BUKRS EQ P_BUKRS
AND ( B~UMSKZ EQ SPACE OR B~UMSKZ EQ 'A')
AND B~KUNNR IN S_KUNNR. 
AND B~KUNNR = CUSTOMER-KUNNR.

ITAB_BSID-NAMESO = CUSTOMER-NAMESO.
ITAB_BSID-NAMEAM = CUSTOMER-NAMEAM.
ITAB_BSID-NAMERM = CUSTOMER-NAMERM.
APPEND ITAB_BSID.
CLEAR ITAB_BSID.
ENDSELECT.

* Change this select to be a read on the ITABO_BSAD table
SELECT A~BELNR A~BUDAT A~GJAHR B~KUNNR B~BUZEI B~SHKZG 
B~SGTXT B~ZFBDT B~ZUONR B~DMBTR B~PSWSL B~ZTERM B~VBELN
INTO CORRESPONDING FIELDS OF ITAB_BSAD
FROM BKPF AS A INNER JOIN BSAD AS B ON A~BELNR = B~BELNR 
AND A~GJAHR EQ B~GJAHR
AND A~MANDT = B~MANDT AND A~BUKRS = B~BUKRS
WHERE A~BUDAT IN S_DATE
AND A~BUKRS EQ P_BUKRS
AND ( B~UMSKZ EQ SPACE OR B~UMSKZ EQ 'A')
AND B~ZUMSK EQ SPACE
AND B~KUNNR IN S_KUNNR. 
AND B~KUNNR = CUSTOMER-KUNNR.
ITAB_BSAD-NAMESO = CUSTOMER-NAMESO.
ITAB_BSAD-NAMEAM = CUSTOMER-NAMEAM.
ITAB_BSAD-NAMERM = CUSTOMER-NAMERM.

APPEND ITAB_BSAD.
CLEAR ITAB_BSAD.
ENDSELECT.

ENDLOOP.

This way you loop through CUSTOMER only once.

Do not use S_DATE-LOW, A) have you read the table in to the header line. B) is the select-option sign equal to E (exclude)?

As you have got the data from BKPF + BSID / BSAD use that instead of another select. Therefore READ the intenal table(s).

There is a stray FOR ALL ENTRIES being used which will look at the internal table, not the header line. A good reason to use different names for header line and table body.

MattG.

Edited by: gifford matthew on May 18, 2008 2:14 PM

Comment out CLEAR CUSTOMER

Former Member
0 Kudos

Run it in background. Batch process do not time out.

-RK

Former Member
0 Kudos

Hi,

Changing the timeout settings is not a solution right,

Hope your program is taking much time in the sence problem with performance of your report.

make the changes where ever it is taking the time.

1.make a count for selecting instead of selecting all the records

2.avoid the select statement in the loop.

3.Use the read statement with binary search make sure that yoru internal table is sorted before using the read statement with binary search

4.Use the sequence of the select satement and fetch the required data only

5. Delete unncessary data records after using for selections.

Aviod much loops for processing.

6 . Use proper index in selections.

Other wise set the backgrond job for the same in production and go for SM66 you can see where exactly it is taking much time for process.

Regards,

madan.

Former Member
0 Kudos

First of all, replace the first SELECT and LOOP AT customer with a single SELECT, JOINing KNA1 and KNVP. I have no idea why you do three SELECTs on the same tables in that LOOP.

Also, It looks like you don't need BKPF in the other group of SELECTs. Try using just BSID and BSAD.

Rob