Skip to Content
0
Former Member
May 09, 2008 at 09:05 AM

Performance improvement

68 Views

Hi All,

Please check the below main logic code of report and change the code to improve the performance of the report, because its taking too much time to run.

START-OF-SELECTION.

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

CALL FUNCTION 'Z_PRT_PROTOCOL_REPORT_CALL'.

  • DISPLAY SELECTIONS IF REQUESTED

  • -------------------------------

PERFORM DISPLAY_SELECTIONS.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtaining WBS Elements'

EXCEPTIONS

OTHERS = 1.

PERFORM GET_CURR_RATE USING TKA01-WAERS SY-DATUM

CHANGING GS_CORATE.

SELECT * FROM TKA02 WHERE KOKRS = P_KOKRS.

ENDSELECT.

REFRESH WBS_TAB.

CLEAR WBS_TAB.

REFRESH CURR_TAB.

  • Build s_pctr from Profit Center Group.

IF NOT P_PRCTRH IS INITIAL.

PERFORM BUILD_HIERARCHY.

ENDIF.

IF NOT S_PRCTR-LOW IS INITIAL.

IF P_ALL = 'X' OR P_INDIR = 'X'.

SELECT KOSTL PRCTR FROM CSKS INTO TABLE GT_CSKS

WHERE PRCTR IN S_PRCTR AND datbi => sy-datum.

ENDIF.

SELECT * FROM PRPS WHERE PKOKR = P_KOKRS AND PRCTR IN S_PRCTR.

WBS_TAB-INTNO = PRPS-PSPNR.

WBS_TAB-OBJNR = PRPS-OBJNR.

WBS_TAB-PRCTR = PRPS-PRCTR.

WBS_TAB-PSPHI = PRPS-PSPHI.

APPEND WBS_TAB.

ENDSELECT.

SORT WBS_TAB BY INTNO.

IF P_ALL = 'X' OR P_INDIR = 'X'.

SORT GT_CSKS BY KOSTL.

PERFORM PROCESS_MAIN_CC.

ENDIF.

PERFORM PROCESS_MAIN_WBS.

PERFORM OBTAIN_OTHER_DATA.

ELSEIF NOT S_KOSTL IS INITIAL.

CLEAR GT_CSKS.

REFRESH GT_CSKS.

SELECT KOSTL PRCTR FROM CSKS INTO TABLE GT_CSKS

WHERE KOKRS = P_KOKRS

AND KOSTL IN S_KOSTL

AND datbi => sy-datum.

PERFORM PROCESS_MAIN_CC.

PERFORM OBTAIN_OTHER_DATA.

ELSEIF NOT WBS IS INITIAL.

PERFORM BUILD_WBS_HIERARCHY.

SORT WBS_TAB BY INTNO.

PERFORM PROCESS_MAIN_WBS.

PERFORM OBTAIN_OTHER_DATA.

ELSE.

PERFORM PROCESS_MAIN_PO.

PERFORM OBTAIN_OTHER_DATA.

ENDIF.

FORM PROCESS_MAIN_WBS.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtaining PO data'

EXCEPTIONS

OTHERS = 1.

DATA: LC_PSPID LIKE PROJ-PSPID.

LOOP AT WBS_TAB.

CLEAR: HOLD_PO_NBR,

HOLD_PO_LINE.

SELECT * FROM EKKN

WHERE PS_PSP_PNR = WBS_TAB-INTNO

AND EBELN IN S_PO

AND KOKRS = P_KOKRS.

CHECK EKKN-LOEKZ <> 'X'.

CLEAR GC_PROFL.

WRITE WBS_TAB-PSPHI TO LC_PSPID.

*select direct projects only if p_direct = 'X'.

IF P_DIRECT = 'X'.

SELECT SINGLE PROFL FROM PROJ INTO GC_PROFL

WHERE PSPID = LC_PSPID.

IF GC_PROFL+4(3) = '002'

OR GC_PROFL+4(3) = '007'.

CONTINUE.

ENDIF.

ENDIF.

  • select indirect projects and cost centers only when p_indir = 'X'.

IF P_INDIR = 'X'.

SELECT SINGLE PROFL FROM PROJ INTO GC_PROFL

WHERE PSPID = LC_PSPID.

IF GC_PROFL+4(3) NE '002'

AND GC_PROFL+4(3) NE '007'.

CONTINUE.

ENDIF.

ENDIF.

CLEAR: GC_EINDT,

GC_PRCTR.

GC_PRCTR = WBS_TAB-PRCTR.

PERFORM PROCESS_MAIN2.

ENDSELECT.

ENDLOOP.

ENDFORM.

----


  • FORM PROCESS_MAIN_PO *

