Skip to Content
0
Former Member
May 07, 2008 at 10:08 AM

Improve the performance of the code

51 Views

Hi All,

Just check the below report and give some hits to improve the performance of the report.

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.

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.

APPEND ITAB.

CLEAR ITAB.

ENDFORM.

Thanks,

Subbu.