Skip to Content
0
Former Member
Dec 25, 2007 at 08:33 AM

Performance Issue

259 Views

Hi,

My report is very slow....

Plz tell me what can i do.....

code...............

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

TABLES : VBAK, VBRP, VBRK, KNA1, T001, LIKP, VBPA, TVKBT, TVGRT, KONV, VBKD, VBFA, T052, BSAD.

TYPE-POOLS: SLIS.

DATA: BEGIN OF ITAB OCCURS 0,

VKBUR LIKE VBAK-VKBUR , " Sales Office

BEZEI LIKE TVKBT-BEZEI, " Description

KUNNR LIKE VBAK-KUNNR , " Sold to party

BSTNK LIKE VBAK-BSTNK , " Customer PO No.

NAME1 LIKE KNA1-NAME1 , " CUSTOMER NAME

VBELN LIKE VBAK-VBELN , " Sale Order Number

AUDAT LIKE VBAK-AUDAT , " SALES DOC. DATE

NETWR LIKE VBAK-NETWR , " SALES DOC VALUE

VBELN1 LIKE VBRP-VBELN , " BILLING DOCUMENT NO.

FKDAT LIKE VBRK-FKDAT , " BILLING DATE

NETWR1 LIKE VBRK-NETWR , " BILLING DOCUMENT VALUE

MWSBK LIKE VBRK-MWSBK , " TAX AMOUNT

CD_AMT TYPE P DECIMALS 2 , " CD AMOUNT

AMT_DUE TYPE P DECIMALS 2 , " AMOUNT DUE

FKART LIKE VBRK-FKART , " BILLING TYPE

BLART LIKE BSID-BLART , " DOC TYPE

DAYS LIKE T052-ZTAG1 , " Number of days

DUE_DT LIKE SY-DATUM , " Due Date

ZTERM LIKE VBKD-ZTERM , " PAYMENT TERM

KNUMV LIKE VBRK-KNUMV , " VBRK DOCUMENT CONDITION

BELNR LIKE BSAD-BELNR , " DOC. NO.

AUGBL LIKE BSAD-AUGBL , " CLEARING DOC.

END OF ITAB .

DATA: BEGIN OF ITAB1 OCCURS 0,

KNUMV LIKE KONV-KNUMV , " DOCUMENT CONDITION

KSCHL LIKE KONV-KSCHL ,

KAWRT LIKE KONV-KAWRT ,

KBETR LIKE KONV-KBETR ,

KWERT LIKE KONV-KWERT , " Condition Value

END OF ITAB1 .

DATA : WA1 LIKE ITAB1.

DATA: BEGIN OF ITAB2 OCCURS 0,

KNUMV LIKE KONV-KNUMV , " DOCUMENT CONDITION

KSCHL LIKE KONV-KSCHL ,

KAWRT LIKE KONV-KAWRT ,

KBETR LIKE KONV-KBETR ,

KWERT LIKE KONV-KWERT , " Condition Value

END OF ITAB2 .

DATA : BEGIN OF ITAB3 OCCURS 0.

INCLUDE STRUCTURE ITAB.

DATA : END OF ITAB3.

DATA : X TYPE I.

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

DATA : W_CONTAINER TYPE SCRFNAME VALUE 'CL_GRID',

W_CPROG TYPE LVC_S_LAYO,

G_REPID LIKE SY-REPID,

W_SAVE TYPE C,

W_EXIT TYPE C,

CL_GRID TYPE REF TO CL_GUI_ALV_GRID,

CL_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

IT_FLD_CATALOG TYPE SLIS_T_FIELDCAT_ALV,

WA_FLD_CATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE ,

LAYOUT TYPE SLIS_LAYOUT_ALV,

COL_POS LIKE SY-CUCOL ,

ALVFC TYPE SLIS_T_FIELDCAT_ALV,

IT_SORT TYPE SLIS_T_SORTINFO_ALV.

***----


SELECTION SCREEN -


SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME.

SELECT-OPTIONS: VKBUR FOR VBAK-VKBUR, " Sales Office

KUNNR FOR VBAK-KUNNR, " Sold to party

FKDAT FOR VBRK-FKDAT, " OBLIGATORY . " Created on

FKART FOR VBRK-FKART, " Billing Type

