‎2007 Sep 25 4:35 PM
Hello Friends, I have a code working fine in DEV but going to short dump in Testing because ut exceeds the time limit to run.
It basically deals with shippment, delivery, order and billing
PLease look at the code and let me know if it can be made to run faster.
I have included comments in the code as where it takes time and goes to dump.
For any questions please let me know.
Ster.
REPORT ZVR00423 NO STANDARD PAGE HEADING
LINE-SIZE 80
LINE-COUNT 65(0)
MESSAGE-ID ZZ.
*************************************************************************
*Tables declaration
*************************************************************************
TABLES : VBAP, " Sales Document: Item Data
VBAK, " Sales Document: Header Data
VBEP, " Sales Document: Schedule Line Data
LIKP, " SD Document: Delivery Header Data
VTTK, " Shipment Header
MKPF, " Header: Material Document
VBRP, " Billing Document: Item Data
VBRK. " Billing Document: Header Data
TYPE-POOLS: KKBLO,
SLIS.
**************************************************************************
*Types Declaration
**************************************************************************
TYPES :
BEGIN OF S_LIKP_LIPS,
VBELN LIKE LIKP-VBELN,
VKORG LIKE LIKP-VKORG,
VSTEL LIKE LIKP-VSTEL,
ERDAT LIKE LIKP-ERDAT,
VGBEL LIKE LIPS-VGBEL,
VGPOS LIKE LIPS-VGPOS,
POSNR LIKE LIPS-POSNR,
WADAT_IST LIKE LIKP-WADAT_IST,
END OF S_LIKP_LIPS,
BEGIN OF S_VBAK_VBAP_VBEP,
VBELN LIKE VBAK-VBELN,
VGBEL LIKE VBAP-VGBEL, " reference Sales Order
POSNR LIKE VBAP-POSNR, " Sales Order Line item
MATNR LIKE VBAP-MATNR, " Material
KUMENG LIKE VBAP-KWMENG, " Quantity
KUNNR LIKE VBAK-KUNNR, " Customer Sold to Party
VKBUR LIKE VBAK-VKBUR, " Sales Office
VKGRP LIKE VBAK-VKGRP, " Sales Group
AUDAT LIKE VBAK-AUDAT, " Order Creation date
ROMS1 LIKE VBEP-ROMS1,
EDATU LIKE VBEP-EDATU, " Commit date
BMENG LIKE VBEP-BMENG,
WADAT LIKE VBEP-WADAT,
END OF S_VBAK_VBAP_VBEP,
BEGIN OF S_VBRK_VBRP,
VBELN LIKE VBRK-VBELN,
VGBEL LIKE VBRP-VGBEL,
AUBEL LIKE VBRP-AUBEL,
AUPOS LIKE VBRP-AUPOS,
VGPOS LIKE VBRP-VGPOS,
FKDAT LIKE VBRK-FKDAT, " Invoice date
NETWR LIKE VBRK-NETWR, " Order(Invoice) Value
END OF S_VBRK_VBRP,
BEGIN OF S_VTTK_VTTP,
TKNUM LIKE VTTK-TKNUM,
VBELN LIKE VTTP-VBELN,
ERDAT LIKE VTTK-ERDAT,
END OF S_VTTK_VTTP,
BEGIN OF S_MKPF,
MBLNR LIKE MKPF-MBLNR, " PGI Doc
BUDAT LIKE MKPF-BUDAT, " PGI Doc date
END OF S_MKPF,
BEGIN OF S_VBFA,
VBELV LIKE VBFA-VBELV,
POSNV LIKE VBFA-POSNV,
VBELN LIKE VBFA-VBELN,
POSNN LIKE VBFA-POSNN,
VBTYP_N LIKE VBFA-VBTYP_N,
WAERS LIKE VBFA-WAERS,
VBTYP_V LIKE VBFA-VBTYP_V,
END OF S_VBFA.
**************************************************************************
*Internal table declaration
**************************************************************************
DATA: DISVARIANT LIKE DISVARIANT,
EVENTCAT TYPE SLIS_T_EVENT,
EVENTCAT_LN LIKE LINE OF EVENTCAT,
FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT_KKB TYPE KKBLO_T_FIELDCAT,
FIELDCAT_LN LIKE LINE OF FIELDCAT,
KEYINFO TYPE SLIS_KEYINFO_ALV,
LAYOUT TYPE SLIS_LAYOUT_ALV,
LAYOUT_KKB TYPE KKBLO_LAYOUT,
PGM LIKE SY-REPID,
PRINTCAT TYPE SLIS_PRINT_ALV,
SORTCAT TYPE SLIS_T_SORTINFO_ALV,
SORTCAT_LN LIKE LINE OF SORTCAT,
BEGIN OF COLTAB OCCURS 50,
FIELDNAME LIKE FIELDCAT_LN-FIELDNAME,
END OF COLTAB.
DATA :
BEGIN OF T_OUTPUT OCCURS 0,
VBELN_ORD LIKE VBAP-VBELN, " Sales Order
POSNR LIKE VBAP-POSNR, " Sales Order Line item
KUNNR LIKE VBAK-KUNNR, " Customer Sold to Party
VKBUR LIKE VBAK-VKBUR, " Sales Office
VKGRP LIKE VBAK-VKGRP, " Sales Group
AUDAT LIKE VBAK-AUDAT, " Order Creation date
MATNR LIKE VBAP-MATNR, " Material
KUMENG LIKE VBAP-KWMENG, " Quantity
*If VBEP-ROMS1 > 0
EDATU_COM LIKE VBEP-EDATU, " Commit date
*If VBEP-BMENG > 0
EDATU_CON LIKE VBEP-EDATU, "Confirmation date
WADAT LIKE VBEP-WADAT, " Ship date
VBELN_DEL LIKE LIKP-VBELN, " Delivery Doc
ERDAT LIKE LIKP-ERDAT, " Delivery Doc date
TKNUM LIKE VTTK-TKNUM, " Shipping Doc
ERDAT1 LIKE VTTK-ERDAT, " Shipping Doc Date
MBLNR LIKE MKPF-MBLNR, " PGI Doc
BUDAT LIKE MKPF-BUDAT, " PGI Doc date
VGBEL1 LIKE VBRP-VGBEL, " Invoice
FKDAT LIKE VBRK-FKDAT, " Invoice date
NETWR LIKE VBRK-NETWR, " Order(Invoice) Value
END OF T_OUTPUT.
DATA : T_VBAK_VBAP_VBEP TYPE TABLE OF S_VBAK_VBAP_VBEP,
T_LIKP_LIPS TYPE TABLE OF S_LIKP_LIPS,
T_VBRK_VBRP TYPE TABLE OF S_VBRK_VBRP,
T_VTTK_VTTP TYPE TABLE OF S_VTTK_VTTP,
T_VBFA TYPE TABLE OF S_VBFA.
**************************************************************************
*Work Area Declaration
**************************************************************************
DATA : W_VBAK_VBAP_VBEP LIKE LINE OF T_VBAK_VBAP_VBEP,
W_LIKP_LIPS LIKE LINE OF T_LIKP_LIPS,
W_VBRK_VBRP LIKE LINE OF T_VBRK_VBRP,
W_VTTK_VTTP LIKE LINE OF T_VTTK_VTTP,
W_VBFA LIKE LINE OF T_VBFA.
**************************************************************************
*Variable Declaration
**************************************************************************
DATA : V_REPID TYPE SYREPID.
INCLUDE ZSI00001.
**************************************************************************
*SELECTION-SCREEN
**************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS :S_VKORG FOR LIKP-VKORG NO INTERVALS OBLIGATORY,
"Sales Organization
S_VTWEG FOR VBAK-VTWEG NO INTERVALS, "Distribution Channel
S_SPART FOR VBAK-SPART NO INTERVALS, "Division
S_DATEN FOR VTTK-DATEN OBLIGATORY, "Shipment Completed
S_VSTEL FOR LIKP-VSTEL NO INTERVALS OBLIGATORY.
"Shipping Point
SELECTION-SCREEN : END OF BLOCK 1.
* Parameter for list viewer display variant
PARAMETERS: VARIANT LIKE DISVARIANT-VARIANT.
DATA: PRINT TYPE SLIS_PRINT_ALV.
**************************************************************************
*INITIALIZATION
**************************************************************************
INITIALIZATION.
V_REPID = SY-REPID.
AT SELECTION-SCREEN ON VARIANT.
CHECK NOT VARIANT IS INITIAL.
PERFORM CHECK_VARIANT_EXISTENCE USING VARIANT 'U'.
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR VARIANT.
PERFORM F4_DISPLAY_VARIANT USING VARIANT 'U'.
**************************************************************************
*START-OF-SELECTION
**************************************************************************
START-OF-SELECTION.
PERFORM CHECK_TCODE_AUTHORITY USING 'SA38'.
PERFORM GET_DATA.
PERFORM PROCESS_DATA.
**************************************************************************
*END-OF-SELECTION
**************************************************************************
END-OF-SELECTION.
PERFORM WRITE_OUTPUT.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT VTTK~TKNUM
VTTP~VBELN VTTK~ERDAT
INTO TABLE T_VTTK_VTTP
FROM VTTK
INNER JOIN VTTP
ON VTTK~TKNUM = VTTP~TKNUM
WHERE DATEN IN S_DATEN.
IF NOT T_VTTK_VTTP[] IS INITIAL.
SELECT LIKP~VBELN
LIKP~VKORG LIKP~VSTEL
LIKP~ERDAT LIPS~VGBEL LIPS~VGPOS
LIPS~POSNR LIKP~WADAT_IST
INTO TABLE T_LIKP_LIPS
FROM LIKP
INNER JOIN LIPS
ON LIKP~VBELN = LIPS~VBELN
FOR ALL ENTRIES IN T_VTTK_VTTP
WHERE LIKP~VBELN = T_VTTK_VTTP-VBELN
AND LIKP~VSTEL IN S_VSTEL
AND LIKP~VKORG IN S_VKORG.
IF NOT T_LIKP_LIPS[] IS INITIAL.
SELECT VBAK~VBELN VBAP~VGBEL VBAP~POSNR
VBAP~MATNR VBAP~KWMENG VBAK~KUNNR VBAK~VKBUR
VBAK~VKGRP VBAK~AUDAT VBEP~ROMS1 VBEP~EDATU
VBEP~BMENG
INTO TABLE T_VBAK_VBAP_VBEP
FROM VBAK
INNER JOIN VBAP
ON VBAK~VBELN = VBAP~VBELN
INNER JOIN VBEP
ON VBAK~VBELN = VBEP~VBELN
FOR ALL ENTRIES IN T_LIKP_LIPS
WHERE VBAK~VBELN = T_LIKP_LIPS-VGBEL
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAP~POSNR = T_LIKP_LIPS-VGPOS.
IF NOT T_VBAK_VBAP_VBEP[] IS INITIAL.
SELECT VBRK~VBELN VBRP~VGBEL
VBRP~AUBEL VBRP~AUPOS
VBRP~VGPOS VBRK~FKDAT VBRK~NETWR
INTO TABLE T_VBRK_VBRP
FROM VBRK
INNER JOIN VBRP
ON VBRK~VBELN = VBRP~VBELN
FOR ALL ENTRIES IN T_VBAK_VBAP_VBEP
WHERE VBRP~AUBEL = T_VBAK_VBAP_VBEP-VBELN
AND VBRP~AUPOS = T_VBAK_VBAP_VBEP-POSNR.
SELECT VBRK~VBELN VBRP~VGBEL " Short dump - Time exceeds
VBRP~AUBEL VBRP~AUPOS
VBRP~VGPOS VBRK~FKDAT VBRK~NETWR
APPENDING TABLE T_VBRK_VBRP
FROM VBRK
INNER JOIN VBRP
ON VBRK~VBELN = VBRP~VBELN
FOR ALL ENTRIES IN T_LIKP_LIPS
WHERE VBRP~VGBEL = T_LIKP_LIPS-VBELN
AND VBRP~VGPOS = T_LIKP_LIPS-POSNR.
SELECT VBELV
POSNV VBELN
POSNN VBTYP_N WAERS
VBTYP_V
INTO TABLE T_VBFA
FROM VBFA
FOR ALL ENTRIES IN T_VBAK_VBAP_VBEP
WHERE VBELV = T_VBAK_VBAP_VBEP-VBELN
AND VBTYP_N = 'R'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
SORT T_LIKP_LIPS BY VBELN POSNR.
SORT T_VBAK_VBAP_VBEP BY VBELN POSNR.
SORT T_VBRK_VBRP BY AUBEL AUPOS.
SORT T_VBFA BY VBELV POSNV.
LOOP AT T_VTTK_VTTP INTO W_VTTK_VTTP.
LOOP AT T_LIKP_LIPS INTO W_LIKP_LIPS
WHERE VBELN = W_VTTK_VTTP-VBELN
AND VSTEL IN S_VSTEL
AND VKORG IN S_VKORG.
READ TABLE T_VBAK_VBAP_VBEP INTO W_VBAK_VBAP_VBEP
WITH KEY VBELN = W_LIKP_LIPS-VGBEL
POSNR = W_LIKP_LIPS-VGPOS
BINARY SEARCH.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY AUBEL = W_VBAK_VBAP_VBEP-VBELN
AUPOS = W_VBAK_VBAP_VBEP-POSNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY VGBEL = W_LIKP_LIPS-VBELN
VGPOS = W_LIKP_LIPS-POSNR
BINARY SEARCH.
ENDIF.
READ TABLE T_VBFA INTO W_VBFA
WITH KEY VBELV = W_VBAK_VBAP_VBEP-VBELN
POSNV = W_VBAK_VBAP_VBEP-POSNR.
PERFORM WRITE_TO_T_OUTPUT.
ENDLOOP.
ENDLOOP.
ENDFORM. " process_data
*&---------------------------------------------------------------------*
*& Form WRITE_TO_T_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_TO_T_OUTPUT .
* T_OUTPUT-VGBEL = W_VBAK_VBAP_VBEP-VGBEL.
T_OUTPUT-VBELN_ORD = W_VBAK_VBAP_VBEP-VBELN.
T_OUTPUT-POSNR = W_VBAK_VBAP_VBEP-POSNR.
T_OUTPUT-KUNNR = W_VBAK_VBAP_VBEP-KUNNR.
T_OUTPUT-VKBUR = W_VBAK_VBAP_VBEP-VKBUR.
T_OUTPUT-VKGRP = W_VBAK_VBAP_VBEP-VKGRP.
T_OUTPUT-AUDAT = W_VBAK_VBAP_VBEP-AUDAT.
T_OUTPUT-MATNR = W_VBAK_VBAP_VBEP-MATNR.
T_OUTPUT-KUMENG = W_VBAK_VBAP_VBEP-KUMENG.
IF W_VBAK_VBAP_VBEP-ROMS1 > 0.
T_OUTPUT-EDATU_COM = W_VBAK_VBAP_VBEP-EDATU.
ELSEIF W_VBAK_VBAP_VBEP-BMENG > 0.
T_OUTPUT-EDATU_CON = W_VBAK_VBAP_VBEP-EDATU.
ENDIF.
T_OUTPUT-WADAT = W_VBAK_VBAP_VBEP-WADAT.
T_OUTPUT-VBELN_DEL = W_LIKP_LIPS-VBELN.
T_OUTPUT-ERDAT = W_LIKP_LIPS-ERDAT.
T_OUTPUT-TKNUM = W_VTTK_VTTP-TKNUM.
T_OUTPUT-ERDAT1 = W_VTTK_VTTP-ERDAT.
* T_OUTPUT-MBLNR = MKPF-MBLNR.
* T_OUTPUT-BUDAT = MKPF-BUDAT.
T_OUTPUT-MBLNR = W_VBFA-VBELN.
T_OUTPUT-BUDAT = W_LIKP_LIPS-WADAT_IST.
T_OUTPUT-VGBEL1 = W_VBRK_VBRP-VBELN.
T_OUTPUT-FKDAT = W_VBRK_VBRP-FKDAT.
T_OUTPUT-NETWR = W_VBRK_VBRP-NETWR.
APPEND T_OUTPUT.
CLEAR: T_OUTPUT, W_VBAK_VBAP_VBEP,
* W_LIKP_LIPS, W_VTTK_VTTP,
W_VBRK_VBRP, W_VBFA.
ENDFORM. " WRITE_TO_T_OUTPUT
*&---------------------------------------------------------------------*
*& Form write_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM WRITE_OUTPUT .
SORT T_OUTPUT BY TKNUM VBELN_ORD POSNR.
PERFORM CALL_LIST_VIEWER.
ENDFORM. " write_output
*----------------------------------------------------------------------*
* FORM CHECK_VARIANT_EXISTENCE
*----------------------------------------------------------------------*
* Verify that a variant on the selection screen exists
*----------------------------------------------------------------------*
FORM CHECK_VARIANT_EXISTENCE USING VARNAME LIKE DISVARIANT-VARIANT
SAVE TYPE C.
DATA: XDISVAR LIKE DISVARIANT.
XDISVAR-REPORT = SY-REPID.
XDISVAR-VARIANT = VARNAME.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = SAVE
CHANGING
CS_VARIANT = XDISVAR
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE E256(56) WITH VARNAME.
* Anzeigevariante &1 nicht gefunden
ENDIF.
DISVARIANT-REPORT = SY-REPID.
DISVARIANT-VARIANT = VARNAME.
ENDFORM. "check_variant_existence
*----------------------------------------------------------------------*
* Form F4_DISPLAY_VARIANT
*----------------------------------------------------------------------*
* F4 help to find a display variant
* varname = name of the dynpro field for which f4 is requested
* save = type of list variant saving
* ' ' = no saving allowed
* 'A' = standard & user specific variants can be saved
* 'U' = only user specific variants can be saved
* 'X' = only standard variants can be saved
*----------------------------------------------------------------------*
FORM F4_DISPLAY_VARIANT USING VARNAME LIKE DISVARIANT-VARIANT
SAVE TYPE C.
DISVARIANT-REPORT = SY-REPID.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = DISVARIANT
I_SAVE = SAVE
IMPORTING
ES_VARIANT = DISVARIANT
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC = 0.
VARNAME = DISVARIANT-VARIANT.
ELSE.
MESSAGE S245(56).
* Keine Anzeigevariante(n) vorhanden
ENDIF.
ENDFORM. " F4_DISPLAY_VARIANT
*&---------------------------------------------------------------------*
*& Form CALL_LIST_VIEWER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CALL_LIST_VIEWER .
CLEAR: T_OUTPUT.
PERFORM BUILD_FIELDCAT USING:
'VBELN_ORD' 'T_OUTPUT'
TEXT-001 'CHAR' 11 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'POSNR' 'T_OUTPUT'
TEXT-002 'CHAR' 21 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'KUNNR' 'T_OUTPUT'
TEXT-003 'CHAR' 24 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'VKBUR' 'T_OUTPUT'
TEXT-004 'CHAR' 12 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'VKGRP' 'T_OUTPUT'
TEXT-005 'CURR' 11 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'AUDAT' 'T_OUTPUT'
TEXT-006 'DATS' 19 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'MATNR' 'T_OUTPUT'
TEXT-007 'CHAR' 18 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'KUMENG' 'T_OUTPUT'
TEXT-008 'QUAN' 15 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'EDATU_COM' 'T_OUTPUT'
TEXT-009 'DATS' 11 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'EDATU_CON' 'T_OUTPUT'
TEXT-010 'DATS' 17 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'WADAT' 'T_OUTPUT'
TEXT-011 'DATA' 10 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'VBELN_DEL' 'T_OUTPUT'
TEXT-012 'CHAR' 12 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ERDAT' 'T_OUTPUT'
TEXT-013 'DATS' 17 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'TKNUM' 'T_OUTPUT'
TEXT-014 'CHAR' 12 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ERDAT1' 'T_OUTPUT'
TEXT-015 'DATS' 17 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'MBLNR' 'T_OUTPUT'
TEXT-016 'CHAR' 10 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'BUDAT' 'T_OUTPUT'
TEXT-017 'DATS' 12 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'VGBEL1' 'T_OUTPUT'
TEXT-018 'CHAR' 10 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'FKDAT' 'T_OUTPUT'
TEXT-019 'DATS' 12 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'NETWR' 'T_OUTPUT'
TEXT-020 'CURR' 20 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.
PERFORM BUILD_EVENTCAT USING: 'TOP_OF_LIST',
'TOP_OF_PAGE',
'USER_COMMAND'.
PERFORM LIST_DISPLAY TABLES T_OUTPUT.
ENDFORM. " CALL_LIST_VIEWER
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.
PERFORM STANDARD_HEADINGS.
PERFORM PRINT_SELECTIONS2 TABLES:
S_VKORG USING 'Sales Organization : ' 4 'N' 1,
S_VTWEG USING 'Distribution Channel : ' 18 'N' 1,
S_SPART USING 'Division : ' 8 'N' 1,
S_DATEN USING 'Shipment Completed : ' 8 'Y' 1,
S_VSTEL USING 'Shipping Point : ' 18 'N' 1.
ENDFORM. "top_of_page
*----------------------------------------------------------------------*
* build field catalog entry *
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT USING A_FIELDNAME
A_TABNAME
A_HEADING
A_DATATYPE
A_OUTPUTLEN
A_KEY
A_NO_OUT
A_NO_SUM
A_DO_SUM
A_NO_ZERO
A_INPUT
A_SUM
A_CHECKBOX
A_FIX_COLUMN.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-FIELDNAME = A_FIELDNAME.
FIELDCAT_LN-TABNAME = A_TABNAME.
FIELDCAT_LN-OUTPUTLEN = A_OUTPUTLEN.
FIELDCAT_LN-DATATYPE = A_DATATYPE.
FIELDCAT_LN-REPTEXT_DDIC = A_HEADING.
FIELDCAT_LN-KEY = A_KEY.
FIELDCAT_LN-NO_OUT = A_NO_OUT.
FIELDCAT_LN-NO_SUM = A_NO_SUM.
FIELDCAT_LN-DO_SUM = A_DO_SUM.
FIELDCAT_LN-NO_ZERO = A_NO_ZERO.
FIELDCAT_LN-INPUT = A_INPUT.
FIELDCAT_LN-DO_SUM = A_SUM.
FIELDCAT_LN-CHECKBOX = A_CHECKBOX.
FIELDCAT_LN-FIX_COLUMN = A_FIX_COLUMN.
APPEND FIELDCAT_LN TO FIELDCAT.
ENDFORM. "BUILD_FIELDCAT
*----------------------------------------------------------------------*
* FORM BUILD_EVENTCAT
*----------------------------------------------------------------------*
FORM BUILD_EVENTCAT USING A_EVENT.
EVENTCAT_LN-NAME = EVENTCAT_LN-FORM = A_EVENT.
APPEND EVENTCAT_LN TO EVENTCAT.
ENDFORM. "BUILD_EVENTCAT
*----------------------------------------------------------------------*
* call the ABAP list viewer *
*----------------------------------------------------------------------*
FORM LIST_DISPLAY TABLES A_OUTPUT.
PGM = DISVARIANT-REPORT = SY-REPID.
DISVARIANT-VARIANT = VARIANT.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PGM
* I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
IT_FIELDCAT = FIELDCAT
IS_VARIANT = DISVARIANT
IS_LAYOUT = LAYOUT
IS_PRINT = PRINT
I_SAVE = 'A'
IT_EVENTS = EVENTCAT
IT_SORT = SORTCAT
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = A_OUTPUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* I_CALLBACK_PROGRAM = PGM
** I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
** I_GRID_TITLE =
** I_GRID_SETTINGS =
* IS_LAYOUT = LAYOUT
* IT_FIELDCAT = FIELDCAT
** IT_EXCLUDING =
** IT_SPECIAL_GROUPS =
* IT_SORT = SORTCAT
** IT_FILTER =
** IS_SEL_HIDE =
** I_DEFAULT = 'X'
* I_SAVE = 'A'
* IS_VARIANT = DISVARIANT
* IT_EVENTS = EVENTCAT
** IT_EVENT_EXIT =
* IS_PRINT = PRINT
** IS_REPREP_ID =
** I_SCREEN_START_COLUMN = 0
** I_SCREEN_START_LINE = 0
** I_SCREEN_END_COLUMN = 0
** I_SCREEN_END_LINE = 0
** IT_ALV_GRAPHICS =
** IT_ADD_FIELDCAT =
* TABLES
* T_OUTTAB = A_OUTPUT
* 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.
ENDFORM. "LIST_DISPLAY
**---------------------------------------------------------------------*
** FORM USER_COMMAND *
**---------------------------------------------------------------------*
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
CASE UCOMM.
WHEN '&IC1'.
READ TABLE T_OUTPUT INDEX SELFIELD-TABINDEX.
IF SELFIELD-SEL_TAB_FIELD = 'T_OUTPUT-VBELN_ORD'.
SET PARAMETER ID 'AUN' FIELD T_OUTPUT-VBELN_ORD.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ELSEIF SELFIELD-SEL_TAB_FIELD = 'T_OUTPUT-VBELN_DEL'.
SET PARAMETER ID 'VL' FIELD T_OUTPUT-VBELN_DEL.
CALL TRANSACTION 'VL03' AND SKIP FIRST SCREEN.
ELSEIF SELFIELD-SEL_TAB_FIELD = 'T_OUTPUT-TKNUM'.
SET PARAMETER ID 'TNR' FIELD T_OUTPUT-TKNUM.
CALL TRANSACTION 'VT03N' AND SKIP FIRST SCREEN.
ELSEIF SELFIELD-SEL_TAB_FIELD = 'T_OUTPUT-VGBEL1'.
SET PARAMETER ID 'VF' FIELD T_OUTPUT-VGBEL1.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND
‎2007 Sep 25 4:39 PM
FORM PROCESS_DATA .
SORT T_LIKP_LIPS BY VBELN POSNR.
SORT T_VBAK_VBAP_VBEP BY VBELN POSNR.
SORT T_VBRK_VBRP BY AUBEL AUPOS.
SORT T_VBFA BY VBELV POSNV.
<b> LOOP AT T_VTTK_VTTP INTO W_VTTK_VTTP.
LOOP AT T_LIKP_LIPS INTO W_LIKP_LIPS
</b> WHERE VBELN = W_VTTK_VTTP-VBELN
AND VSTEL IN S_VSTEL
AND VKORG IN S_VKORG.
READ TABLE T_VBAK_VBAP_VBEP INTO W_VBAK_VBAP_VBEP
WITH KEY VBELN = W_LIKP_LIPS-VGBEL
POSNR = W_LIKP_LIPS-VGPOS
BINARY SEARCH.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY AUBEL = W_VBAK_VBAP_VBEP-VBELN
AUPOS = W_VBAK_VBAP_VBEP-POSNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY VGBEL = W_LIKP_LIPS-VBELN
VGPOS = W_LIKP_LIPS-POSNR
BINARY SEARCH.
ENDIF.
READ TABLE T_VBFA INTO W_VBFA
WITH KEY VBELV = W_VBAK_VBAP_VBEP-VBELN
POSNV = W_VBAK_VBAP_VBEP-POSNR.
PERFORM WRITE_TO_T_OUTPUT.
<b> ENDLOOP.
ENDLOOP.</b>
ENDFORM. " process_dataYou have nested loops in your program.
Definitely this is one of the reason for having low performance.
‎2007 Sep 25 4:39 PM
FORM PROCESS_DATA .
SORT T_LIKP_LIPS BY VBELN POSNR.
SORT T_VBAK_VBAP_VBEP BY VBELN POSNR.
SORT T_VBRK_VBRP BY AUBEL AUPOS.
SORT T_VBFA BY VBELV POSNV.
<b> LOOP AT T_VTTK_VTTP INTO W_VTTK_VTTP.
LOOP AT T_LIKP_LIPS INTO W_LIKP_LIPS
</b> WHERE VBELN = W_VTTK_VTTP-VBELN
AND VSTEL IN S_VSTEL
AND VKORG IN S_VKORG.
READ TABLE T_VBAK_VBAP_VBEP INTO W_VBAK_VBAP_VBEP
WITH KEY VBELN = W_LIKP_LIPS-VGBEL
POSNR = W_LIKP_LIPS-VGPOS
BINARY SEARCH.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY AUBEL = W_VBAK_VBAP_VBEP-VBELN
AUPOS = W_VBAK_VBAP_VBEP-POSNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
READ TABLE T_VBRK_VBRP INTO W_VBRK_VBRP
WITH KEY VGBEL = W_LIKP_LIPS-VBELN
VGPOS = W_LIKP_LIPS-POSNR
BINARY SEARCH.
ENDIF.
READ TABLE T_VBFA INTO W_VBFA
WITH KEY VBELV = W_VBAK_VBAP_VBEP-VBELN
POSNV = W_VBAK_VBAP_VBEP-POSNR.
PERFORM WRITE_TO_T_OUTPUT.
<b> ENDLOOP.
ENDLOOP.</b>
ENDFORM. " process_dataYou have nested loops in your program.
Definitely this is one of the reason for having low performance.
‎2007 Sep 25 4:41 PM
‎2007 Sep 25 4:42 PM
The spot where it's dumping is doing a SELECT on a large table, but not using the index. I notice you are reading the document flow table VBFA next. You might see if you can use that table here.
Rob
‎2007 Sep 25 4:46 PM
Thanks Rob,
Can you please explain in detail on what do u mean and how would i use VBFA table.
Ster.
‎2007 Sep 25 4:59 PM
I can't explain in detail because some more analysis is required, but I think you are trying to get billing documents based on the delivery. Have a look at table VBFA and see if you can get the information there. You'll have to work through an example.
Rob
‎2007 Sep 25 4:43 PM
Hi
Keep the ENDIFs outside and see
SELECT VTTK~TKNUM
VTTPVBELN VTTKERDAT
INTO TABLE T_VTTK_VTTP
FROM VTTK
INNER JOIN VTTP
ON VTTKTKNUM = VTTPTKNUM
WHERE DATEN IN S_DATEN.
IF NOT T_VTTK_VTTP[] IS INITIAL.
SELECT LIKP~VBELN
LIKPVKORG LIKPVSTEL
LIKPERDAT LIPSVGBEL LIPS~VGPOS
LIPSPOSNR LIKPWADAT_IST
INTO TABLE T_LIKP_LIPS
FROM LIKP
INNER JOIN LIPS
ON LIKPVBELN = LIPSVBELN
FOR ALL ENTRIES IN T_VTTK_VTTP
WHERE LIKP~VBELN = T_VTTK_VTTP-VBELN
AND LIKP~VSTEL IN S_VSTEL
AND LIKP~VKORG IN S_VKORG.
endif.
IF NOT T_LIKP_LIPS[] IS INITIAL.
SELECT VBAKVBELN VBAPVGBEL VBAP~POSNR
VBAPMATNR VBAPKWMENG VBAKKUNNR VBAKVKBUR
VBAKVKGRP VBAKAUDAT VBEPROMS1 VBEPEDATU
VBEP~BMENG
INTO TABLE T_VBAK_VBAP_VBEP
FROM VBAK
INNER JOIN VBAP
ON VBAKVBELN = VBAPVBELN
INNER JOIN VBEP
ON VBAKVBELN = VBEPVBELN
FOR ALL ENTRIES IN T_LIKP_LIPS
WHERE VBAK~VBELN = T_LIKP_LIPS-VGBEL
AND VBAK~VTWEG IN S_VTWEG
AND VBAK~SPART IN S_SPART
AND VBAP~POSNR = T_LIKP_LIPS-VGPOS.
endif.
IF NOT T_VBAK_VBAP_VBEP[] IS INITIAL.
SELECT VBRKVBELN VBRPVGBEL
VBRPAUBEL VBRPAUPOS
VBRPVGPOS VBRKFKDAT VBRK~NETWR
INTO TABLE T_VBRK_VBRP
FROM VBRK
INNER JOIN VBRP
ON VBRKVBELN = VBRPVBELN
FOR ALL ENTRIES IN T_VBAK_VBAP_VBEP
WHERE VBRP~AUBEL = T_VBAK_VBAP_VBEP-VBELN
AND VBRP~AUPOS = T_VBAK_VBAP_VBEP-POSNR.
SELECT VBRKVBELN VBRPVGBEL " Short dump - Time exceeds
VBRPAUBEL VBRPAUPOS
VBRPVGPOS VBRKFKDAT VBRK~NETWR
APPENDING TABLE T_VBRK_VBRP
FROM VBRK
INNER JOIN VBRP
ON VBRKVBELN = VBRPVBELN
FOR ALL ENTRIES IN T_LIKP_LIPS
WHERE VBRP~VGBEL = T_LIKP_LIPS-VBELN
AND VBRP~VGPOS = T_LIKP_LIPS-POSNR.
SELECT VBELV
POSNV VBELN
POSNN VBTYP_N WAERS
VBTYP_V
INTO TABLE T_VBFA
FROM VBFA
FOR ALL ENTRIES IN T_VBAK_VBAP_VBEP
WHERE VBELV = T_VBAK_VBAP_VBEP-VBELN
AND VBTYP_N = 'R'.
ENDIF.
if you are sure that data is present in all the tables then write a single join for VBAK,VBAP,LIKP,LIPS,VBRK,VBRP tables and see
Regards
Anji
‎2007 Sep 25 4:55 PM
Thanks Anji for the suggestion. I will try and see how it works.
I cant join more than 3 tables.
Ster.