Loop Inside loop, time out error.

Pls look into the below code, In this im looping inside a loop.
Im looping thru the internal table( say 2000 records ) which has data from a select query, inside this loop  i need to calculate the total of output qty which is available in the another VIEW/TABLE which might return 10 records in each  iteration of the inner loop.
This process takes huge time to process also gives out runtime out error.
pls help.
LOOP AT itablnpln INTO walnpln.
contot = 0.
This particular query loop takes large time to process
SELECT distinct * INTO CORRESPONDING FIELDS OF TABLE itablnp
FROM zvprdconf where aufnr = walnpln-aufnr and
j_3asize = walnpln-j_3akordx and stzhl eq ' ' and stokz ne 'X'.
IF sy-subrc EQ 0.
*Earlier i used this looping.
*loop at itablnp into walnp.
contot = contot + walnp-J_3ALMNGA.
move walnp-J_3ASIZE to walnpln-J_3ASIZE.
endloop.
*Currently tried with the following,
LOOP AT itablnp ASSIGNING <fs_itablnp>.
contot = contot + <fs_itablnp>-J_3ALMNGA.
move <fs_itablnp>-J_3ASIZE to walnpln-J_3ASIZE.
ENDLOOP.
walnpln-output = contot.
move zvprdconf-isdd to walnpln-zdate.
move zvprdconf-isdz to walnpln-ztime.
endif.
ENDLOOP.
regs,
Raja

Dear Naresh,
Even after changing the code as below, i m getting the same error.pls help.
IF SY-SUBRC = 0.
   SORT ITABLNPLN.
   DELETE ADJACENT DUPLICATE FROM ITABLNPLN COMPARING ALL FIELDS.
ENDIF.
pls find the complete code as below.
code]
*& Report  SAPMZLINEPLANRPT
INCLUDE ZLPR_TOP.
*Event AT Selection-Screen on Block Param.
AT SELECTION-SCREEN ON BLOCK sorter.
  CHECK All = 'X'.
*Event Start-Of-Selection.
START-OF-SELECTION.
  Data: zstat type jest-stat.
  data: stklocaf type mska-lgort.
  data: stklocas type mska-lgort.
  FIELD-SYMBOLS <fs_itablnp> LIKE LINE OF itablnp.
  CLEAR it_ZVPRODDET.
  SELECT DISTINCT ZVPODbukrs ZVPODaufnr ZVPOD~objnr
  jeststat ZVPODwerks ZVPODarbpl ZVPODJ_3AKORD2
  zvpodplnbez zvpodaufnr zvpodkdauf zvpodkdpos
  zvpodj_3akord1 zvpodj_3akord2 zvpod~j_3akordx
  zvpodj_3absnr zvpodmatnr zvpod~j_4kscat
  zvpodmvgr4 zvpodj_3acada zvpodj_4krcat zvpodmenge
  zvpodposnr zvpodkunnr zvpodaufpl zvpodaplzl
  zvpodplnnr zvpodarbid zvpodsteus zvpodbismt
  zvpodwerks zvpodj_3akvgr6 zvpod~j_3arqda
  zvpodmvgr5 zvpodaudat zvpod~j_3addat
  zvpodvtweg zvpodobjnr zvpod~bukrs
  zvpodfsavd zvpodssavd zvpod~bstkd
  zvpodbstdk zvpodihrez zvpod~bstkd_e
  zvpodbstdk_e zvpodihrez_e zvpod~arbpl
  zvpodvgw01 zvpodkvgr2 zvpod~vsart
  FROM  ZVPOD
  INNER JOIN jest ON ZVPODobjnr = jestobjnr
  INTO CORRESPONDING FIELDS OF table it_ZVPRODDET where
  plnbez in FGM and arbpl in wc and werks in plant
  and SSAVD in eldate
  and J_3AKORD2 in cups and jest~inact ne 'X'.
  SORT it_ZVPRODDET BY aufnr stat.
  LOOP AT it_ZVPRODDET INTO wa_ZVPRODDET.
    IF wa_ZVPRODDET-stat = 'I0045' .  " TECO - compl
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
    ELSEIF wa_ZVPRODDET-stat = 'I0009' .  " CNF - Confirmed
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
    ELSEIF wa_ZVPRODDET-stat = 'I0012' .  " DLV - Delivered
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
    ELSEIF wa_ZVPRODDET-stat = 'I0046' .  " CLSD - Closed
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
    ELSEIF wa_ZVPRODDET-stat = 'I0076' .  " DLFL - Del Flag
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
    ELSEIF wa_ZVPRODDET-stat = 'E0003' .  " SCLS - Short Close
      CLEAR tj30t.
      SELECT SINGLE txt04
      FROM tj30t INTO tj30t-txt04
      WHERE stsma = 'PRDHOLD' AND
            estat = 'E0003' AND
            txt04 = 'SCLS' AND
            spras = 'EN'.
      IF sy-subrc = 0.
        DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
      ENDIF.
    ENDIF.
  Condition for Prod Order released - REL
    IF wa_ZVPRODDET-stat = 'I0002'.
      mreleased = 'Y'.
    else.
      mreleased = 'N'.
    endif.
    zstat = wa_ZVPRODDET-stat.
    IF mreleased = 'N'.
      DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr
      and stat = zstat.
    ENDIF.
  ENDLOOP.
  case mark.
    when All.
      LOOP AT it_ZVPRODDET INTO wa_ZVPRODDET.
        zaufnr = wa_zvproddet-aufnr.
        zarbid = wa_zvproddet-arbid.
        move wa_zvproddet to walnpln.
        append walnpln to itablnpln.
      endloop.
      clear walnpln.
      if not itablnpln is initial.
        SELECT distinct * INTO CORRESPONDING FIELDS OF TABLE itablnp
        FROM zvprdconf FOR ALL ENTRIES IN itablnpln
        where aufnr = itablnpln-aufnr and
        j_3asize = itablnpln-j_3akordx and stzhl eq ' ' and stokz ne 'X'.
        if sy-subrc = 0.
          sort itablnpln by aufnr j_3asize.
          DELETE ADJACENT DUPLICATES FROM ITABLNPLN COMPARING ALL     FIELDS.
        endif.
      endif.
      LOOP AT itablnpln  INTO walnpln.
        contot = 0.
        IF sy-subrc EQ 0.
          LOOP AT itablnp ASSIGNING <fs_itablnp> where aufnr = walnpln-aufnr and j_3asize = walnpln-j_3akordx.
            contot = contot + <fs_itablnp>-J_3ALMNGA.
            move <fs_itablnp>-J_3ASIZE to walnpln-J_3ASIZE.
          ENDLOOP.
          walnpln-output = contot.
          move zvprdconf-isdd to walnpln-zdate.
          move zvprdconf-isdz to walnpln-ztime.
        endif.
        walnpln-wip = walnpln-menge - contot.
        if walnpln-werks = '1000'.
          stklocaf = '1050'.
          stklocas = '1060'.
        elseif walnpln-werks = '2000'.
          stklocaf = '2150'.
          stklocas = '2160'.
        endif.
        select single kunnr into walnpln-ship from vbpa where
        vbeln = walnpln-KDAUF and PARVW = 'WE'.
        zship = walnpln-ship.
        move zship to walnpln-ship.
        select  single kalab into walnpln-zactqty from mska
        where matnr = walnpln-plnbez
        and j_3asize = walnpln-J_3AKORDX and LGORT = stklocaf.
        condense walnpln-kdauf.
        zsales = walnpln-kdauf.
        concatenate zsales 'S' into zso.
        select single kalab into walnpln-zsndqty from mska
        where matnr = walnpln-plnbez
        and j_3asize = walnpln-J_3AKORDX and LGORT = stklocas
        and J_4KSCAT = zso.
        zmatn = walnpln-plnbez.
        zsale = walnpln-KDAUF.
        walnpln-kdauf = zsale.
        walnpln-plnbez = zmatn.
        zcust = walnpln-kunnr.
        walnpln-kunnr = zcust.
        select single bezei into walnpln-season from TVV2T where
        kvgr2 = walnpln-kvgr2 and SPRAS = 'E'.
        select single bezei into walnpln-shipmode from T173T where
        vsart = walnpln-vsart and SPRAS = 'E'.
        STRL = strlen( walnpln-j_3akord2 ).
        if  strl = 4.
          move walnpln-j_3akord2 to walnpln-j_3akord3.
          clear walnpln-j_3akord2.
        endif.
        move zremk to walnpln-remk.
        MODIFY itablnpln FROM  walnpln.
        contot = 0.
        clear itablnp.
      ENDLOOP.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.
  endcase.
