Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Performance

Former Member
0 Likes
973

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

1 ACCEPTED SOLUTION
Read only

SG141
Active Participant
0 Likes
900
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_data

You have nested loops in your program.

Definitely this is one of the reason for having low performance.

7 REPLIES 7
Read only

SG141
Active Participant
0 Likes
901
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_data

You have nested loops in your program.

Definitely this is one of the reason for having low performance.

Read only

Former Member
0 Likes
900

Thanks Karthik.

But its abbending in the select quesrry .

Ster.

Read only

Former Member
0 Likes
900

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

Read only

0 Likes
900

Thanks Rob,

Can you please explain in detail on what do u mean and how would i use VBFA table.

Ster.

Read only

0 Likes
900

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

Read only

Former Member
0 Likes
900

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

Read only

0 Likes
900

Thanks Anji for the suggestion. I will try and see how it works.

I cant join more than 3 tables.

Ster.