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

Increase performance

Former Member
0 Likes
666

hi all,

selection-screen is

year

period

I need to get wbs elemets(ps_psp_pnr) from GLPCA table where user enters year and period and activ = sd00.

cast of sales = for each wbs elment we must add all amounts where account nos 831501 or 831201.

for this requirement i wrote the program like this. but the program taking too much time to get the out put,

if any body know different way to write these program to increase performance.

&----


*& Report ZFRSGDD1 *

*& *

&----


*& *

*& *

&----


REPORT ZFRSGDD1 .

TABLES: ZGLPCA.

PARAMETERS: RYEAR LIKE ZGLPCA-RYEAR.

PARAMETERS: POPER LIKE ZGLPCA-POPER.

DATA: BEGIN OF ITAB OCCURS 0,

ACTIV LIKE ZGLPCA-ACTIV,

RYEAR LIKE ZGLPCA-RYEAR,

POPER LIKE ZGLPCA-POPER,

REFDOCNR LIKE ZGLPCA-REFDOCNR,

RPRCTR LIKE ZGLPCA-RPRCTR,

RACCT LIKE ZGLPCA-RACCT,

KUNNR LIKE ZGLPCA-KUNNR,

MATNR LIKE ZGLPCA-MATNR,

PS_PSP_PNR LIKE ZGLPCA-PS_PSP_PNR,

HSL LIKE ZGLPCA-HSL,

END OF ITAB.

DATA: BEGIN OF JTAB OCCURS 0,

ACTIV LIKE ZGLPCA-ACTIV,

RYEAR LIKE ZGLPCA-RYEAR,

POPER LIKE ZGLPCA-POPER,

REFDOCNR LIKE ZGLPCA-REFDOCNR,

RPRCTR LIKE ZGLPCA-RPRCTR,

RACCT LIKE ZGLPCA-RACCT,

KUNNR LIKE ZGLPCA-KUNNR,

MATNR LIKE ZGLPCA-MATNR,

PS_PSP_PNR LIKE ZGLPCA-PS_PSP_PNR,

HSL LIKE ZGLPCA-HSL,

CSALE LIKE ZGLPCA-HSL.

END OF JTAB.

SELECT ACTIV RYEAR POPER HSL REFDOCNR RPRCTR RACCT KUNNR MATNR

PS_PSP_PNR INTO TABLE ITAB FROM ZGLPCA WHERE RYEAR = RYEAR AND

POPER = POPER.

LOOP AT ITAB WHERE ACTIV = 'SD00'.

MOVE-CORRESPONDING ITAB TO JTAB.

APPEND JTAB.

ENDLOOP.

SORT ITAB BY REFDOCNR.

LOOP AT JTAB.

LOOP AT ITAB.

CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.

CHECK ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.

JTAB-CSALE = JTAB-CSALE + ITAB-HSL.

MOVE-CORRESPONDING ITAB TO JTAB.

MODIFY JTAB.

ENDIF.

ENDLOOP.

LOOP AT JTAB.

WRITE: / JTAB-ACTIV,JTAB-RYEAR,JTAB-POPER,JTAB-HSL,JTAB-REFDOCNR,

JTAB-RPRCTR,JTAB-RACCT,JTAB-KUNNR,JTAB-MATNR,JTAB-PS_PSP_PNR,JTAB-HSL,

JTAB-CSALE.

ENDLOOP.

1 ACCEPTED SOLUTION
Read only

uwe_schieferstein
Active Contributor
0 Likes
632

Hello Praveen

I guess on ENDLOOP is missing in you code sample.

LOOP AT JTAB.
LOOP AT ITAB.

CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.

CHECK ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.

JTAB-CSALE = JTAB-CSALE + ITAB-HSL.

MOVE-CORRESPONDING ITAB TO JTAB.

MODIFY JTAB.

ENDIF.

ENDLOOP.  " entries in JTAB 
ENDLOOP.  " entries in ITAB <- missing

Why don't you put your conditions into the LOOPs?

LOOP AT JTAB.
LOOP AT ITAB 
        WHERE ( ps_psp_pnr = JTAB-ps_psp_pnr )  AND
              ( racct = '0000831201'  OR
                racct = '0000831501' ).  

* CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.  " DEL
* CHECK ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.  " DEL

JTAB-CSALE = JTAB-CSALE + ITAB-HSL.

MOVE-CORRESPONDING ITAB TO JTAB.

MODIFY JTAB.

ENDIF.

ENDLOOP.  " entries in JTAB 
ENDLOOP.  " entries in ITAB 

If you don't need ITAB anymore you could delete the obsolete entries before entering the LOOPs in order to fasten looping.

DELETE ITAB
        WHERE ( racct <> '0000831201'  AND
                racct <> '0000831501' ).

Regards

Uwe

4 REPLIES 4
Read only

uwe_schieferstein
Active Contributor
0 Likes
633

Hello Praveen

I guess on ENDLOOP is missing in you code sample.

LOOP AT JTAB.
LOOP AT ITAB.

CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.

CHECK ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.

JTAB-CSALE = JTAB-CSALE + ITAB-HSL.

MOVE-CORRESPONDING ITAB TO JTAB.

MODIFY JTAB.

ENDIF.

ENDLOOP.  " entries in JTAB 
ENDLOOP.  " entries in ITAB <- missing

Why don't you put your conditions into the LOOPs?

LOOP AT JTAB.
LOOP AT ITAB 
        WHERE ( ps_psp_pnr = JTAB-ps_psp_pnr )  AND
              ( racct = '0000831201'  OR
                racct = '0000831501' ).  

* CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.  " DEL
* CHECK ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.  " DEL

JTAB-CSALE = JTAB-CSALE + ITAB-HSL.

MOVE-CORRESPONDING ITAB TO JTAB.

MODIFY JTAB.

ENDIF.

ENDLOOP.  " entries in JTAB 
ENDLOOP.  " entries in ITAB 

If you don't need ITAB anymore you could delete the obsolete entries before entering the LOOPs in order to fasten looping.

DELETE ITAB
        WHERE ( racct <> '0000831201'  AND
                racct <> '0000831501' ).

Regards

Uwe

Read only

Former Member
0 Likes
632

Try these:

1. Check the order of fields in the select statement , it should be same as the order in which they appear in the table ZGLPCA.

Similarly , check the where conditions.

2. Optionally u may create a secondary index on the table with fields RYEAR and POPER

3. Replace the statements

LOOP AT JTAB.

LOOP AT ITAB.

CHECK JTAB-PS_PSP_PNR = ITAB-PS_PSP_PNR.

CHECK ITAB-RACCT = '0000831201' OR

ITAB-RACCT = '0000831501'.

By following points

LOOP AT JTAB

LOOP AT ITAB WHERE PS_PSP_PNR = JTAB-PS_PSP_PNR

AND (RACCT = '0000831201' OR

RACCT = '0000831501')

4. Instead of move-corresponding u may explicitly name the fields to be moved , before the append statement.

Read only

Former Member
0 Likes
632

Hi Praveen,

1. make sure that the fields that you are passing on to your select statement are in table order ...

SELECT ACTIV RYEAR POPER HSL REFDOCNR RPRCTR RACCT KUNNR MATNR

PS_PSP_PNR INTO TABLE ITAB FROM ZGLPCA WHERE RYEAR = RYEAR AND

POPER = POPER.

2. Avoid using loop statemnet within a loop statement use Read table statement for the same...

3. Avoid using Check statements ..

Regards,

Santosh

Read only

Former Member
0 Likes
632

Please check the below code for changes

REPORT ZFRSGDD1 .

TABLES: ZGLPCA.

PARAMETERS: RYEAR LIKE ZGLPCA-RYEAR.

PARAMETERS: POPER LIKE ZGLPCA-POPER.

DATA: BEGIN OF ITAB OCCURS 0,

ACTIV LIKE ZGLPCA-ACTIV,

PS_PSP_PNR LIKE ZGLPCA-PS_PSP_PNR,

RYEAR LIKE ZGLPCA-RYEAR,

POPER LIKE ZGLPCA-POPER,

REFDOCNR LIKE ZGLPCA-REFDOCNR,

RPRCTR LIKE ZGLPCA-RPRCTR,

RACCT LIKE ZGLPCA-RACCT,

KUNNR LIKE ZGLPCA-KUNNR,

MATNR LIKE ZGLPCA-MATNR,

HSL LIKE ZGLPCA-HSL,

END OF ITAB.

DATA: BEGIN OF JTAB OCCURS 0,

ACTIV LIKE ZGLPCA-ACTIV,

PS_PSP_PNR LIKE ZGLPCA-PS_PSP_PNR,

RYEAR LIKE ZGLPCA-RYEAR,

POPER LIKE ZGLPCA-POPER,

REFDOCNR LIKE ZGLPCA-REFDOCNR,

RPRCTR LIKE ZGLPCA-RPRCTR,

RACCT LIKE ZGLPCA-RACCT,

KUNNR LIKE ZGLPCA-KUNNR,

MATNR LIKE ZGLPCA-MATNR,

HSL LIKE ZGLPCA-HSL,

CSALE LIKE ZGLPCA-HSL.

END OF JTAB.

SELECT ACTIV RYEAR POPER HSL REFDOCNR RPRCTR RACCT KUNNR MATNR

PS_PSP_PNR INTO TABLE ITAB FROM ZGLPCA WHERE RYEAR = RYEAR AND

POPER = POPER.

LOOP AT ITAB.

check itab-ACTIV = 'SD00'.

AT new PS_PSP_PNR.

ltot = 0.

endat.

if ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.

ltot = ltot + ITAB-HSL.

endif.

MOVE-CORRESPONDING ITAB TO JTAB.

move ltot to jtab-csale.

append jtab.

at end of ps_psp_pnr.

loop at jtab where ps_pnp_pnr = itab-ps_psp_pnr.

move ltot to jtab-csale.

modify jtab.

endloop.

endat.

ENDLOOP.

SORT ITAB BY REFDOCNR.

LOOP AT JTAB.

WRITE: / JTAB-ACTIV,JTAB-RYEAR,JTAB-POPER,JTAB-HSL,JTAB-REFDOCNR,

JTAB-RPRCTR,JTAB-RACCT,JTAB-KUNNR,JTAB-MATNR,JTAB-PS_PSP_PNR,JTAB-HSL,

JTAB-CSALE.

ENDLOOP.

Other solution can also be to update the CSALE vaule in another table with the key as PS_PSP_PNR and you can read the value during the write loop as illustrated below.

Loop at itab.

check itab-activ = 'SD0O'.

check ITAB-RACCT = '0000831201' OR ITAB-RACCT = '0000831501'.

at new ps_psp_pnr.

ltot = 0.

endat.

ltot = ltot + itab-hsl.

at end of ps_psp_pnr.

move itab-ps_psp_pnr to xtab-ps_psp_pnr.

move ltot to xtab-csale.

modify xtab.

endat.

endloop.

loop at jtab.

write jtab

read table xtab with key ps_psp_pnr = jtab-ps_psp_pnr.

write xtab-csale.

endloop.