[/code]
regs,
raja[

Similar Messages

  • Repeat Loop times out and I don't want it to

    Maybe there is a better way to do this but I want an action to take place whenever the modification date of a certain file changes. This is what I use but it errors because of a timeout after about 10 mins if the mod date doesn't change. I need this to be checking all the time.
    on idle
    tell application "Finder"
    set UpdatedOLD to modification date of file aFile
    set UpdatedNEW to modification date of file aFile
    end tell
    repeat while UpdatedOLD = UpdatedNEW
    tell application "Finder"
    set UpdatedNEW to modification date of file aFile
    end tell
    end repeat
    end idle
    How can I get this to work?

    Hello
    I think you have stepped on a land mine set by OSX 10.6.
    There's a fatal bug in Apple Event Manager in 10.6 such that one event in every 65535 events will be lost and never be replied, which will result in Apple Event timeout error on sender. This bug has been reported shortly after the 10.6 release and has not yet been fixed as of 10.6.2.
    In your current script, you're continuously sending event to Finder and sooner on later send an event with the specific event id that is doomed to be lost. Judging from the time till you see the time out error, that is 10 min, you're at most sending 65535 / 600 = 109.225 events / sec to Finder. You can reduce the number of events by inserting some delay, e.g. 'delay 1' in your repeat loop but it can only defer the failure.
    cf.
    Re: Timed Out (Silence)
    http://lists.apple.com/archives/applescript-users/2009/Oct/msg00117.html
    Re: spurious timeout on nth Apple event on Snow Leopard
    http://lists.apple.com/archives/applescript-users/2009/Nov/msg00041.html
    A better way to achieve your task would be to let a launchd agent watch the file.
    A recipe is as follows.
    1) Save a compiled script in :
    ~/Library/Scripts/launchd/watchdog.1.scpt
    with contents :
    --SCRIPT
    -- Here put your script that is to be triggered when the file is modified.
    -- e.g.
    tell application "System Events"
    display dialog "The file is modified." giving up after 10
    end tell
    --END OF SCRIPT
    2) Save a UTF-8 plain text file in :
    ~/Library/LaunchAgents/watchdog.1.plist
    with contents :
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>watchdog.1</string>
    <key>Disabled</key>
    <false/>
    <key>Program</key>
    <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
    <string>osascript</string>
    <string>/Users/USER_NAME/Library/Scripts/launchd/watchdog.1.scpt</string>
    </array>
    <key>WatchPaths</key>
    <array>
    <string>POSIX_PATH_TO_THE_FIILE</string>
    </array>
    </dict>
    </plist>
    *Change USER_NAME to your user name and POSIX_PATH_TO_THE_FIILE to the POSIX path to the file to be watched.
    3) Issue the following command in Terminal to load the launchd agent :
    launchctl load ~/Library/LaunchAgents/watchdog.1.plist
    Or
    3a) Log-out and re-log-in to load the launchd agent.
    *The name 'watchdog.1.plist' and 'watchdog.1.scpt' and the script's location '~/Library/Scripts/launchd/' are mere examples. You may change them as you see fit.
    cf.
    http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/m an5/launchd.plist.5.html
    http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/m an1/launchctl.1.html
    Good luck,
    H
    Message was edited by: Hiroto (fixed typo)

  • Time Out error problem when i run the report for the whole plant

    Dear all,
    pls find the below coding, when i execute this report for the whole plant , it gives me time out error since it has to process huge database. pls suggest me in which part of my below coding i can improvise or any other better way to fetch the same result.
    pls note that
    i m using Views for querying.pls also note the comments given in Bold to understand the reason behind the coding.
    Views used in are - ZVPOD and ZVPRDCONF.
    START-OF-SELECTION.
      Data: zstat type jest-stat.
      data: stklocaf type mska-lgort.
      data: stklocas type mska-lgort.
    <u><b>To collect the status of the production order by joining the ZVPOD and JEST table.</b></u>
      CLEAR it_ZVPRODDET.
      SELECT DISTINCT ZVPOD~bukrs ZVPOD~aufnr ZVPOD~objnr
      jest~stat ZVPOD~werks ZVPOD~arbpl ZVPOD~J_3AKORD2
      FROM  ZVPOD
      INNER JOIN jest ON ZVPOD~objnr = jest~objnr
      INTO CORRESPONDING FIELDS OF wa_ZVPRODDET where
      plnbez in FGM and arbpl in wc and werks in plant
      and SSAVD in eldate
      and J_3AKORD2 in cups and jest~inact ne 'X'.
        APPEND wa_ZVPRODDET TO it_ZVPRODDET.
      ENDSELECT.
      SORT it_ZVPRODDET BY aufnr stat.
    <u><b>Loop thru Itab to check and delete the records from itab for the specified status.</b></u>
      LOOP AT it_ZVPRODDET INTO wa_ZVPRODDET.
        IF wa_ZVPRODDET-stat = 'I0045' .  " TECO - compl
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
        ELSEIF wa_ZVPRODDET-stat = 'I0009' .  " CNF - Confirmed
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
        ELSEIF wa_ZVPRODDET-stat = 'I0012' .  " DLV - Delivered
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
        ELSEIF wa_ZVPRODDET-stat = 'I0046' .  " CLSD - Closed
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
        ELSEIF wa_ZVPRODDET-stat = 'I0076' .  " DLFL - Del Flag
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
        ELSEIF wa_ZVPRODDET-stat = 'E0003' .  " SCLS - Short Close
          CLEAR tj30t.
          SELECT SINGLE txt04
          FROM tj30t INTO tj30t-txt04
          WHERE stsma = 'PRDHOLD' AND
                estat = 'E0003' AND
                txt04 = 'SCLS' AND
                spras = 'EN'.
          IF sy-subrc = 0.
            DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr.
          ENDIF.
        ENDIF.
    *      Condition for Prod Order released - REL
        IF wa_ZVPRODDET-stat = 'I0002'.
          mreleased = 'Y'.
        else.
          mreleased = 'N'.
        endif.
        zstat = wa_ZVPRODDET-stat.
        IF mreleased = 'N'.
          DELETE it_ZVPRODDET WHERE aufnr = wa_ZVPRODDET-aufnr
          and stat = zstat.
        ENDIF.
      ENDLOOP.
    <u><b>Loop thru the filtered ITAB to get all the production order details for the production order number specified in the where clause( zaufnr ) and populate another internal table.</b></u>
          LOOP AT it_ZVPRODDET INTO wa_ZVPRODDET.
            zaufnr = wa_zvproddet-aufnr.
            zarbid = wa_zvproddet-arbid.
            at new aufnr.
              SELECT DISTINCT * INTO CORRESPONDING FIELDS OF  walnpln
              FROM zvpod where plnbez in FGM and arbpl in wc and SSAVD in
             eldate and werks in plant and J_3AKORD2 in cups and aufnr = zaufnr.
                APPEND walnpln TO itablnpln.
              endselect.
            endat.
          endloop.
          clear walnpln.
    <u><b>
    Looping thru Internal table and performs all the following calculations and inner loop
    and also relevant querying.</b></u>
    <u><b>Assume that ITABLNPLN holds appox. 8000 records.</b></u>
    LOOP AT itablnpln  INTO walnpln.
            contot = 0.
            SELECT distinct * INTO CORRESPONDING FIELDS OF TABLE itablnp
            FROM zvprdconf where aufnr = walnpln-aufnr and
            j_3asize = walnpln-j_3akordx and stzhl ne '2' and stokz ne 'X'.
            clear zvprdconf.
            SELECT single isdd
            FROM zvprdconf into  zvprdconf-isdd
            where aufnr = walnpln-aufnr and
            j_3asize = walnpln-j_3akordx and stzhl ne '2' and stokz ne 'X'.
            SELECT single isdz
            FROM zvprdconf into  zvprdconf-isdz
            where aufnr = walnpln-aufnr and
            j_3asize = walnpln-j_3akordx and stzhl ne '2' and stokz ne 'X'.
            IF sy-subrc EQ 0.
              <u><b>Assume that ITABLNP  holds appox. 30 records.</b></u>
              loop at itablnp into walnp.
                contot = contot + walnp-J_3ALMNGA.
                move walnp-J_3ASIZE to walnpln-J_3ASIZE.
                move zvprdconf-isdd to walnpln-zdate.
                move zvprdconf-isdz to walnpln-ztime.
              endloop.
              walnpln-output = contot.
            endif.
            walnpln-wip = walnpln-menge - contot.
            if walnpln-werks = '1000'.
              stklocaf = '1050'.
              stklocas = '1060'.
            elseif walnpln-werks = '2000'.
              stklocaf = '2150'.
              stklocas = '2160'.
            endif.
           select single kunnr into walnpln-ship from vbpa where
           vbeln = walnpln-KDAUF and PARVW = 'WE'.
            zship = walnpln-ship.
            move zship to walnpln-ship.
            select  single kalab into walnpln-zactqty from mska
            where matnr = walnpln-plnbez
            and j_3asize = walnpln-J_3AKORDX and LGORT = stklocaf.
            condense walnpln-kdauf.
            zsales = walnpln-kdauf.
            concatenate zsales 'S' into zso.
            select single kalab into walnpln-zsndqty from mska
            where matnr = walnpln-plnbez
            and j_3asize = walnpln-J_3AKORDX and LGORT = stklocas
            and J_4KSCAT = zso.
            zmatn = walnpln-plnbez.
            zsale = walnpln-KDAUF.
            walnpln-kdauf = zsale.
            walnpln-plnbez = zmatn.
            zcust = walnpln-kunnr.
            walnpln-kunnr = zcust.
            select single bezei into walnpln-season from TVV2T where
            kvgr2 = walnpln-kvgr2 and SPRAS = 'E'.
            select single bezei into walnpln-shipmode from T173T where
            vsart = walnpln-vsart and SPRAS = 'E'.
            STRL = strlen( walnpln-j_3akord2 ).
            if  strl = 4.
              move walnpln-j_3akord2 to walnpln-j_3akord3.
              clear walnpln-j_3akord2.
            endif.
            move zremk to walnpln-remk.
            MODIFY itablnpln FROM  walnpln.
            contot = 0.
            clear itablnp.
          ENDLOOP.
          PERFORM build_fieldcatalog.
          PERFORM build_layout.
          PERFORM display_alv_report.

    Hi raja,
    Plese go through the suggessitions.
    1.avoide the select ...endselect. write the below select
    CLEAR IT_ZVPRODDET.
    SELECT DISTINCT
         ZVPOD~BUKRS
         ZVPOD~AUFNR
         ZVPOD~OBJNR
         JEST~STAT
         ZVPOD~WERKS
         ZVPOD~ARBPL
         ZVPOD~J_3AKORD2
      FROM ZVPOD
      INNER JOIN JEST ON ZVPOD~OBJNR = JEST~OBJNR
      INTO CORRESPONDING FIELDS TABLE  IT_ZVPRODDET
      WHERE PLNBEZ IN FGM AND
            ARBPL IN WC AND
            WERKS IN PLANT AND
            SSAVD IN ELDATE AND
            J_3AKORD2 IN CUPS AND
            JEST~INACT NE 'X'.
      IF SY-SUBRC = 0.
        SORT TABLE IT_ZVPRODDET.
      ENDIF.
    2..first of all dont delete a record inside the loop. instead use the Field symobols.
    have u obsereved you code in the loop!!!!. wht u r doing..
    u r removing the same record which u in the loop..
    If u wanto delete the entires with check to<b> stat</b>... <b>then.. why dont u put the STAT field in Wher e condition..?</b> by this you reduce the data base select time..
    Now the select query is like the below....
    CLEAR IT_ZVPRODDET.
    SELECT DISTINCT
         ZVPOD~BUKRS
         ZVPOD~AUFNR
         ZVPOD~OBJNR
         JEST~STAT
         ZVPOD~WERKS
         ZVPOD~ARBPL
         ZVPOD~J_3AKORD2
      FROM ZVPOD
      INNER JOIN JEST ON ZVPOD~OBJNR = JEST~OBJNR
      INTO CORRESPONDING FIELDS TABLE  IT_ZVPRODDET
      WHERE PLNBEZ IN FGM AND
            ARBPL IN WC AND
            WERKS IN PLANT AND
            SSAVD IN ELDATE AND
            J_3AKORD2 IN CUPS AND
            JEST~INACT NE 'X' AND
            ( STAT <> 'I0045' AND
              STAT <> 'I0045' AND
              STAT <> 'I0009' AND
              STAT <> 'I0012' AND
              STAT <> 'I0046' AND
              STAT <> 'I0076' AND
              STAT <> 'E0003' ).
      IF SY-SUBRC = 0.
        SORT TABLE IT_ZVPRODDET.
      ENDIF.
    <b>3.</b> WHT IS MEANING OF THE SELECT
    <b>  CLEAR TJ30T.
      SELECT SINGLE TXT04
      FROM TJ30T INTO TJ30T-TXT04
      WHERE STSMA = 'PRDHOLD' AND
            ESTAT = 'E0003' AND
            TXT04 = 'SCLS' AND
            SPRAS = 'EN'.
      IF SY-SUBRC = 0.
        DELETE IT_ZVPRODDET WHERE AUFNR = WA_ZVPRODDET-AUFNR.
      ENDIF.</b>....... IN WHERE CONDION U R GIven all are constant values right?..
    why u need select it inside the loop.. u can write before the SELECT from ZVPOD..
    that why first checke this field then go for fur thure selects..
    <b>now u r code looks like this....</b>
    CLEAR TJ30T.
    SELECT SINGLE TXT04
      FROM TJ30T INTO TJ30T-TXT04
    WHERE STSMA = 'PRDHOLD' AND
          ESTAT = 'E0003' AND
          TXT04 = 'SCLS' AND
          SPRAS = 'EN'.
    IF SY-SUBRC = 0.
      CLEAR IT_ZVPRODDET.
      SELECT DISTINCT
           ZVPOD~BUKRS
           ZVPOD~AUFNR
           ZVPOD~OBJNR
           JEST~STAT
           ZVPOD~WERKS
           ZVPOD~ARBPL
           ZVPOD~J_3AKORD2
        FROM ZVPOD
        INNER JOIN JEST ON ZVPOD~OBJNR = JEST~OBJNR
        INTO CORRESPONDING FIELDS TABLE  IT_ZVPRODDET
        WHERE PLNBEZ IN FGM AND
              ARBPL IN WC AND
              WERKS IN PLANT AND
              SSAVD IN ELDATE AND
              J_3AKORD2 IN CUPS AND
              JEST~INACT NE 'X' AND
              JEST~STAT <> 'I0045' AND
              JEST~STAT <> 'I0045' AND
              JEST~STAT <> 'I0009' AND
              JEST~STAT <> 'I0012' AND
              JEST~STAT <> 'I0046' AND
              JEST~STAT <> 'I0076' AND
              JEST~STAT <> 'E0003' ).
        IF SY-SUBRC = 0.
          SORT TABLE IT_ZVPRODDET.
        ENDIF.
      ENDIF.
    there are so many select inside the loop...... please Delete all of them.... write them be for the loop.......using the FOR ALL ENTRIES.....
    THEN LOOP THE TABLE USING THE WHERE CONDITIONS.
    <b>Plese write u updated code here again</b>..

  • Time out error 1.6 million internal table fields are computed using FMs

    Hi , All ...
    The Report running fine in server with less 300 record but ...production server which has 1.6 million record it  gives error as time-out error and takes hell amount of time.
    Please suggest ugently ..
    I have tried few things
    Internal table having 1.6 lacs ... fields to compute .. i have token in a batch
    loop at i_cinfo into s_cinfo from 1 to  100000.
    and so on ...also applied all the performace related .. like indexs, work areas , deleting adjacent duplicates , for all entries ..wherever applicable.
    Please Suggest .
    Report is as below
    REPORT  ZUSOTCBD_CREDIT_REPORT .
    TABLES : KNA1,    " General Data Customer Master
             KNB1,    " Customer Master (Company Code)
             KNC1,    " Customer master (transaction figures)
             KNKK,    " Customer master credit management: Control area data
             T009,    " Fiscal Year Variants P
             T009Y,   " Shortened fiscal years in Asset Accounting P
             T001,    " Co. Codes
             T001CM,  " Permitted Credit Control Areas per Company Code
             RF42B,   " Structure to hold credit data.
             RF035,   " Structure to hold credit managment fields
             RF02L,   " Structure to hold credit data.
             TRAS,    " Interval for Days in Arrears P
             T000CM.  " Data for DSO calculation.
    Types
    TYPES:
      BEGIN OF type_final,
        string(50) TYPE c,                            " String Value for Title
      END OF type_final.
    data:wa_final     TYPE type_final.                " Work Area to hold Title Data
    DATA:    RASID    TYPE RF035-RASID value 'R03N'. " For Days in interval
    DATA:    MONAT(2) TYPE N.
    DATA:    GJAHR    TYPE  KNC1-GJAHR.
    DATA:    LD_PERIODS(32) TYPE N
                           VALUE '01020304050607080910111213141516'.
    DATA     sytabix type sy-tabix.
    DATA     LAND      TYPE KNA1-LAND1 VALUE 'US'.   " Country Key
    DATA:   LD_PERIOD    TYPE BSID-MONAT,            " Fiscal Year Variant
            LD_GJAHR   TYPE KNC1-GJAHR,
            LD_COUNTER TYPE SY-TABIX.
    Internal Tables
    Internal table to hold Title Data                                   *
    DATA:
      i_final    TYPE STANDARD TABLE OF type_final.
    **Internal Table Permitted Credit Control Areas per Company Code
    DATA:    BEGIN OF TCMTAB OCCURS 10.
            INCLUDE STRUCTURE T001CM.
    DATA:    END   OF TCMTAB.
    *Internal table to store Customer no.
    DATA :  BEGIN OF ICUST OCCURS 0,
               KUNNR             TYPE KNA1-KUNNR,    " Customer No.
            END   OF ICUST.
    DATA:    BEGIN OF BUKTAB OCCURS 20,
               KKBER             LIKE T001-KKBER,    " Credit Control Area
               BUKRS             LIKE T001-BUKRS,    " Co. Code
               WAERS             LIKE T001-WAERS,    " Currency
               PERIV             LIKE T001-PERIV,    " Fiscal Year Variant
               BUTXT             LIKE T001-BUTXT,
             END   OF BUKTAB.
    Internal Table to store Fiscal year Data .
    DATA:    BEGIN OF GJATAB OCCURS 5,
               PERIV             LIKE T001-PERIV,    " Fiscal Year Variant
               GJAHR             LIKE KNC1-GJAHR,    " Fiscal Year
               MONAT             LIKE T009-ANZBP,    "
               ANZBP             LIKE T009-ANZBP,    " Number of posting periods
             END   OF GJATAB.
    *Main Output internal table to be used to store credit history Information
    DATA : BEGIN OF I_CINFO occurs 0,
                 KUNNR TYPE   KNB1-KUNNR,     " Customer
                 KNKLI TYPE   KNKK-KNKLI,     " Customer's account number with credit limit reference
                 KKBER TYPE   KNKK-KKBER,     " Credit Control Area
                 CTLPC TYPE   KNKK-CTLPC,     " Risk Category
                 KLIMK TYPE   KNKK-KLIMK,     " Credit Limit
                 SBGRP TYPE   KNKK-SBGRP,     " Credit representative group for credit management
                 ERDAT TYPE   KNKK-ERDAT,     " Created On
                 DTREV TYPE   KNKK-DTREV,     " Last Internal Review
                 REVDB TYPE   KNKK-REVDB,     " Last External Review
                 SALDO TYPE   RF42B-SALDO,    " Balance
                 DSOIN TYPE   RF02L-DSOIN,    " DSO
                 H06SA TYPE   RF035-H06SA,    " Highest Balance at the end of 6 Months
                 H06JA TYPE   RF035-H06JA,    " Year highest Balance 6 Months
                 H06MO TYPE   RF035-H06MO,    " Month OF hihest Balance 6 Months
                 H12SA TYPE   RF035-H12SA,    " Highest Balance at the end of 12 Months
                 H12JA TYPE   RF035-H12JA,    " Year highest Balance 12 Months
                 H12MO TYPE   RF035-H12MO,    " Month OF hihest Balance 12 Months
                 UMP2U TYPE   RF42B-UMP2U,    " Sales from the current Year
                 UMP1U TYPE   RF42B-UMP1U,    " Sales from the Previous Year
                 SFAEL TYPE   RF035-SFAEL,    " Total Past Due Open Item
                 SFAE1 TYPE   RF035-SFAE1,    " Aging buckets 0-15
                 SFAE2 TYPE   RF035-SFAE2,    " Aging buckets 16-30
                 SFAE3 TYPE   RF035-SFAE3,    " Aging buckets 31-60
                 SFAE4 TYPE   RF035-SFAE4,    " Aging buckets 60-90
                 SFAE5 TYPE   RF035-SFAE5,    " Aging buckets Over 90
          END Of I_CINFO.
    DATA : BEGIN OF S_CINFO ,
                 KUNNR TYPE   KNB1-KUNNR,     " Customer
                 KNKLI TYPE   KNKK-KNKLI,     " Customer's account number with credit limit reference
                 KKBER TYPE   KNKK-KKBER,     " Credit Control Area
                 CTLPC TYPE   KNKK-CTLPC,     " Risk Category
                 KLIMK TYPE   KNKK-KLIMK,     " Credit Limit
                 SBGRP TYPE   KNKK-SBGRP,     " Credit representative group for credit management
                 ERDAT TYPE   KNKK-ERDAT,     " Created On
                 DTREV TYPE   KNKK-DTREV,     " Last Internal Review
                 REVDB TYPE   KNKK-REVDB,     " Last External Review
                 SALDO TYPE   RF42B-SALDO,    " Balance
                 DSOIN TYPE   RF02L-DSOIN,    " DSO
                 H06SA TYPE   RF035-H06SA,    " Highest Balance at the end of 6 Months
                 H06JA TYPE   RF035-H06JA,    " Year highest Balance 6 Months
                 H06MO TYPE   RF035-H06MO,    " Month OF hihest Balance 6 Months
                 H12SA TYPE   RF035-H12SA,    " Highest Balance at the end of 12 Months
                 H12JA TYPE   RF035-H12JA,    " Year highest Balance 12 Months
                 H12MO TYPE   RF035-H12MO,    " Month OF hihest Balance 12 Months
                 UMP2U TYPE   RF42B-UMP2U,    " Sales from the current Year
                 UMP1U TYPE   RF42B-UMP1U,    " Sales from the Previous Year
                 SFAEL TYPE   RF035-SFAEL,    " Total Past Due Open Item
                 SFAE1 TYPE   RF035-SFAE1,    " Aging buckets 0-15
                 SFAE2 TYPE   RF035-SFAE2,    " Aging buckets 16-30
                 SFAE3 TYPE   RF035-SFAE3,    " Aging buckets 31-60
                 SFAE4 TYPE   RF035-SFAE4,    " Aging buckets 60-90
                 SFAE5 TYPE   RF035-SFAE5,    " Aging buckets Over 90
          END Of s_cinfo.
    *Internal table to hold month-wise balance.
    DATA:    BEGIN OF SALTAB OCCURS 12,
               LNUMM(2)     TYPE N,             " Month
               SALDO        LIKE RF42B-SALDO,   " Balance
             END   OF SALTAB.
    *Internal table used for computing the Balance fields
    DATA:    BEGIN OF SALDO,
               UML01             LIKE KNC1-UM01S,
               UML02             LIKE KNC1-UM01S,
               UML03             LIKE KNC1-UM01S,
               UML04             LIKE KNC1-UM01S,
               UML05             LIKE KNC1-UM01S,
               UML06             LIKE KNC1-UM01S,
               UML07             LIKE KNC1-UM01S,
               UML08             LIKE KNC1-UM01S,
               UML09             LIKE KNC1-UM01S,
               UML10             LIKE KNC1-UM01S,
               UML11             LIKE KNC1-UM01S,
               UML12             LIKE KNC1-UM01S,
             END   OF SALDO.
    Structure to hold Bal fields ------ -------
    DATA:    BEGIN OF SKNKK,
               KUNNR             LIKE KNA1-KUNNR,  " Customer Number 1: Debitor
               KONTO             LIKE KNKK-KUNNR,
               SFAE1             LIKE RF035-SFAE1, " Aging buckets 0-15
               SFAE2             LIKE RF035-SFAE2, " Aging buckets 16-30
               SFAE3             LIKE RF035-SFAE3, " Aging buckets 30-60
               SFAE4             LIKE RF035-SFAE4, " Aging buckets 60-90
               SFAE5             LIKE RF035-SFAE5, " Aging buckets Over 90
               SFAEL             LIKE RF035-SFAEL, " Total Due of Items
               UML01             LIKE KNC1-UM01S,
               UML02             LIKE KNC1-UM01S,
               UML03             LIKE KNC1-UM01S,
               UML04             LIKE KNC1-UM01S,
               UML05             LIKE KNC1-UM01S,
               UML06             LIKE KNC1-UM01S,
               UML07             LIKE KNC1-UM01S,
               UML08             LIKE KNC1-UM01S,
               UML09             LIKE KNC1-UM01S,
               UML10             LIKE KNC1-UM01S,
               UML11             LIKE KNC1-UM01S,
               UML12             LIKE KNC1-UM01S,
               UMP1U             LIKE RF42B-UMP1U, " Sales from the Previous Year
               UMP2U             LIKE RF42B-UMP2U, " Sales from the current Year
               SALDO             LIKE RF42B-SALDO, " Balance
             END   OF SKNKK.
    DATA :  BEGIN OF ICUST1 OCCURS 0,
               KUNNR             TYPE KNA1-KUNNR,    "For Customer Filter.
            END   OF ICUST1.
    **Internal table to hold fiscal varriants
    DATA: BEGIN OF LT_PERIODS OCCURS 12,
             PERIOD LIKE BSID-MONAT,
             GJAHR  LIKE KNC1-GJAHR,
           END OF LT_PERIODS.
    **Constants
    constants :  BUKRS1 TYPE KNB1-BUKRS VALUE '1000',
                 BUKRS2 TYPE KNB1-BUKRS VALUE '1031',
                 Recs   Type i value '200',
                 B_count type i value '2'.
          INITIALIZATION
    INITIALIZATION.
      IF RASID IS INITIAL.
        SELECT * FROM TRAS.
          EXIT.
        ENDSELECT.
        IF SY-SUBRC = 0.
          RASID = TRAS-RASID.
        ENDIF.
      ENDIF.
    SELECTION-SCREEN
      parameters : p_path type rlgrap-filename default 'C:\Documents and Settings\C890971\Desktop\Credit_history.XLS'.
    Start of selection processing
    START-OF-SELECTION.
    **Get Customers for Co. Code 1000 & 1031.
      PERFORM GET_CUST.
    Get  / Compute Credit Information data for Company Codes 1000 & 1031.
      PERFORM GET_CREDIT_DATA.
    End of selection processing
    *END-OF-SELECTION.
    Listing Credit History Data
      PERFORM DOWNLOAD_CREDIT_DATA.
    S U B R O U T I N E S
    *&      Form  GET_CUST
          text
    -->  p1        text
    <--  p2        text
    FORM GET_CUST .
    Get US only Customers.
      Refresh icust.
      Select kunnr from kna1 appending table icust
                                   where Land1 = land.
    **Delete duplicate records
      Delete Adjacent duplicates from icust comparing kunnr.
      if icust[] is not initial.
       Limit the selection some more to Co. Code 1000 & 1031
      As join will cost overhead as compared.
      Select kunnr from knb1 into table icust1
                                  for all entries in icust
                                  where kunnr = icust-kunnr
                                  and   bukrs = bukrs1
                                  OR    bukrs = bukrs2.
    **Delete duplicate records
      Delete Adjacent duplicates from icust1 comparing kunnr.
       endif.
    **Free memory.
      Free icust.
    Credit Control Area
      select * from T001CM into table TCMTAB
                           where bukrs = bukrs1 OR
                                 bukrs = bukrs2.
    ENDFORM.                    " GET_CUST
    *&      Form  GET_CREDIT_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM GET_CREDIT_DATA .
      DATA : L_TEXT(60) TYPE C ,
             Ltext1(50) type C value 'Computing Credit-History Data For',
             Ltext2(10) type C value 'Customers',
             L_PCT type i value '10',
             L_recs type i,
             l_batch_recs type i,
             l_s_rec type i value 1,
             l_recs1(7) type N.
    ***Fetch data from KNKK table
      PERFORM GET_KNKK_DATA  .
    ***Computing Crredit Fields
    **Number of Customers For whom Deatils needed.
      Describe table I_CINFO lines l_recs.
      l_recs1 = l_recs.
      Concatenate Ltext1 l_recs1 Ltext2 into l_text separated by ' '.
      PERFORM GET_PGRESS_INDICATOR USING l_text l_pct.
    ***If records are more than 200000, should be processed  batch-wise
      If l_recs > recs.
        l_batch_recs = abs( l_recs / b_count ).
        Do b_count times.
          loop at i_cinfo INTO S_CINFO from l_S_REC to l_batch_recs.
    **Remember the row
            sytabix = sy-tabix.
    **Compute DSO
            PERFORM GET_DSO_FIELD .
    Compute rest credit history data.
            PERFORM COMPUTE_SFIELDS.
          endloop.
          l_S_REC = l_S_REC + l_batch_recs.
          l_batch_recs = l_batch_recs + l_batch_recs.
          IF l_batch_recs ge l_recs.
            l_batch_recs = l_recs.
          eNDIF.
    Commit up to here to release the DB locks.
          Commit work.
        enddo.
      else.
        loop at i_cinfo INTO S_CINFO.
    **Remember the row
          sytabix = sy-tabix.
    **Compute DSO
          PERFORM GET_DSO_FIELD .
    Compute rest credit history data.
          PERFORM COMPUTE_SFIELDS.
        endloop.
      Endif.
    ENDFORM.                    " GET_CREDIT_DATA
    *&      Form  GET_KNKK_DATA
          text
         -->P_ICUST_KUNNR  text
    FORM GET_KNKK_DATA .
      if icust1[] is not initial.
      SELECT   KUNNR KNKLI KKBER  CTLPC KLIMK
               SBGRP ERDAT DTREV REVDB
               from KNKK into corresponding fields of table I_Cinfo
               for all entries in icust1
               where kunnr = icust1-kunnr.
      Delete Adjacent duplicates from i_cinfo comparing kunnr.
      endif.
    **Free Memory for internal table icust1.
      Free icust1.
    ENDFORM.                    " GET_KNKK_DATA
    **&      Form  GET_DSO_FIELD
          text
    -->  p1        text
    <--  p2        text
    FORM GET_DSO_FIELD .
    ***Determine DSO Parameter
      PERFORM DSO_PARAMETER.
    ***Compute DSO
      CALL FUNCTION 'CUSTOMER_DSO_CALCULATION'
        EXPORTING
          I_KKBER       = s_cinfo-kkber
          I_KUNNR       = s_cinfo-kunnr
          I_ANZBUPER    = T000CM-DSOPP
          I_XCHILDS     = T000CM-DSOCH
          I_ACTBALANCE  = T000CM-DSOAB
        IMPORTING
          E_DSOIN       = RF02L-DSOIN
        EXCEPTIONS
          ERROR_MESSAGE = 1.
    ENDFORM.                    " GET_DSO_FIELD
    *&      Form  DSO_PARAMETER
          text
    -->  p1        text
    <--  p2        text
    FORM DSO_PARAMETER.
      IF T000CM-DSOPP IS INITIAL.
        SELECT SINGLE * FROM T000CM.
        IF SY-SUBRC     EQ 0.
          IF T000CM-DSOPP IS INITIAL.
            T000CM-DSOPP = '003'.
          ENDIF.
        ELSE.
          T000CM-DSOPP = '003'.
          T000CM-DSOCH = ' '.
          T000CM-DSOAB = 'X'.
        ENDIF.
      ENDIF.
    ENDFORM.                    " DSO_PARAMETER
    -->  p1        text
    <--  p2        text
    FORM PERIODE_ERMITTELN_EXC USING
                P03_BUDAT    LIKE SYST-DATUM
                P03_GJAHR    LIKE KNC1-GJAHR
                P03_MONAT    LIKE MONAT.
      CALL FUNCTION 'FI_PERIOD_DETERMINE'
           EXPORTING
                I_BUDAT = P03_BUDAT
                I_PERIV = T001-PERIV
              I_BUKRS = T001-BUKRS
                I_GJAHR = P03_GJAHR
                I_MONAT = P03_MONAT
           IMPORTING
                E_GJAHR = P03_GJAHR
                E_MONAT = P03_MONAT
           EXCEPTIONS
                ERROR_MESSAGE = 1.
    ENDFORM.                    "PERIODE_ERMITTELN_EXC
    *&      Form  COMPUTE_SFIELDS
          text
    -->  p1        text
    <--  p2        text
    FORM COMPUTE_SFIELDS .
    **Compute Balance
      PERFORM GET_SFIELDS .
      S_CINFO-DSOIN = RF02L-DSOIN.
      S_CINFO-SALDO = RF035-SALDO.
      S_CINFO-H06SA = RF035-H06SA.
      S_CINFO-H06JA = RF035-H06JA.
      S_CINFO-H06MO = RF035-H06MO.
      S_CINFO-H12SA = RF035-H12SA.
      S_CINFO-H12JA = RF035-H12JA.
      S_CINFO-H12MO = RF035-H12MO.
      S_CINFO-UMP2U = RF42B-UMP2U.
      S_CINFO-UMP1U = RF42B-UMP1U.
      S_CINFO-SFAEL = RF035-SFAEL.
      S_CINFO-SFAE1 = RF035-SFAE1.
      S_CINFO-SFAE2 = RF035-SFAE2.
      S_CINFO-SFAE3 = RF035-SFAE3.
      S_CINFO-SFAE4 = RF035-SFAE4.
      S_CINFO-SFAE5 = RF035-SFAE5.
    modify..
      MODIFY I_CINFO FROM S_CINFO INDEX sytabix.
      CLEAR: S_CINFO,RF035,RF02L, RF42B.
    ENDFORM.                    " COMPUTE_SFIELDS
          text
         -->P_C_INFO_KUNNR  text
    FORM GET_CUST_BAL_INFO.
      LOOP AT TCMTAB.
        CALL FUNCTION 'FI_COMPANY_CODE_DATA'
          EXPORTING
            I_BUKRS       = TCMTAB-BUKRS
          IMPORTING
            E_T001        = T001
          EXCEPTIONS
            ERROR_MESSAGE = 1.
        IF SY-SUBRC = 0.
          MOVE-CORRESPONDING T001 TO BUKTAB.
          BUKTAB-KKBER = TCMTAB-KKBER.
          COLLECT BUKTAB.
        ENDIF.
      ENDLOOP.
      LOOP AT BUKTAB WHERE PERIV NE SPACE.
        GJATAB-PERIV = BUKTAB-PERIV.
        COLLECT GJATAB.
      ENDLOOP.
      CLEAR: MONAT.
      LOOP AT GJATAB.
        T001-PERIV = GJATAB-PERIV.
        CLEAR: GJAHR, MONAT.
        PERFORM PERIODE_ERMITTELN_EXC USING SY-DATLO GJAHR MONAT.
        CHECK SY-SUBRC = 0.
        GJATAB-GJAHR = GJAHR.
        GJATAB-MONAT = MONAT.
        SELECT SINGLE * FROM T009 WHERE PERIV = GJATAB-PERIV.
        IF SY-SUBRC = 0.
          GJATAB-ANZBP = T009-ANZBP.
        ENDIF.
        MODIFY GJATAB.
      ENDLOOP.
      LOOP AT BUKTAB.
        CHECK NOT ( BUKTAB-PERIV IS INITIAL ).
        READ TABLE GJATAB WITH KEY BUKTAB-PERIV.
        CHECK SY-SUBRC = 0
          AND NOT ( GJATAB-GJAHR IS INITIAL ).
        CALL FUNCTION 'CUSTOMER_BALANCE'
          EXPORTING
            KUNNR      = S_cinfo-kunnr
            BUKRS      = BUKTAB-BUKRS
            GJAHR      = GJATAB-GJAHR
            MONAT      = GJATAB-MONAT
            PERIV      = GJATAB-PERIV
            ANZBP      = GJATAB-ANZBP
            XH6MON     = 'X'
            XH12MON    = 'X'
          IMPORTING
            UMP2U      = RF42B-UMP2U
            VMP2U      = RF42B-UMP1U
            SALDO      = RF035-SALDO
            UML01      = SALDO-UML01
            UML02      = SALDO-UML02
            UML03      = SALDO-UML03
            UML04      = SALDO-UML04
            UML05      = SALDO-UML05
            UML06      = SALDO-UML06
            UML07      = SALDO-UML07
            UML08      = SALDO-UML08
            UML09      = SALDO-UML09
            UML10      = SALDO-UML10
            UML11      = SALDO-UML11
            UML12      = SALDO-UML12
          EXCEPTIONS
            NO_BALANCE = 4.
        IF SY-SUBRC = 0.
          SKNKK-UMP1U = SKNKK-UMP1U + RF42B-UMP1U.
          SKNKK-UMP2U = SKNKK-UMP2U + RF42B-UMP2U.
          SKNKK-SALDO = SKNKK-SALDO + RF035-SALDO.
          SKNKK-UML01 = SKNKK-UML01 + SALDO-UML01.
          SKNKK-UML02 = SKNKK-UML02 + SALDO-UML02.
          SKNKK-UML03 = SKNKK-UML03 + SALDO-UML03.
          SKNKK-UML04 = SKNKK-UML04 + SALDO-UML04.
          SKNKK-UML05 = SKNKK-UML05 + SALDO-UML05.
          SKNKK-UML06 = SKNKK-UML06 + SALDO-UML06.
          SKNKK-UML07 = SKNKK-UML07 + SALDO-UML07.
          SKNKK-UML08 = SKNKK-UML08 + SALDO-UML08.
          SKNKK-UML09 = SKNKK-UML09 + SALDO-UML09.
          SKNKK-UML10 = SKNKK-UML10 + SALDO-UML10.
          SKNKK-UML11 = SKNKK-UML11 + SALDO-UML11.
          SKNKK-UML12 = SKNKK-UML12 + SALDO-UML12.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "
    *&      Form  GET_SFIELDS
          text
    -->  p1        text
    <--  p2        text
    FORM GET_SFIELDS .
      sknkk-kunnr = S_CINFO-KUNNR.
    **Clear target to store computed values
      CLEAR: RF035.
    **Compute Balance fields
      PERFORM GET_CUST_BAL_INFO.
      REFRESH: SALTAB.
      SALTAB-LNUMM = '01'. SALTAB-SALDO = SKNKK-UML01. APPEND SALTAB.
      SALTAB-LNUMM = '02'. SALTAB-SALDO = SKNKK-UML02. APPEND SALTAB.
      SALTAB-LNUMM = '03'. SALTAB-SALDO = SKNKK-UML03. APPEND SALTAB.
      SALTAB-LNUMM = '04'. SALTAB-SALDO = SKNKK-UML04. APPEND SALTAB.
      SALTAB-LNUMM = '05'. SALTAB-SALDO = SKNKK-UML05. APPEND SALTAB.
      SALTAB-LNUMM = '06'. SALTAB-SALDO = SKNKK-UML06. APPEND SALTAB.
      SALTAB-LNUMM = '07'. SALTAB-SALDO = SKNKK-UML07. APPEND SALTAB.
      SALTAB-LNUMM = '08'. SALTAB-SALDO = SKNKK-UML08. APPEND SALTAB.
      SALTAB-LNUMM = '09'. SALTAB-SALDO = SKNKK-UML09. APPEND SALTAB.
      SALTAB-LNUMM = '10'. SALTAB-SALDO = SKNKK-UML10. APPEND SALTAB.
      SALTAB-LNUMM = '11'. SALTAB-SALDO = SKNKK-UML11. APPEND SALTAB.
      SALTAB-LNUMM = '12'. SALTAB-SALDO = SKNKK-UML12. APPEND SALTAB.
      READ TABLE SALTAB INDEX 1.
      RF035-H06SA = SALTAB-SALDO.
      RF035-H06MO = SALTAB-LNUMM.
      RF035-H12SA = SALTAB-SALDO.
      RF035-H12MO = SALTAB-LNUMM.
    ------ SALTAB ---------------------------------------------
      LOOP AT SALTAB.
        IF  SALTAB-SALDO > RF035-H06SA
        AND SY-TABIX     < 7.
          RF035-H06SA = SALTAB-SALDO.
          RF035-H06MO = SALTAB-LNUMM.
        ENDIF.
        IF  SALTAB-SALDO > RF035-H12SA
        AND SY-TABIX     < 13.
          RF035-H12SA = SALTAB-SALDO.
          RF035-H12MO = SALTAB-LNUMM.
        ENDIF.
      ENDLOOP.
    ------ Period--------------------
      REFRESH LT_PERIODS.
      CLEAR LD_COUNTER.
      READ TABLE BUKTAB INDEX 1.
      IF SY-SUBRC = 0.
        READ TABLE GJATAB WITH KEY BUKTAB-PERIV.
        DO GJATAB-MONAT TIMES
           VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)
                                                     RANGE LD_PERIODS.
          LT_PERIODS-GJAHR  = GJATAB-GJAHR.
          LT_PERIODS-PERIOD = LD_PERIOD.
          LD_COUNTER = LD_COUNTER + 1.
          APPEND LT_PERIODS.
        ENDDO.
        IF LD_COUNTER LT 12.
          LD_GJAHR = GJATAB-GJAHR - 1.
          CLEAR T009Y.
          SELECT SINGLE * FROM T009Y WHERE PERIV = GJATAB-PERIV
                                       AND GJAHR = LD_GJAHR.
          DO GJATAB-ANZBP TIMES
             VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)
                                                       RANGE LD_PERIODS.
            IF T009Y-ANZBP > 0.
              CHECK SY-INDEX <= T009Y-ANZBP.
            ENDIF.
            LD_COUNTER = LD_COUNTER + 1.
            LT_PERIODS-GJAHR  = LD_GJAHR.
            LT_PERIODS-PERIOD = LD_PERIOD.
            APPEND LT_PERIODS.
          ENDDO.
        ENDIF.
        IF LD_COUNTER LT 12.
          LD_GJAHR = LD_GJAHR - 1.
          DO GJATAB-ANZBP TIMES
             VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)
                                                       RANGE LD_PERIODS.
            LD_COUNTER = LD_COUNTER + 1.
            LT_PERIODS-GJAHR  = LD_GJAHR.
            LT_PERIODS-PERIOD = LD_PERIOD.
            APPEND LT_PERIODS.
          ENDDO.
        ENDIF.
        SORT LT_PERIODS BY GJAHR ASCENDING PERIOD ASCENDING.
        LD_COUNTER = LD_COUNTER - 12.
        DO LD_COUNTER TIMES.
          DELETE LT_PERIODS INDEX 1.
        ENDDO.
        SORT LT_PERIODS BY GJAHR DESCENDING PERIOD DESCENDING.
        READ TABLE LT_PERIODS INDEX RF035-H06MO.
        RF035-H06MO = LT_PERIODS-PERIOD.
        RF035-H06JA = LT_PERIODS-GJAHR.
        READ TABLE LT_PERIODS INDEX RF035-H12MO.
        RF035-H12MO = LT_PERIODS-PERIOD.
        RF035-H12JA = LT_PERIODS-GJAHR.
      ENDIF.
    **Compute Due Dates fields
      PERFORM GET_AGING_BUCKETS .
      RF035-SFAE1 = SKNKK-SFAE1.
      RF035-SFAE2 = SKNKK-SFAE2.
      RF035-SFAE3 = SKNKK-SFAE3.
      RF035-SFAE4 = SKNKK-SFAE4 .
      RF035-SFAE5 = SKNKK-SFAE5.
    ENDLOOP.
    ENDFORM.                    " GET_BALANCE_SFIELDS
    *&      Form  GET_AGING_BUCKETS
          text
    -->  p1        text
    <--  p2        text
    FORM GET_AGING_BUCKETS .
      DATA: BEGIN OF LT_BUKRS OCCURS 0,
              BUKRS LIKE T001-BUKRS,
            END OF LT_BUKRS.
      DATA: BEGIN OF LT_BUKTAB OCCURS 0,
              BUKRS LIKE T001-BUKRS,
              WAERS LIKE T001-WAERS,
              KKBER LIKE T014-KKBER,
            END OF LT_BUKTAB.
      DATA: LD_LINES LIKE SY-TABIX.
    *...performance optimization: for more than one company codes check....*
    *...if balances exist and avoid selection of open items, if they don't.*
    *...exist..............................................................*
      REFRESH LT_BUKRS.
      REFRESH LT_BUKTAB.
      DESCRIBE TABLE BUKTAB LINES LD_LINES.
      IF LD_LINES GT 1.
        SELECT DISTINCT BUKRS APPENDING CORRESPONDING FIELDS
                                        OF TABLE LT_BUKRS
                              FROM KNC1 FOR ALL ENTRIES IN BUKTAB
                        WHERE BUKRS = BUKTAB-BUKRS AND
                              KUNNR = Sknkk-KUNNR.
        SELECT DISTINCT BUKRS APPENDING CORRESPONDING FIELDS
                                        OF TABLE LT_BUKRS
                              FROM KNC3 FOR ALL ENTRIES IN BUKTAB
                        WHERE BUKRS = BUKTAB-BUKRS AND
                              KUNNR = Sknkk-KUNNR.
        SORT LT_BUKRS.
        DELETE ADJACENT DUPLICATES FROM LT_BUKRS.
        LOOP AT LT_BUKRS.
          LOOP AT BUKTAB WHERE BUKRS = LT_BUKRS-BUKRS.
            MOVE-CORRESPONDING BUKTAB TO LT_BUKTAB.
            APPEND LT_BUKTAB.
          ENDLOOP.
        ENDLOOP.
      ELSE.
        READ TABLE BUKTAB INDEX 1.
        MOVE-CORRESPONDING BUKTAB TO LT_BUKTAB.
        APPEND LT_BUKTAB.
      ENDIF.
    *...process company codes for customer given by interface..........*
      LOOP AT LT_BUKTAB WHERE KKBER = s_cinfo-KKBER.
        CALL FUNCTION  'CUSTOMER_DUE_DATE_ANALYSIS'
             EXPORTING  BUKRS   = LT_BUKTAB-BUKRS
                       KKBER   = ' '
                        KKBER   = s_cinfo-KKBER
                        KUNNR   = Sknkk-KUNNR
                        RASID   = RASID
             IMPORTING  SFAE1   = RF035-SFAE1
                        SFAE2   = RF035-SFAE2
                        SFAE3   = RF035-SFAE3
                        SFAE4   = RF035-SFAE4
                        SFAE5   = RF035-SFAE5
                        SFAEL   = RF035-SFAEL
             EXCEPTIONS NO_OPEN_ITEMS = 4.
        IF SY-SUBRC = 0.
    *--  RF035 -
          SKNKK-SFAE1 = SKNKK-SFAE1 + RF035-SFAE1.
          SKNKK-SFAE2 = SKNKK-SFAE2 + RF035-SFAE2.
          SKNKK-SFAE3 = SKNKK-SFAE3 + RF035-SFAE3.
          SKNKK-SFAE4 = SKNKK-SFAE4 + RF035-SFAE4.
          SKNKK-SFAE5 = SKNKK-SFAE5 + RF035-SFAE5.
          SKNKK-SFAE5 = SKNKK-SFAE5 + RF035-SFAE5.
          SKNKK-SFAEL = SKNKK-SFAEL + RF035-SFAEL.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " GET_AGING_BUCKETS
    *&      Form  header
    This Subroutine gets data for displaying title                     *
    There are no interface parameters to be passed to this subroutine. *
    FORM header .
      wa_final-string = text-000.  APPEND wa_final TO i_final.
      wa_final-string = text-001.  APPEND wa_final TO i_final.
      wa_final-string = text-002.  APPEND wa_final TO i_final.
      wa_final-string = text-003.  APPEND wa_final TO i_final.
      wa_final-string = text-004.  APPEND wa_final TO i_final.
      wa_final-string = text-005.  APPEND wa_final TO i_final.
      wa_final-string = text-006.  APPEND wa_final TO i_final.
      wa_final-string = text-007.  APPEND wa_final TO i_final.
      wa_final-string = text-008.  APPEND wa_final TO i_final.
      wa_final-string = text-009.  APPEND wa_final TO i_final.
      wa_final-string = text-010.  APPEND wa_final TO i_final.
      wa_final-string = text-011.  APPEND wa_final TO i_final.
      wa_final-string = text-012.  APPEND wa_final TO i_final.
      wa_final-string = text-013.  APPEND wa_final TO i_final.
      wa_final-string = text-014.  APPEND wa_final TO i_final.
      wa_final-string = text-015.  APPEND wa_final TO i_final.
      wa_final-string = text-016.  APPEND wa_final TO i_final.
      wa_final-string = text-017.  APPEND wa_final TO i_final.
      wa_final-string = text-018.  APPEND wa_final TO i_final.
      wa_final-string = text-019.  APPEND wa_final TO i_final.
      wa_final-string = text-020.  APPEND wa_final TO i_final.
      wa_final-string = text-021.  APPEND wa_final TO i_final.
      wa_final-string = text-022.  APPEND wa_final TO i_final.
      wa_final-string = text-023.  APPEND wa_final TO i_final.
      wa_final-string = text-024.  APPEND wa_final TO i_final.
    ENDFORM.                               " header
    *&      Form  DOWNLOADCREDITDATA
          text
         -->P_P_PATH  text
    FORM DOWNLOADCREDITDATA  USING P_PATH.
      DATA:
          lw_file2 TYPE string .           " File Path
      lw_file2 = p_PATH.
      CALL FUNCTION 'GUI_DOWNLOAD'
         EXPORTING
      BIN_FILESIZE                    = BIN_FILESIZE
           filename                        = lw_file2
           filetype                        = 'DBF'
      APPEND                          = ' '
       write_field_separator           = ' '
      HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = 'X'
      WRITE_LF                        = 'X'
       COL_SELECT                      = 'X'
      COL_SELECT_MASK                 = ' '
      DAT_MODE                        = 'X'
      CONFIRM_OVERWRITE               = ' '
      NO_AUTH_CHECK                   = ' '
      CODEPAGE                        = ' '
      IGNORE_CERR                     = ABAP_TRUE
      REPLACEMENT                     = '#'
      WRITE_BOM                       = ' '
      TRUNC_TRAILING_BLANKS_EOL       = 'X'
      WK1_N_FORMAT                    = '0'
      WK1_N_SIZE                      = ' '
      WK1_T_FORMAT                    = ' '
      WK1_T_SIZE                      = ' '
    IMPORTING
      FILELENGTH                      = FILELENGTH
         TABLES
           data_tab                        = I_CINFO
           fieldnames                      = i_final
         EXCEPTIONS
           file_write_error                = 1
           no_batch                        = 2
           gui_refuse_filetransfer         = 3
           invalid_type                    = 4
           no_authority                    = 5
           unknown_error                   = 6
           header_not_allowed              = 7
           separator_not_allowed           = 8
           filesize_not_allowed            = 9
           header_too_long                 = 10
           dp_error_create                 = 11
           dp_error_send                   = 12
           dp_error_write                  = 13
           unknown_dp_error                = 14
           access_denied                   = 15
           dp_out_of_memory                = 16
           disk_full                       = 17
           dp_timeout                      = 18
           file_not_found                  = 19
           dataprovider_exception          = 20
           control_flush_error             = 21
      IF sy-subrc <> 0.
    Messege
      ENDIF.                               " IF sy-subrc EQ 0
    ENDFORM.                    " DOWNLOADCREDITDATA
    *&      Form  DOWNLOAD_CREDIT_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM DOWNLOAD_CREDIT_DATA .
      PERFORM HEADER.
      PERFORM DOWNLOADCREDITDATA USING P_PATH.
    ENDFORM.                    " DOWNLOAD_CREDIT_DATA
    *&      Form  GET_PGRESS_INDICATOR
          text
         -->P_L_TEXT  text
         -->P_L_PCT  text
    FORM GET_PGRESS_INDICATOR  USING    L_TEXT
                                        L_PCT.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          PERCENTAGE = l_pct
          TEXT       = l_TEXT.
    ENDFORM.                    " GET_PGRESS_INDICATOR

    If you are just Downloading to a Flat file then why dont you have logic in place for the program to dump the data read into  the file to that point depending on any criteria like accounts or customer then clear the internal table and run it in the back ground.
    try to use cursor to read the records from the table which will make it a bit more efficient than plain select stement.

  • Performance issue in Report (getting time out error)

    Hi experts,
    I am doing Performance for a Report (getting time out error)
    Please see the code below and .
    while looping internal table IVBAP after 25 minutes its showing  time out error at this poit ->
    SELECT MAX( ERDAT ) .
    please send alternate code for this .
    Advance thanks
    from
    Nagendra
    Get Sales Order Details
    CLEAR IVBAP.
    REFRESH IVBAP.
    SELECT VBELN POSNR MATNR NETWR KWMENG WERKS FROM VBAP
       INTO CORRESPONDING FIELDS OF TABLE IVBAP
         FOR ALL ENTRIES IN IVBAK
           WHERE VBELN =  IVBAK-VBELN
           AND   MATNR IN Z_MATNR
           AND   WERKS IN Z_WERKS
           AND   ABGRU = ' '.
    Check for Obsolete Materials - Get Product Hierarhy/Mat'l Description
      SORT IVBAP BY MATNR WERKS.
      CLEAR: WK_MATNR, WK_WERKS, WK_PRDHA, WK_MAKTX,
             WK_BLOCK, WK_MMSTA, WK_MSTAE.
      LOOP AT IVBAP.
          CLEAR WK_INVDATE.                                   "I6677.sn
          SELECT MAX( ERDAT ) FROM VBRP INTO WK_INVDATE WHERE
          AUBEL EQ IVBAP-VBELN AND
          AUPOS EQ IVBAP-POSNR.
          IF SY-SUBRC = 0.
              MOVE WK_INVDATE TO IVBAP-INVDT.
              MODIFY IVBAP.
          ENDIF.                                               "I6677.e n
          SELECT SINGLE * FROM MBEW WHERE             "I6759.sn
          MATNR EQ IVBAP-MATNR AND
          BWKEY EQ IVBAP-WERKS AND
          BWTAR EQ SPACE.
          IF SY-SUBRC = 0.
             MOVE MBEW-STPRS TO IVBAP-STPRS.
             IVBAP-TOT = MBEW-STPRS * IVBAP-KWMENG.
             MODIFY IVBAP.
          ENDIF.                                      "I6759.en
        IF IVBAP-MATNR NE WK_MATNR OR IVBAP-WERKS NE WK_WERKS.
          CLEAR: WK_BLOCK, WK_MMSTA, WK_MSTAE, WK_PRDHA, WK_MAKTX.
          MOVE IVBAP-MATNR TO WK_MATNR.
          MOVE IVBAP-WERKS TO WK_WERKS.
          SELECT SINGLE MMSTA FROM MARC INTO MARC-MMSTA
            WHERE MATNR = WK_MATNR
            AND   WERKS = WK_WERKS.
          IF NOT MARC-MMSTA IS INITIAL.
            MOVE '*' TO WK_MMSTA.
          ENDIF.
          SELECT SINGLE LVORM PRDHA MSTAE MSTAV FROM MARA
            INTO (MARA-LVORM, MARA-PRDHA, MARA-MSTAE, MARA-MSTAV)
            WHERE MATNR = WK_MATNR.
          IF ( NOT MARA-MSTAE IS INITIAL ) OR
             ( NOT MARA-MSTAV IS INITIAL ) OR
             ( NOT MARA-LVORM IS INITIAL ).
             MOVE '*' TO WK_MSTAE.
          ENDIF.
          MOVE MARA-PRDHA TO WK_PRDHA.
          SELECT SINGLE MAKTX FROM MAKT INTO WK_MAKTX
            WHERE MATNR = WK_MATNR
              AND SPRAS = SY-LANGU.
        ENDIF.
        IF Z_BLOCK EQ 'B'.
          IF WK_MMSTA EQ ' ' AND WK_MSTAE EQ ' '.
            DELETE IVBAP.
            CONTINUE.
          ENDIF.
        ELSEIF Z_BLOCK EQ 'U'.
          IF WK_MMSTA EQ '' OR WK_MSTAE EQ ''.
            DELETE IVBAP.
            CONTINUE.
          ENDIF.
        ELSE.
          IF WK_MMSTA EQ '' OR WK_MSTAE EQ ''.
            MOVE '*' TO WK_BLOCK.
          ENDIF.
        ENDIF.
        IF WK_PRDHA IN Z_PRDHA.                                    "I4792
          MOVE WK_BLOCK TO IVBAP-BLOCK.
          MOVE WK_PRDHA TO IVBAP-PRDHA.
          MOVE WK_MAKTX TO IVBAP-MAKTX.
          MODIFY IVBAP.
        ELSE.                                                     "I4792
          DELETE IVBAP.                                           "I4792
        ENDIF.                                                    "I4792
        IF NOT Z_ALNUM[] IS INITIAL.                              "I9076
          SELECT SINGLE * FROM MAEX                               "I9076
            WHERE MATNR = IVBAP-MATNR                             "I9076
              AND ALNUM IN Z_ALNUM.                               "I9076
          IF SY-SUBRC <> 0.                                       "I9076
            DELETE IVBAP.                                         "I9076
          ENDIF.                                                  "I9076
        ENDIF.                                                    "I9076
      ENDLOOP.

    Hi Nagendra!
    Get Sales Order Details
    CLEAR IVBAP.
    REFRESH IVBAP.
    check ivbak is not initial
    SELECT VBELN POSNR MATNR NETWR KWMENG WERKS FROM VBAP
    INTO CORRESPONDING FIELDS OF TABLE IVBAP
    FOR ALL ENTRIES IN IVBAK
    WHERE VBELN = IVBAK-VBELN
    AND MATNR IN Z_MATNR
    AND WERKS IN Z_WERKS
    AND ABGRU = ' '.
    Check for Obsolete Materials - Get Product Hierarhy/Mat'l Description
    SORT IVBAP BY MATNR WERKS.
    CLEAR: WK_MATNR, WK_WERKS, WK_PRDHA, WK_MAKTX,
    WK_BLOCK, WK_MMSTA, WK_MSTAE.
    avoid select widin loop. instead do selection outside loop.u can use read statement......and then loop if required.
    LOOP AT IVBAP.
    CLEAR WK_INVDATE. "I6677.sn
    SELECT MAX( ERDAT ) FROM VBRP INTO WK_INVDATE WHERE
    AUBEL EQ IVBAP-VBELN AND
    AUPOS EQ IVBAP-POSNR.
    IF SY-SUBRC = 0.
    MOVE WK_INVDATE TO IVBAP-INVDT.
    MODIFY IVBAP.
    ENDIF. "I6677.e n
    SELECT SINGLE * FROM MBEW WHERE "I6759.sn
    MATNR EQ IVBAP-MATNR AND
    BWKEY EQ IVBAP-WERKS AND
    BWTAR EQ SPACE.
    IF SY-SUBRC = 0.
    MOVE MBEW-STPRS TO IVBAP-STPRS.
    IVBAP-TOT = MBEW-STPRS * IVBAP-KWMENG.
    MODIFY IVBAP.
    ENDIF. "I6759.en
    IF IVBAP-MATNR NE WK_MATNR OR IVBAP-WERKS NE WK_WERKS.
    CLEAR: WK_BLOCK, WK_MMSTA, WK_MSTAE, WK_PRDHA, WK_MAKTX.
    MOVE IVBAP-MATNR TO WK_MATNR.
    MOVE IVBAP-WERKS TO WK_WERKS.
    SELECT SINGLE MMSTA FROM MARC INTO MARC-MMSTA
    WHERE MATNR = WK_MATNR
    AND WERKS = WK_WERKS.
    IF NOT MARC-MMSTA IS INITIAL.
    MOVE '*' TO WK_MMSTA.
    ENDIF.
    SELECT SINGLE LVORM PRDHA MSTAE MSTAV FROM MARA
    INTO (MARA-LVORM, MARA-PRDHA, MARA-MSTAE, MARA-MSTAV)
    WHERE MATNR = WK_MATNR.
    IF ( NOT MARA-MSTAE IS INITIAL ) OR
    ( NOT MARA-MSTAV IS INITIAL ) OR
    ( NOT MARA-LVORM IS INITIAL ).
    MOVE '*' TO WK_MSTAE.
    ENDIF.
    MOVE MARA-PRDHA TO WK_PRDHA.
    SELECT SINGLE MAKTX FROM MAKT INTO WK_MAKTX
    WHERE MATNR = WK_MATNR
    AND SPRAS = SY-LANGU.
    ENDIF.
    IF Z_BLOCK EQ 'B'.
    IF WK_MMSTA EQ ' ' AND WK_MSTAE EQ ' '.
    DELETE IVBAP.
    CONTINUE.
    ENDIF.
    ELSEIF Z_BLOCK EQ 'U'.
    IF WK_MMSTA EQ '' OR WK_MSTAE EQ ''.
    DELETE IVBAP.
    CONTINUE.
    ENDIF.
    ELSE.
    IF WK_MMSTA EQ '' OR WK_MSTAE EQ ''.
    MOVE '*' TO WK_BLOCK.
    ENDIF.
    ENDIF.
    IF WK_PRDHA IN Z_PRDHA. "I4792
    MOVE WK_BLOCK TO IVBAP-BLOCK.
    MOVE WK_PRDHA TO IVBAP-PRDHA.
    MOVE WK_MAKTX TO IVBAP-MAKTX.
    MODIFY IVBAP.
    ELSE. "I4792
    DELETE IVBAP. "I4792
    ENDIF. "I4792
    IF NOT Z_ALNUM[] IS INITIAL. "I9076
    SELECT SINGLE * FROM MAEX "I9076
    WHERE MATNR = IVBAP-MATNR "I9076
    AND ALNUM IN Z_ALNUM. "I9076
    IF SY-SUBRC 0. "I9076
    DELETE IVBAP. "I9076
    ENDIF. "I9076
    ENDIF. "I9076
    endloop.
    U have used many select queries widin loop-endloop which is a big hindrance as far as performance is concerned.Avoid such practice.
    Thanks
    Deepika

  • Time out error

    Dear All,
    One of our production system and one of HR user got time out error while executing T-code PA30 , PA40 .
    Note : we  tried the transaction ( PA30 and PA40 ) in our user id ,it work smooth ,there is no issue with in my user id as well other HR user also .
    Only the specific user facing time out error in Production server.
    Note : while executing PA30 ,PA40 t-codes ,it takes long time to get initial screen itself finally got time out error (No issue with other SAP HR users)  .
    Pls check the below logs:
    Runtime Error          TIME_OUT
           Occurred on     17.08.2011 at   08:59:00
    Time limit exceeded.
    What happened?
    The program "SAPLRHAC" has exceeded the maximum permitted runtime without
    interruption, and has therefore been terminated.
    What can you do?
    Print out the error message (using the "Print" function)
    and make a note of the actions and input that caused the
    error.
    To resolve the problem, contact your SAP system administrator.
    You can use transaction ST22 (ABAP Dump Analysis) to view and administer
    termination messages, especially those beyond their normal deletion
    date.
    Error analysis
    After a certain length of time, the program is terminated. In the case
    of a work area, this means that
    - endless loops (DO, WHILE, ...),
    - database accesses producing an excessively large result set,
    Kindly advise ,is this related to any Authorization issue ???

    Hi,
    Please share SAP_BASIS/ SAP_HR release/patch level information of the affected SAP system.
    I would suggest you to create New Temp SAP User id with exact copy of that affected SAP User ID and then try to access PA30/PA40 with that New SAP User id login into affected system. Check that, u are facing the same behavior/issue with that New Temp SAP User id ?
    Regards,
    Bhavik G. Shroff

  • HTTP time out Error in BPM.....

    Hi
    Error Description:
    We have created a Sync-Async Bridge BPM scenario in XI.
    In the BPM scenario we are calling the web service, and if the response from the web service is an error message then we have retry in a loop up to 24 times after wait for every 1 min.
    We are sending the data to the web service using a proxy created in the R/3 system.
    We are getting the time out error in the R/3 system. 
    We have changed the following parameters in XI.
    In SXMB_ADM of XI we have set the value for the following parameter.
    Category                      parameter                                                                    current value
    SA_COMM                    CHECK_FOR_ASYNC_RESPONSE_TIMEOUT                120
    In SXMB_ADM of R/3 we have set the value for the following parameter.
    Category                      parameter                                                                    current value
    RUNTIME                      HTTP_TIMEOUT                                                            120
    When we put the value as 120 for the above parameters and we try for 2 times in the BPM process, then it is sending the response back to the R/3 system after completing the whole BPM process.
    But when we increase the no of retries in the BPM process then it is not sending the response back to the R/3 system in the same way, at that time we are getting the error in SXMB_MONI of R/3 system as given below.
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    -   <!--
        Inbound Message
      -->
    - <SAP:ErrorHeader xmlns:SAP="http://sap.com/exchange/MessageFormat">
      <SAP:Context />
      <SAP:Code p1="500" p2="Timeout" p3="" p4="">HTTP.HTTP_STATUS_CODE_NEQ_OK</SAP:Code>
      <SAP:Text language="EN">HTTP status code 500 : Timeout</SAP:Text>
      </SAP:ErrorHeader>
    Please provide the solution for the same.
    Many Thanks
    Rinku Gangwani

    Hi Prateek,
    Thanks for your replay. I am able to open the URL from XI/PI.
    I tried by testing the same URL by using XI 3.0, its working fine and i am getting required data, but in PI 7.1 i am getting an error.
    Error is:
    In MONI:
    com.sap.engine.interfaces.messaging.api.exception.MessagingException: java.net.ConnectException: Connection refused: connect
    In RWB:
    Message processing failed. Cause: com.sap.engine.interfaces.messaging.api.exception.MessagingException: java.net.ConnectException: Connection timed out: connect
    What could be the reason?
    Regards,
    Venu

  • Time out error in production server  for alv grid report

    hi. i have developed alv grid report using nested select statments. when i testing in development  server it is giving the output but in production server if i give 4 months then it is showing time out error.please help me out..its urgent.
    Thanks in advance.

    Hi Manu,
    Don't use Nested selected statements.
    Use the Following  Performance Tuning Options that i have given below so that your problem can be solved.
    1)  Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
    2) Avoid for all entries in JOINS
    3) Try to avoid joins and use FOR ALL ENTRIES.
    4)   Try to restrict the joins to 1 level only ie only for tables
    5)   Avoid using Select *.
    6)   Avoid having multiple Selects from the same table in the same object.
    7)  Try to minimize the number of variables to save memory.  
    8)   The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
    9)   Avoid creation of  index as far as possible
    10) Avoid operators like  <>, > , < & like % in where clause conditions
    11) Avoid select/select single statements in loops.
    12) Try to use 'binary search' in READ internal table. Ensure table is sorted before using   BINARY SEARCH.
    13) Avoid using aggregate functions  (SUM, MAX etc) in selects ( GROUP BY , HAVING,)  
    14) Avoid using  ORDER  BY in selects
    15) Avoid Nested Selects
    16) Avoid Nested Loops of Internal Tables
    17) Try  to  use FIELD SYMBOLS.
    18) Try to avoid into Corresponding Fields of
    19) Avoid using Select  Distinct, Use DELETE ADJACENT
    <b>
    Reward Points for sure if you find it useful. </b>
    Regards
    Babu

  • Time out error in report - Urgent

    Hi Gurus,
       Am developing the report for GL Account summary from tables bkpf, bseg. Due to lot of records in production server it is coming time out error. Please help me regarding this here am attaching my code.
    REPORT ZFBLREPORT.
    *TABLES : zgltax.
    TYPE-POOLS : SLIS.
    TYPES : BEGIN OF TY_ZGLTAX,
            ZGL TYPE BSEG-HKONT,
            ZTAX1 TYPE P DECIMALS 2,
            ZTAX2 TYPE P DECIMALS 2,
            CAMOUNT TYPE RF42B-SALDO,
            PAMOUNT TYPE RF42B-SALDO,
            TCAMOUNT TYPE RF42B-SALDO,
            TPAMOUNT TYPE RF42B-SALDO,
            END OF TY_ZGLTAX.
    TYPES : BEGIN OF TY_BKPF,
            BELNR TYPE BKPF-BELNR,
            BUDAT TYPE BKPF-BUDAT,
            END OF TY_BKPF.
    TYPES : BEGIN OF TY_BSEG,
            BELNR TYPE BSIS-BELNR,
            DMBTR TYPE BSIS-DMBTR,
            SHKZG TYPE BSIS-SHKZG,
            HKONT TYPE BSIS-HKONT,
            BUDAT TYPE BSIS-BUDAT,
            BUZEI TYPE BSIS-BUZEI,
            END OF TY_BSEG.
    DATA : IT_FINAL TYPE STANDARD TABLE OF TY_ZGLTAX,
           WA_FINAL TYPE TY_ZGLTAX.
    DATA : IT_BKPF TYPE STANDARD TABLE OF TY_BKPF,
           WA_BKPF TYPE TY_BKPF.
    DATA : IT_BSEG TYPE STANDARD TABLE OF TY_BSEG,
           WA_BSEG TYPE TY_BSEG.
    DATA: CAMOUNT TYPE RF42B-SALDO,
          PAMOUNT TYPE RF42B-SALDO.
    DATA : INDEX TYPE SY-INDEX.
    DATA : ID TYPE SY-TABIX.
    DATA : START_DATE TYPE SY-DATUM.
    DATA : END_DATE TYPE SY-DATUM.
    DATA : START_QUATER TYPE SY-DATUM.
    DATA : YEAR1(4) TYPE C.
    DATA       : T_FIELDALV     TYPE SLIS_T_FIELDCAT_ALV.
    DATA       : IMPORT_VARIANT LIKE DISVARIANT.
    DATA       : XREPID         LIKE SY-REPID.
    DATA       : LAYOUT         TYPE SLIS_LAYOUT_ALV.
    SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001.
    PARAMETER : P_PERIOD(1) TYPE C OBLIGATORY,
                P_YEAR(4) TYPE C OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK BK1.
    AT SELECTION-SCREEN ON P_PERIOD.
      IF P_PERIOD > '4' OR P_PERIOD < '1'.
        P_PERIOD = ''.
        MESSAGE 'Enter Correct Quater Period' TYPE 'E'.
      ENDIF.
    START-OF-SELECTION.
      PERFORM CALC_DATE.
      PERFORM BUILD_LOGIC.
      PERFORM INITIAL_ALV_FIELDCAT CHANGING T_FIELDALV[].
      PERFORM LAYOUT.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM     = SY-REPID
          I_GRID_TITLE           = 'FBT Report'
         i_callback_top_of_page = 'FORM_TOP_PAGE'
         it_sort                = p_sort
          IS_LAYOUT              = LAYOUT
          IT_FIELDCAT            = T_FIELDALV[]
          I_SAVE                 = 'A'
        TABLES
          T_OUTTAB               = IT_FINAL.
    *&      Form  calc_date
          text
    -->  p1        text
    <--  p2        text
    FORM CALC_DATE .
      IF P_PERIOD = '1'.
        CONCATENATE P_YEAR '04' '01' INTO START_DATE.
        CONCATENATE P_YEAR '04' '01' INTO START_QUATER.
        CONCATENATE P_YEAR '06' '30' INTO END_DATE.
      ELSEIF P_PERIOD = '2'.
        CONCATENATE P_YEAR '04' '01' INTO START_DATE.
        CONCATENATE P_YEAR '07' '01' INTO START_QUATER.
        CONCATENATE P_YEAR '09' '30' INTO END_DATE.
      ELSEIF P_PERIOD = '3'.
        CONCATENATE P_YEAR '04' '01' INTO START_DATE.
        CONCATENATE P_YEAR '10' '01' INTO START_QUATER.
        CONCATENATE P_YEAR '12' '31' INTO END_DATE.
      ELSEIF P_PERIOD = '4'.
        CONCATENATE P_YEAR '04' '01' INTO START_DATE.
        YEAR1 = P_YEAR + 1.
        CONCATENATE YEAR1 '01' '01' INTO START_QUATER.
        CONCATENATE YEAR1 '03' '31' INTO END_DATE.
      ENDIF.
    ENDFORM.                    " calc_date
    *&      Form  build_logic
          text
    -->  p1        text
    <--  p2        text
    FORM BUILD_LOGIC .
      SELECT * FROM ZGLTAX INTO CORRESPONDING FIELDS OF TABLE IT_FINAL.
      IF IT_FINAL[] IS NOT INITIAL.
        LOOP AT IT_FINAL INTO WA_FINAL.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  = WA_FINAL-ZGL
            IMPORTING
              OUTPUT = WA_FINAL-ZGL.
          INDEX = SY-TABIX.
           SELECT belnr dmbtr shkzg hkont budat buzei
          SELECT *
          FROM BSIS
          INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
          WHERE
          BUKRS = '3599' AND
             HKONT = WA_FINAL-ZGL
            AND GJAHR = P_YEAR.
    Uses primary index (4.7)
          SELECT *
          FROM BSAS
          APPENDING CORRESPONDING FIELDS OF TABLE IT_BSEG
          WHERE
          BUKRS = '3599' AND
            HKONT = WA_FINAL-ZGL
            AND GJAHR = P_YEAR.
          LOOP AT IT_BSEG INTO WA_BSEG .
            IF WA_BSEG-BUDAT >= START_DATE AND WA_BSEG-BUDAT <= END_DATE.
              IF WA_BSEG-SHKZG = 'S'.
                CAMOUNT = CAMOUNT - WA_BSEG-DMBTR.
              ELSEIF WA_BSEG-SHKZG = 'H'.
                CAMOUNT = CAMOUNT + WA_BSEG-DMBTR.
              ENDIF.
            ENDIF.
            IF WA_BSEG-BUDAT >= START_QUATER AND WA_BSEG-BUDAT <= END_DATE.
              IF WA_BSEG-SHKZG = 'S'.
                PAMOUNT = PAMOUNT - WA_BSEG-DMBTR.
              ELSEIF WA_BSEG-SHKZG = 'H'.
                PAMOUNT = PAMOUNT + WA_BSEG-DMBTR.
              ENDIF.
            ENDIF.
          ENDLOOP.
          WA_FINAL-CAMOUNT = CAMOUNT.
          WA_FINAL-PAMOUNT = PAMOUNT.
          WA_FINAL-TCAMOUNT = CAMOUNT * WA_FINAL-ZTAX1 * WA_FINAL-ZTAX2 / (
    100 * 100 ).
          WA_FINAL-TPAMOUNT = PAMOUNT * WA_FINAL-ZTAX1 * WA_FINAL-ZTAX2 / (
    100 * 100 ).
          MODIFY IT_FINAL FROM WA_FINAL INDEX INDEX.
          REFRESH IT_BSEG.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " build_logic
    *&      Form  layout
          text
    FORM LAYOUT .
      LAYOUT-NO_SUBTOTALS = ' '.
    ENDFORM.                    " LAYOUT
    *&      Form  initial_alv_fieldcat
          text
         -->FIELDCAT   text
    FORM INITIAL_ALV_FIELDCAT  CHANGING FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
      DATA  : LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
      DATA  : CNTR TYPE I VALUE 1.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'ZGL'.
      LS_FIELDCAT-SELTEXT_L = 'GL A/C NO'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'ZTAX1'.
      LS_FIELDCAT-SELTEXT_L = 'BASE TAX  PERCENTAGE'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'ZTAX2'.
      LS_FIELDCAT-SELTEXT_L = 'TAX PERCENTAGE'.
      LS_FIELDCAT-OUTPUTLEN = 15.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'CAMOUNT'.
      LS_FIELDCAT-SELTEXT_L = 'CUMULATIVE AMOUNT'.
      LS_FIELDCAT-OUTPUTLEN = 20.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'TCAMOUNT'.
      LS_FIELDCAT-SELTEXT_L = 'Cumulative Tax % Amount'.
      LS_FIELDCAT-OUTPUTLEN = 20.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'PAMOUNT'.
      LS_FIELDCAT-SELTEXT_L = 'AMOUNT FOR PERIOD'.
      LS_FIELDCAT-OUTPUTLEN = 20.
      APPEND LS_FIELDCAT TO FIELDCAT.
      CLEAR LS_FIELDCAT.
      CNTR = CNTR + 1.
      LS_FIELDCAT-COL_POS = CNTR.
      LS_FIELDCAT-FIELDNAME = 'TPAMOUNT'.
      LS_FIELDCAT-SELTEXT_L = 'Tax AMOUNT FOR PERIOD'.
      LS_FIELDCAT-OUTPUTLEN = 20.
      APPEND LS_FIELDCAT TO FIELDCAT.
    ENDFORM.                    "initial_alv_fieldcat
    Points will be awarded
    Regards
    Ravi

    Hi Ravi kanth,
    You are using select * statement which is very time consuming and low performance. Dont use select * instead use select field1 field2.... into table itab  where field1 = s_field.  Use corresponding field names in the select statement.
    Follow the below rules.
    1) Dont use nested select statements
    2) If possible use for all entries in addition
    3) In the where addition make sure you give all the primary key
    4) Use Index for the selection criteria.
    5) You can also use inner joins
    6) You can try to put the data from the first select statement into an Itab and then in order to select the data from the second table use for all entries in.
    7) Use the runtime analysis SE30 and SQL Trace (ST05) to identify the performance and also to identify where the load is heavy, so that you can change the code accordingly
    <b>reward if useful</b>.
    Regards,
    sunil kairam.

  • RSA3 Checker---------Time out error.

    Dear All,
    We have enhanced "2LIS_12_VCITM" Datasource with 5 ZZ Fields and written a User Exit to populate them .But the problem is :
    1). When the Number of Datarecord/call = 100
    Display Extreme calls = 10
    The extractor pulls data fine.
    2).When the Number of Datarecord/call = 10000
    Dispplay Extreme calls = 1000
    RSA3 throws a Time out error after 600 seconds.
    It would be great if some one could take time to throw light on this issue..
    Manythanks
    Arun

    Dear Diego,
                     I hereby paste the User Exit code for your kind attention:
    For my report i need
    •     Receiving plant so I am picking from LIKP
    •     business area for receiving plant from T134G
    •     business area for issuing plant from T134G
    •     DC value from VBFA
    *•     GR-no, GR-Date, GR-Qty from EKBE*
    case: i_datasource.
    when '2LIS_12_VCITM'.
        loop at c_t_data into it_mc12vc0itm.
          select single werks
                   from likp
                   into (likp-werks)
                   where vbeln = it_mc12vc0itm-vbeln.
          if sy-subrc = 0.
            it_mc12vc0itm-zzrwerks = likp-werks.
          endif.
          select single gsber
                        from t134g
                        into (t134g-gsber)
                        where werks = it_mc12vc0itm-zzrwerks.
          if sy-subrc = 0.
            it_mc12vc0itm-zzrgsber = t134g-gsber.
          endif.
          select single gsber
                        from t134g
                        into (t134g-gsber)
                        where werks = it_mc12vc0itm-werks.
          if sy-subrc = 0.
            it_mc12vc0itm-zzgsber = t134g-gsber.
          endif.
          select single rfwrt
                        from vbfa
                        into (vbfa-rfwrt)
                        where vbeln = it_mc12vc0itm-vbeln
                        and posnv = it_mc12vc0itm-posnr
                        and vbtyp_n = 'R'
                        and matnr = it_mc12vc0itm-matnr.
          if sy-subrc = 0.
            it_mc12vc0itm-zzrfwrt = vbfa-rfwrt.
            it_mc12vc0itm-zzdmbtr = vbfa-rfwrt.
          endif.
          select single belnr budat menge
                        from ekbe
                        into (ekbe-belnr,ekbe-budat,ekbe-menge)
                        where ebeln = it_mc12vc0itm-vgbel
                        and ebelp = it_mc12vc0itm-vgpos
                        and bewtp = 'U'.
          if sy-subrc = 0.
            it_mc12vc0itm-zzgrno = ekbe-belnr.
            it_mc12vc0itm-zzgrdat = ekbe-budat.
            it_mc12vc0itm-zzgrqty = ekbe-menge.
          endif.
          modify c_t_data from it_mc12vc0itm.
        endloop.
    endcase.
    Manythanks
    Arun

  • How to Recall same activity (Sub process) if time out error occurs ??

    Hi ,
      how to recall activity/subprocess if error occurs for activiy ???
    My use case is : I need to make vCO call from cpo (either using Webtarget or using Windows Powershell Script Activity) . if time out error occurs i need to make same call again . Can any one please help on this .
    Thanks
    SivaRam.

    There is no inherently built in "recall" however this is not hard to do through content authoring.
    If you believe this activity to fail a lot then I would do this...
    *Setup a local boolean variable, default to false
    *Set a while-loop to run while that local boolean is false
    *When the activity runs if it's state is Succeeded or Not failed then set the boolean to true
    That should accomplish what you want, however following a best practice I would be a max retry on there to limit the number of times it would attempt before you need to alert yourself that there could be an actual issue.
    -shaun

  • Getting Time-Out Error in Sync-Async Bridge

    Hi All,
    My IP has a Sync-Async Bridge. I have a fork, two senders, two switchs and a transformation step inside the bridge.
    If XI takes much time to process the IP, the send step that closes sync-async bridge is not waiting for the message after a particular period and throws time out error to the sender.
    Is it possible to increase the waiting time for sync-async bridge?
    This IP works correctly 8 out of 10 times. Sometimes the message is sitting permenantly in the queue(smq2) and gives me system failure error.
    Can u tell me why this problem happening?
    Thanks & Regards,
    Senthil.

    Dear Michal/Senthil,
    Can you pl clear a confusion that i have had for ages...
    suppose there is a sync/async bridge ( i understand that it is used for sync business system too async BS communcation )
    where we have 4 steps
    sync receive - > async send -> async receive -> sync send..
    i do understand that async send and async receive are combined through correlation
    but i do not understand how do they work..
    i mean when async send say send a file to a target system...does async receive reads a file from the same folder based on the corelation or wat...
    basically can you pls explain me how do the steps 2 and 3 above work
    Edited by: Tarang Shah on Mar 3, 2009 12:51 PM

  • Time out error in MIRO in prd , but takes times to Quality server

    Hi all,
    In the sap standard transaction MIRO, in Production while executive , time out error is coming in dump, while when i execute the same tranaction in Quality server, It takes 1 hrs time , but transaction is suceesful.
    What would be the problem.
    Thanks .
    Lolo.

    Amit Gujargoud wrote:>
    > >
    sekhar manda wrote:
    > > Try after some time i think it won't goes to dump
    >
    > My motor bike is not giving good mileage. Okay I'll go inside my house and come back in few minutes. May be it will give me amazing mileage!
    No need to go inside and come, just RESTART the bike,  its just a typical software engineer's solution

  • Workflow install time-out error

    hi,
    i get a time-out error during wf configuration assistant. i believe that is has something to do with a database/workflow language conflict. the ca aborts just after setting and resetting env var 4(?) nls_lang/wf_nls_lang. any thoughts?
    thanks,
    kp

    Your question is overly terse. As this ain't Twitter, maybe you can use a few more characters to describe what you are asking for?
    Timeouts can occur in a couple of situations:
    1) On connections. By default, most client APIs give up if the connection has not completed within 15 seconds. This value is usually adjustable.
    2) When running commands. Many client APIs has a default timeout of 30 seconds, meaning that if SQL Server has not returned any data in this time frame, they give up and tell SQL Server to stop executing. If you experience this, you need to determine whether
    the timeout is the problem or the fact that it takes 30 seconds is the problem. The timeout is adjustable on the Command object. The default is a hole in the head in my opinion.
    3) Lock timeouts. This is a timeout that occurs inside SQL Server (in opposition to the other two) when a process has been waiting for a lock long enough. The default here is -1 which means "wait forever". But you can use the command SET LOCK_TIMEOUT
    to set an explicit lock timeout.
    4) When talking to linked servers. These timeouts are really the same as the first two, but they occur inside SQL Server, as here SQL Server is the client with regards to the remote data source. The default for queries is 10 minutes, a little more generous
    than the default in the client API.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • Roadmap time out error

    Hi
           when I tried to add Roles to a phase, workpackage, activity or task of a custom Road map in 'RMAUTH' transaction its taking lot of time and finally I see a time out error. Did any one encountered this issue. Please suggest
    Regards,
    Bhanu

    Your question is overly terse. As this ain't Twitter, maybe you can use a few more characters to describe what you are asking for?
    Timeouts can occur in a couple of situations:
    1) On connections. By default, most client APIs give up if the connection has not completed within 15 seconds. This value is usually adjustable.
    2) When running commands. Many client APIs has a default timeout of 30 seconds, meaning that if SQL Server has not returned any data in this time frame, they give up and tell SQL Server to stop executing. If you experience this, you need to determine whether
    the timeout is the problem or the fact that it takes 30 seconds is the problem. The timeout is adjustable on the Command object. The default is a hole in the head in my opinion.
    3) Lock timeouts. This is a timeout that occurs inside SQL Server (in opposition to the other two) when a process has been waiting for a lock long enough. The default here is -1 which means "wait forever". But you can use the command SET LOCK_TIMEOUT
    to set an explicit lock timeout.
    4) When talking to linked servers. These timeouts are really the same as the first two, but they occur inside SQL Server, as here SQL Server is the client with regards to the remote data source. The default for queries is 10 minutes, a little more generous
    than the default in the client API.
    Erland Sommarskog, SQL Server MVP, [email protected]

Maybe you are looking for