----


  • ........ *

----


FORM PROCESS_MAIN_PO.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtaining data via PO nbr'

EXCEPTIONS

OTHERS = 1.

CLEAR: HOLD_PO_NBR, HOLD_PO_LINE.

SELECT * FROM EKKN WHERE EBELN IN S_PO AND KOKRS = P_KOKRS.

CHECK EKKN-LOEKZ <> 'X'.

CLEAR: GC_EINDT,

GC_PRCTR.

GC_PRCTR = EKKN-PRCTR.

PERFORM PROCESS_MAIN2.

ENDSELECT.

ENDFORM.

----


  • FORM OBTAIN_OTHER_DATA *

----


  • ........ *

----


FORM OBTAIN_OTHER_DATA.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtain GR Transactions'

EXCEPTIONS

OTHERS = 1.

SORT ITAB BY PO_NO LINE ZEKKN.

LOOP AT ITAB.

ON CHANGE OF ITAB-PO_NO OR

ITAB-LINE.

PERFORM GET_GR_AMTS_FOR_PO_LINE.

ENDON.

ENDLOOP.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtain IR Transactions'

EXCEPTIONS

OTHERS = 1.

SORT GR_TAB BY PO_NO LINE ZEKKN.

LOOP AT ITAB.

PERFORM MOVE_GR_AMTS_TO_ITAB.

PERFORM GET_IR_AMTS_FOR_PO_LINE.

PERFORM FIGURE_COMMITMENTS_COOI.

  • perform figure_committments.

MODIFY ITAB.

ENDLOOP.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtaining Other Data'

EXCEPTIONS

OTHERS = 1.

SORT ITAB BY VEND_NO.

LOOP AT ITAB.

ON CHANGE OF ITAB-VEND_NO.

CLEAR LFA1.

SELECT SINGLE * FROM LFA1 WHERE LIFNR = ITAB-VEND_NO.

ENDON.

ITAB-VEND_NAME = LFA1-NAME1.

MODIFY ITAB.

ENDLOOP.

SORT ITAB BY WBS.

LOOP AT ITAB WHERE NOT WBS IS INITIAL.

ON CHANGE OF ITAB-WBS.

CLEAR: PRPS, PROJ.

SELECT SINGLE * FROM PRPS WHERE PSPNR = ITAB-WBS.

SELECT SINGLE * FROM PROJ WHERE PSPNR = PRPS-PSPHI.

ENDON.

ITAB-OBJ_TITLE = PRPS-POST1.

ITAB-COST_OBJ = PRPS-POSID.

ITAB-PROJ_NBR = PROJ-PSPID.

MODIFY ITAB.

ENDLOOP.

SORT ITAB BY KOSTL.

LOOP AT ITAB WHERE NOT KOSTL IS INITIAL.

ON CHANGE OF ITAB-KOSTL.

CLEAR CSKT.

SELECT * FROM CSKT WHERE KOKRS = P_KOKRS

AND KOSTL = ITAB-KOSTL.

ENDSELECT.

ENDON.

ITAB-OBJ_TITLE = CSKT-KTEXT.

WRITE CSKT-KOSTL TO ITAB-COST_OBJ.

MODIFY ITAB.

ENDLOOP.

SORT ITAB BY AUFNR.

LOOP AT ITAB WHERE NOT AUFNR IS INITIAL.

ON CHANGE OF ITAB-AUFNR.

CLEAR COAS.

SELECT SINGLE * FROM COAS WHERE AUFNR = ITAB-AUFNR.

ENDON.

ITAB-OBJ_TITLE = COAS-KTEXT.

WRITE COAS-AUFNR TO ITAB-COST_OBJ.

MODIFY ITAB.

ENDLOOP.

SORT ITAB BY ANLN1.

LOOP AT ITAB WHERE NOT ANLN1 IS INITIAL.

ON CHANGE OF ITAB-ANLN1.

CLEAR ANLA.

SELECT * FROM ANLA WHERE BUKRS = TKA02-BUKRS

AND ANLN1 = ITAB-ANLN1.

ENDSELECT.

ENDON.

ITAB-OBJ_TITLE = ANLA-TXT50.

WRITE ANLA-ANLN1 TO ITAB-COST_OBJ.

MODIFY ITAB.

ENDLOOP.

LOOP AT ITAB.

MOVE-CORRESPONDING ITAB TO SUM_TAB.

COLLECT SUM_TAB.

ENDLOOP.

ENDFORM.

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

  • FUNCTION: PROCESS_MAIN2 *

  • DESCRIPTION: *

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

FORM PROCESS_MAIN2.

SELECT SINGLE * FROM EKKO WHERE EBELN = EKKN-EBELN.

