‎2008 Jan 11 10:58 AM
Hi,
My report has taken too long time....
when i check in ST05 (Performance Analysis), it display few lines in RED mark...
but i m unable to read that code..
Plz help...
‎2008 Jan 11 11:00 AM
‎2008 Jan 11 11:11 AM
Hi Dear...
Plz check my code....
***********************************
REPORT ZSALES_REPORT LINE-SIZE 250 MESSAGE-ID ZPU .
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.
*****
*******************************
IF SY-UNAME = 'BRANCH-KOL'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('E001','E003')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-JAM'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('E002','E004')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-DEL'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N001','N005','N008','N009','N010')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-MRT'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N008')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-LCK'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N005')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-BHO'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N004','W004','N006','W006')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-LDN'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N002')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-CHG'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N007')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-JPR'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('N003')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-CHN'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('S001','S007')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-COM'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('S002', 'S008')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-BNG'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('S003', 'S009', 'S010')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-HYD'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('S004','S006')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-KOCH'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('S005')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-MUM'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('W001')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-PUN'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('W002')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSEIF SY-UNAME = 'BRANCH-AHM'.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN ('W003','W005','N006','W007')
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ELSE.
SELECT DISTINCT A~VKBUR A~KUNNR A~VBELN A~AUDAT A~NETWR A~BSTNK B~VBELN C~BEZEI
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 A~VBELN = B~AUBEL
INNER JOIN TVKBT AS C ON A~VKBUR = C~VKBUR
WHERE A~VKBUR IN VKBUR
AND A~KUNNR IN KUNNR
AND C~SPRAS = 'EN'.
APPEND ITAB.
ENDSELECT.
ENDIF.
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: Alvaro Tejada Galindo on Jan 11, 2008 5:38 PM
‎2008 Jan 11 12:09 PM
Hi Prince-
There are a lot of changes need to be done in ur code:
First, DO NOT use SELECT-ENDSELECT. Always use SELECT into TABLE ITAB..
Secondly, you have used SELECT-ENDSELECT, SELECT SINGLE inside of a LOOP. Avoid using SELECT inside LOOP. Instead use READ statement inside LOOP.
the above two are the main reasons why ur program is very very slow. Make changes as told above and u will get ur problem resolved.
Best of luck!
Shakir
‎2008 Jan 11 12:15 PM
Hi Prince,
I hope your coding is paid by line. Thats what we use to call spaghetti code - use a fork to roll it up
To enhance the program, do not repeat the nearly identical SELECT statement a couple of times. The difference I can see is that you restrict do different sales offices depending on user.
Create a range for sales offices
data:
lt_vkur type range of vbak-vkbur.
and fill it fifferently for users:
case sy-uname.
when 'BRANCH-KOL'.
perform insert_range using 'IEQ':
'E001' '' changing lt_vkur,
'E003' '' changing lt_vkur.
when 'BRANCH-JAM.
* ...
endcase.
Then first select the order data using ... where vkbur in lt_vkbur...INNER JOIN TVKBT .. INTO corresponding fields of TABLE itab.
After that do a SELECT ... FOR ALL ENTRIES IN itab FROM VBRP - the where condition must have AUBELN and AUPOS.
Then put them together.
Sorry, luch time!
Regards,
Clemens
‎2008 Jan 11 2:43 PM
A couple of things:
Your SELECTS against VBAK don't use any key.
Further along, you LOOP AT itab, and within that loop, you do a SELECT FOR ALL ENTRIES IN itab.
Rob
‎2008 Jan 12 5:21 AM
Hi,
If u don't mind, Plz. Tell me where can i change in my code...for better performance...
Plz bold that code, where i need to change....
Thanks....
‎2008 Jan 11 11:03 AM
Hi Prince,
To analyze the commands in red, place a cursor on the OPEN command of the query and click on the "explain query" button on application toolbar to get explanation on the query. It tells you whether the query is using any index or not, if not, then ensure the WHERE clause is structured to use an index either secondary and preferably primary,
Also, the button on application toolbar next to Explain, will take you to the query in the ABAP program (this will help you read the query).
Regards,
Aditya