2008 Apr 02 7:48 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
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
2008 Apr 02 7:55 PM
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
2008 Apr 02 8:05 PM
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
2008 Apr 02 8:07 PM
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
2008 Apr 02 9:19 PM
Hi,
see [Wiki|https://wiki.sdn.sap.com/wiki/display/ABAP/Performance]
about performance. You will find all about selects and loops.
Thanks.
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |