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.