DUE_DT FOR SY-DATUM. " Due Date

SELECTION-SCREEN END OF BLOCK A.

SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME.

PARAMETERS: NORMAL RADIOBUTTON GROUP GR1,

FULL RADIOBUTTON GROUP GR1.

SELECTION-SCREEN END OF BLOCK B.

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

IF FULL = 'X'.

PERFORM FILL_CATALOG1 USING:

  • 'VKBUR' 'ITAB' 'SALES OFFICE',

'BEZEI' 'ITAB' 'BRANCH NAME',

'KUNNR' 'ITAB' 'CUST CODE',

'NAME1' 'ITAB' 'NAME' ,

'BSTNK' 'ITAB' 'CUST PO NO.' ,

'VBELN' 'ITAB' 'SALES DOC NO.',

'AUDAT' 'ITAB' 'SALES DOC DATE',

'VBELN1' 'ITAB' 'BILLING DOC NO.' ,

'FKDAT' 'ITAB' 'BILLING DATE',

'NETWR1' 'ITAB' 'NET VALUE' ,

'MWSBK' 'ITAB' 'TAX AMOUNT' ,

'CD_AMT' 'ITAB' 'CD AMOUNT' ,

'AMT_DUE' 'ITAB' 'AMOUNT DUE' ,

'FKART' 'ITAB' 'BILL TYPE' ,

'BLART' 'ITAB' 'DOC TYPE' ,

'AUGBL' 'ITAB' 'CLEARING DOC.' ,

'DUE_DT' 'ITAB' 'DUE DATE',

'ZTERM' 'ITAB' 'PAYMENT TERMS'.

ELSE.

PERFORM FILL_CATALOG1 USING:

  • 'VKBUR' 'ITAB' 'SALES OFFICE',

'BEZEI' 'ITAB' 'BRANCH NAME',

'KUNNR' 'ITAB' 'CUST CODE',

'NAME1' 'ITAB' 'NAME' ,

'BSTNK' 'ITAB' 'CUST PO NO.' ,

'VBELN' 'ITAB' 'SALES DOC NO.',

'AUDAT' 'ITAB' 'SALES DOC DATE',

'VBELN1' 'ITAB' 'BILLING DOC NO.' ,

'FKDAT' 'ITAB' 'BILLING DATE',

'NETWR1' 'ITAB' 'NET VALUE' ,

'MWSBK' 'ITAB' 'TAX AMOUNT' ,

'CD_AMT' 'ITAB' 'CD AMOUNT' ,

'AMT_DUE' 'ITAB' 'AMOUNT DUE' ,

'FKART' 'ITAB' 'BILL TYPE' ,

'DUE_DT' 'ITAB' 'DUE DATE',

'ZTERM' 'ITAB' 'PAYMENT TERMS'.

ENDIF.

SELECT DISTINCT AVKBUR AKUNNR AVBELN AAUDAT ANETWR ABSTNK BVBELN CBEZEI

INTO (ITAB-VKBUR, ITAB-KUNNR, ITAB-VBELN, ITAB-AUDAT, ITAB-NETWR, ITAB-BSTNK, ITAB-VBELN1, ITAB-BEZEI)

FROM VBAK AS A INNER JOIN VBRP AS B ON AVBELN = BAUBEL

INNER JOIN TVKBT AS C ON AVKBUR = CVKBUR

WHERE A~VKBUR IN VKBUR

AND A~KUNNR IN KUNNR

AND C~SPRAS = 'EN'.

APPEND ITAB.

ENDSELECT.

SORT ITAB BY VBELN.

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

LOOP AT ITAB.

SELECT SINGLE FKDAT NETWR MWSBK KNUMV FKART FROM VBRK INTO (ITAB-FKDAT, ITAB-NETWR1, ITAB-MWSBK, ITAB-KNUMV, ITAB-FKART)

WHERE VBELN = ITAB-VBELN1

AND FKDAT IN FKDAT.

IF SY-SUBRC NE 0.

DELETE ITAB.

CONTINUE.

ENDIF.

MODIFY ITAB INDEX SY-TABIX TRANSPORTING FKDAT NETWR1 MWSBK KNUMV FKART.

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

SELECT NAME1 FROM KNA1 INTO ITAB-NAME1 WHERE KUNNR = ITAB-KUNNR .