CHECK EKKO-LIFNR IN VEND_NO.

CHECK EKKO-AEDAT IN S_POCDAT.

SELECT SINGLE * FROM EKPO WHERE EBELN = EKKN-EBELN AND

EBELP = EKKN-EBELP.

CHECK EKPO-LOEKZ <> 'L' AND

EKPO-LOEKZ <> 'S'.

SELECT SINGLE EINDT FROM EKET INTO GC_EINDT

WHERE EBELN = EKPO-EBELN

AND EBELP = EKPO-EBELP

AND EINDT IN S_EINDT.

IF NOT S_EINDT IS INITIAL.

CHECK GC_EINDT IN S_EINDT.

ENDIF.

CLEAR ITAB.

ITAB-PO_CREATE = EKKO-AEDAT.

ITAB-DEL_DAT = GC_EINDT.

ITAB-PO_NO = EKKO-EBELN.

ITAB-CURR_PO = EKKO-WAERS.

ITAB-CURR_CO = TKA01-WAERS.

ITAB-LINE = EKPO-EBELP.

ITAB-GR_SW = EKPO-WEPOS.

ITAB-GR_NON_VAL_SW = EKPO-WEUNB.

IF EKPO-WEUNB = 'X'. "Goods Receipt, Non-Value

ITAB-GR_SW = ''. "switch evaluation of commitment to IR

ENDIF.

ITAB-TEXT = EKPO-TXZ01.

ITAB-QTY_ORD = EKPO-MENGE.

ITAB-UOM = EKPO-MEINS.

ITAB-AMOUNT_DOC = EKPO-EFFWR.

ITAB-WBS = EKKN-PS_PSP_PNR.

ITAB-COST_ELEM = EKKN-SAKTO.

ITAB-KOSTL = EKKN-KOSTL.

ITAB-PRCTR = GC_PRCTR.

ITAB-ANLN1 = EKKN-ANLN1.

ITAB-AUFNR = EKKN-AUFNR.

ITAB-ZEKKN = EKKN-ZEKKN.

IF EKKN-VPROZ <> 0.

PERCENT = EKKN-MENGE / EKPO-MENGE.

ITAB-AMOUNT_DOC = ITAB-AMOUNT_DOC * PERCENT .

ITAB-QTY_ORD = ITAB-QTY_ORD * PERCENT .

ENDIF.

IF ITAB-CURR_CO NE ITAB-CURR_PO.

  • itab-amount_co = itab-amount_doc * ekko-wkurs.

  • Convert from PO curr to CO currency

GS_CONV_AMT = ITAB-AMOUNT_DOC / GS_CORATE.

PERFORM GET_CURR_RATE USING ITAB-CURR_PO EKKO-AEDAT

CHANGING GS_RATE.

ITAB-AMOUNT_CO = GS_CONV_AMT * GS_RATE.

ELSE.

ITAB-AMOUNT_CO = ITAB-AMOUNT_DOC.

ENDIF.

  • Convert from PO curr to CO Code currency

CLEAR: ITAB-CURR_LOC, GS_RATE.

PERFORM GET_COCD_RATE USING EKKO-BUKRS

CHANGING ITAB-CURR_LOC GS_RATE.

IF ITAB-CURR_LOC NE ITAB-CURR_PO.

  • Get company code/local currency and rate.

GS_CONV_AMT = ITAB-AMOUNT_DOC / GS_RATE.

PERFORM GET_CURR_RATE USING ITAB-CURR_PO ITAB-PO_CREATE

CHANGING GS_RATE.

ITAB-AMOUNT_LOC = GS_CONV_AMT * GS_RATE.

ELSE.

ITAB-AMOUNT_LOC = ITAB-AMOUNT_DOC.

ENDIF.

ITAB-VEND_NO = EKKO-LIFNR.

  • if itab-amount_doc <> 0.

APPEND ITAB.

CLEAR ITAB.

  • endif.

  • clear itab.

ENDFORM.

FORM PROCESS_MAIN_CC.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

TEXT = 'Obtaining PO data'

EXCEPTIONS

OTHERS = 1.

LOOP AT GT_CSKS.

SELECT * FROM EKKN

WHERE KOSTL = GT_CSKS-KOSTL

AND EBELN IN S_PO

AND KOKRS = P_KOKRS.

CHECK EKKN-LOEKZ <> 'X'.

CLEAR: GC_EINDT,

GC_PRCTR.

GC_PRCTR = GT_CSKS-PRCTR.

PERFORM PROCESS_MAIN2.

ENDSELECT.

ENDLOOP.

ENDFORM.

Edited by: Subramanyam Sesetty on May 9, 2008 11:13 AM