Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Wanted to increase performance

Former Member
0 Likes
755

Hi,

I had a report which is displaying the correct data but i execute on PRD Server,it gets Request Time Out.So i want to increase the performance of it.Plzz help me out in doing this.


REPORT  ZWIP_STOCK NO STANDARD PAGE HEADING LINE-SIZE 150.

TABLES: AFPO, AFRU, MARA, MAKT.

DATA: BEGIN OF ITAB OCCURS 0,
      AUFNR LIKE AFPO-AUFNR,
      MATNR LIKE AFPO-MATNR,
      LGORT LIKE AFPO-LGORT,
      MEINS LIKE MARA-MEINS,
      NTGEW LIKE MARA-NTGEW,
      MTART LIKE MARA-MTART,
      STOCK TYPE P LENGTH 10 DECIMALS 3,
      END OF ITAB.

DATA : ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE.

DATA : DESC LIKE MAKT-MAKTX.

SELECT-OPTIONS : MAT_TYPE FOR MARA-MTART.
SELECT-OPTIONS : P_MATNR FOR AFPO-MATNR.

DATA : V_MINOPR LIKE AFRU-VORNR,
       V_MAXOPR LIKE AFRU-VORNR,
       V_QTYMIN LIKE AFRU-GMNGA,
       V_QTYMAX LIKE AFRU-GMNGA,
       V_QTY TYPE P LENGTH 10 DECIMALS 3.

        SELECT A~AUFNR A~MATNR A~LGORT B~MEINS B~NTGEW B~MTART FROM AFPO AS A
          INNER JOIN MARA AS B ON A~MATNR = B~MATNR
            INTO TABLE ITAB WHERE ELIKZ <> 'X' AND MTART IN MAT_TYPE AND A~MATNR IN P_MATNR.


    ITAB2[] = ITAB[].

    SORT ITAB2 BY MATNR MEINS MTART NTGEW.
    DELETE ADJACENT DUPLICATES FROM ITAB2 COMPARING MATNR MEINS MTART NTGEW.

   LOOP AT ITAB2.

    V_QTY = 0.

      LOOP AT ITAB WHERE MATNR = ITAB2-MATNR.

        SELECT MIN( VORNR ) INTO V_MINOPR FROM AFRU WHERE AUFNR = ITAB-AUFNR.
        SELECT MAX( VORNR ) INTO V_MAXOPR FROM AFRU WHERE AUFNR = ITAB-AUFNR.


        SELECT SUM( GMNGA ) INTO V_QTYMIN FROM AFRU WHERE AUFNR = ITAB-AUFNR AND VORNR =  V_MINOPR.
        SELECT SUM( GMNGA ) INTO V_QTYMAX FROM AFRU WHERE AUFNR = ITAB-AUFNR AND VORNR =  V_MAXOPR.

        V_QTY = V_QTY + V_QTYMIN - V_QTYMAX.

      ENDLOOP.

      ITAB2-STOCK = V_QTY.
      MODIFY ITAB2.

    ENDLOOP.

    LOOP AT ITAB2.
          WRITE:/ ITAB2-MATNR,ITAB2-STOCK.
    ENDLOOP.

Edited by: Alvaro Tejada Galindo on Apr 2, 2008 3:14 PM

Hi,

I had a report which is displaying the correct data but i execute on PRD Server,it gets Request Time Out.So i want to increase the performance of it.Plzz help me out in doing this.


REPORT  ZWIP_STOCK NO STANDARD PAGE HEADING LINE-SIZE 150.

TABLES: AFPO, AFRU, MARA, MAKT.

DATA: BEGIN OF ITAB OCCURS 0,
      AUFNR LIKE AFPO-AUFNR,
      MATNR LIKE AFPO-MATNR,
      LGORT LIKE AFPO-LGORT,
      MEINS LIKE MARA-MEINS,
      NTGEW LIKE MARA-NTGEW,
      MTART LIKE MARA-MTART,
      STOCK TYPE P LENGTH 10 DECIMALS 3,
      END OF ITAB.

DATA : ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE.

DATA : DESC LIKE MAKT-MAKTX.

SELECT-OPTIONS : MAT_TYPE FOR MARA-MTART.
SELECT-OPTIONS : P_MATNR FOR AFPO-MATNR.

DATA : V_MINOPR LIKE AFRU-VORNR,
       V_MAXOPR LIKE AFRU-VORNR,
       V_QTYMIN LIKE AFRU-GMNGA,
       V_QTYMAX LIKE AFRU-GMNGA,
       V_QTY TYPE P LENGTH 10 DECIMALS 3.

        SELECT A~AUFNR A~MATNR A~LGORT B~MEINS B~NTGEW B~MTART FROM AFPO AS A
          INNER JOIN MARA AS B ON A~MATNR = B~MATNR
            INTO TABLE ITAB WHERE ELIKZ <> 'X' AND MTART IN MAT_TYPE AND A~MATNR IN P_MATNR.


    ITAB2[] = ITAB[].

    SORT ITAB2 BY MATNR MEINS MTART NTGEW.
    DELETE ADJACENT DUPLICATES FROM ITAB2 COMPARING MATNR MEINS MTART NTGEW.

   LOOP AT ITAB2.

    V_QTY = 0.

      LOOP AT ITAB WHERE MATNR = ITAB2-MATNR.

        SELECT MIN( VORNR ) INTO V_MINOPR FROM AFRU WHERE AUFNR = ITAB-AUFNR.
        SELECT MAX( VORNR ) INTO V_MAXOPR FROM AFRU WHERE AUFNR = ITAB-AUFNR.


        SELECT SUM( GMNGA ) INTO V_QTYMIN FROM AFRU WHERE AUFNR = ITAB-AUFNR AND VORNR =  V_MINOPR.
        SELECT SUM( GMNGA ) INTO V_QTYMAX FROM AFRU WHERE AUFNR = ITAB-AUFNR AND VORNR =  V_MAXOPR.

        V_QTY = V_QTY + V_QTYMIN - V_QTYMAX.

      ENDLOOP.

      ITAB2-STOCK = V_QTY.
      MODIFY ITAB2.

    ENDLOOP.

    LOOP AT ITAB2.
          WRITE:/ ITAB2-MATNR,ITAB2-STOCK.
    ENDLOOP.

Edited by: Alvaro Tejada Galindo on Apr 2, 2008 3:14 PM

4 REPLIES 4
Read only

Former Member
0 Likes
725

Write the select statements outside of the loop and use for all entries.

Then in the loop use the Read statement for the key.

You dont need to use 2 loop statements as the data is same. you can give the condition instead.

It gives better performance.

Thanks,

Srinivas

Read only

0 Likes
725

After sorting u can delete adjacent duplicates

Write Select Statements outside and use read statements and binary search.

Don't declare Tables..Instead declare the variables as types of the corresponding parameters...

Search in SDN u find lot of performance related information

Thanks,

Chaithanya

Read only

b_deterd2
Active Contributor
0 Likes
725

Instead of a itab with a header line you should use a field-symbol to point to the data directly. You can change the field-symbol value directly without the modify tab statement.

Loop at itab assigning <fs>.

...

endloop.

Should help a little,

Bert

Read only

0 Likes
725

Hi,

see [Wiki|https://wiki.sdn.sap.com/wiki/display/ABAP/Performance]

about performance. You will find all about selects and loops.

Thanks.