MODIFY ITAB INDEX SY-TABIX TRANSPORTING NAME1 .

ENDSELECT .

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

SELECT AUGBL BLART FROM BSAD INTO (ITAB-AUGBL, ITAB-BLART) WHERE BELNR = ITAB-VBELN1.

MODIFY ITAB INDEX SY-TABIX TRANSPORTING AUGBL BLART.

ENDSELECT .

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

SELECT ZTERM FROM VBKD INTO ITAB-ZTERM WHERE VBELN = ITAB-VBELN .

MODIFY ITAB INDEX SY-TABIX TRANSPORTING ZTERM .

ENDSELECT.

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

SELECT KNUMV KAWRT KBETR KSCHL INTO CORRESPONDING FIELDS OF TABLE ITAB1 FROM KONV

  • FOR ALL ENTRIES IN ITAB

WHERE KNUMV = ITAB-KNUMV AND KSCHL IN ('SKTO') .

X = 0.

LOOP AT ITAB1 INTO WA1.

ON CHANGE OF WA1-KNUMV.

ITAB2[] = ITAB1[].

DELETE ITAB2 WHERE KNUMV NE WA1-KNUMV.

ENDON.

ENDLOOP.

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

IF SY-SUBRC <> 0.

IF FULL <> 'X'.

DELETE ITAB.

CONTINUE.

ENDIF.

ELSE.

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

LOOP AT ITAB2.

X = X + ITAB2-KAWRT * ITAB2-KBETR / 1000 .

ENDLOOP .

ITAB-CD_AMT = X.

MODIFY ITAB.

REFRESH ITAB1.

REFRESH ITAB2.

ENDIF.

ENDLOOP .

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

LOOP AT ITAB .

ITAB-AMT_DUE = ITAB-NETWR1 + ITAB-MWSBK + ITAB-CD_AMT .

MODIFY ITAB INDEX SY-TABIX TRANSPORTING AMT_DUE .

ENDLOOP .

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

LOOP AT ITAB.

SELECT SINGLE ZTAG1 INTO ITAB-DAYS FROM T052 WHERE ZTERM = ITAB-ZTERM.

ITAB-DUE_DT = ITAB-FKDAT + ITAB-DAYS.

*******

IF DUE_DT-LOW <> 0 OR DUE_DT-HIGH <> 0.

IF DUE_DT-LOW = 0.

DUE_DT-LOW = DUE_DT-HIGH.

ENDIF.

IF DUE_DT-HIGH = 0.

DUE_DT-HIGH = DUE_DT-LOW.

ENDIF.

IF ITAB-DUE_DT LT DUE_DT-LOW OR ITAB-DUE_DT GT DUE_DT-HIGH.

DELETE ITAB.

CLEAR ITAB.

CONTINUE.

ENDIF.

ENDIF.

*******

MODIFY ITAB INDEX SY-TABIX TRANSPORTING DUE_DT .

ENDLOOP.

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

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = 'ZSALES_REPORT'

IS_LAYOUT = LAYOUT

IT_FIELDCAT = IT_FLD_CATALOG

IT_SORT = IT_SORT

I_DEFAULT = 'X'

I_SAVE = 'A'

TABLES

T_OUTTAB = ITAB

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

&----


*& Form FILL_CATALOG1

&----


  • text

----


  • -->P_FIELDNAME text

  • -->P_REF_TABLE text

  • -->P_SCRTEXT text

----


FORM FILL_CATALOG1 USING P_FIELDNAME TYPE ANY

P_REF_TABLE TYPE ANY

P_SCRTEXT TYPE ANY.

CLEAR : WA_FLD_CATALOG.

WA_FLD_CATALOG-FIELDNAME = P_FIELDNAME.

WA_FLD_CATALOG-TABNAME = P_REF_TABLE.

WA_FLD_CATALOG-SELTEXT_S = P_SCRTEXT.

WA_FLD_CATALOG-SELTEXT_M = P_SCRTEXT.

WA_FLD_CATALOG-SELTEXT_L = P_SCRTEXT.

APPEND WA_FLD_CATALOG TO IT_FLD_CATALOG.

ENDFORM. " fill_catalog1

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

Thanks.....

Edited by: Anil Kumar on Dec 25, 2007 4:50 PM