Wednesday, 21 December 2011

LOCK & UNLOCK OBJECTS IN ABAP SAP

 


INPUT SCREEN
OUTPUT SCREEN

 
REPORT ZLOCKUNLOCK.
TABLES: TRDIR.
PARAMETERS: PROGRAM LIKE TRDIR-NAME OBLIGATORY.
PARAMETERS: EDITOR LIKE TRDIR-EDTX.
SELECT SINGLE FROM TRDIR WHERE NAME = PROGRAM.
TRDIR-EDTX = EDITOR.
MODIFY TRDIR.
IF SY-SUBRC EQ 0.
WRITE: / 'Editor Lock update Successful ', TRDIR-NAME.
IF TRDIR-EDTX = 'X'.
WRITE: ' Lock'.
ELSE.
WRITE: ' UnLock'.
ENDIF.
ELSE.
WRITE: / 'Editor Lock update Unsuccessful ', TRDIR-NAME.
ENDIF.

SALES DELIEVERY REPORT - SAP SD - Z REPORT


INPUT SCREEN

OUTPUT SCREEN

*&---------------------------------------------------------------------*
*& Report  ZSD_DELIVERY_VALUE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSD_DELIVERY_VALUE.

TYPE-pools : slis.

TABLES: LIKP.

TYPES : BEGIN OF T_LIKP,
        VBELN    TYPE VBELN_VL,
        LFDAT    TYPE     LFDAT_V,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        ORT01    type ORT01_GP,
        END OF T_LIKP,

        BEGIN OF T_LIPS,
        VBELN    TYPE LIKP-VBELN,
        POSNR    TYPE POSNR_VL ,
        PSTYV    TYPE PSTYV_VL ,
        MATNR    TYPE MATNR ,
        WERKS    TYPE WERKS_D,
        LGORT    TYPE LGORT_D,
        CHARG    TYPE CHARG_D ,
        LFIMG    TYPE LFIMG,
        MEINS    TYPE MEINS ,
        VGBEL    TYPE VGBEL ,
        VGPOS    TYPE VGPOS,
        MAKTX    TYPE MAKTX  ,
        VTWEG    type VTWEG,
        VTEXT    TYPE VTXTK ,
        END OF T_LIPS,

        BEGIN OF T_VBAP,
        VBELN    TYPE     VBELN_VA,
        POSNR    TYPE     POSNR_VA ,
        MATNR    TYPE     MATNR,
        CHARG    TYPE     CHARG_D,
        KWMENG TYPE   KWMENG,
        NETWR    TYPE     NETWR_AP,
        MWSBP    TYPE     MWSBP  ,
        END OF T_VBAP,

        BEGIN OF T_FINAL,
        VBELN    TYPE VBELN_VL,
        POSNR    TYPE POSNR_VL ,
        LFDAT    TYPE     LFDAT_V,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        ORT01    type ORT01_GP,
        VTWEG    type VTWEG,
        VTEXT    TYPE VTXTK ,
        VGBEL    TYPE VGBEL ,
        VGPOS    TYPE VGPOS,
        MATNR    TYPE MATNR ,
        MAKTX    TYPE MAKTX  ,
        KWMENG TYPE   KWMENG,
        NETWR    TYPE     NETWR_AP,
        MWSBP    TYPE     MWSBP  ,
        LFIMG    TYPE LFIMG,
        DSVAL    TYPE     NETWR_AP,
        END OF T_FINAL,

        BEGIN OF t_lfa1,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        END OF t_lfa1.


DATA : I_LIKP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE,
       I_LIPS TYPE STANDARD TABLE OF T_LIPS WITH HEADER LINE,
       I_VBAP TYPE STANDARD TABLE OF T_VBAP WITH HEADER LINE,
       I_FINAL TYPE STANDARD TABLE OF T_FINAL WITH HEADER LINE,
       i_lfa1 TYPE STANDARD TABLE OF t_lfa1 WITH HEADER LINE,
       I_LIKP_TEMP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE.



DATA:       W_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

SELECTION-SCREEN BEGIN OF BLOCK S_DL WITH FRAME TITLE G_TITLE.
  SELECT-OPTIONS : S_VBELN FOR I_LIKP-VBELN,
                   S_LFDAT FOR I_LIKP-LFDAT,
                   S_KUNNR FOR I_LIKP-KUNNR,
                   s_vtweg for i_lips-vtweg.
SELECTION-SCREEN END OF BLOCK s_dl.


AT SELECTION-SCREEN on VALUE-REQUEST FOR S_VBELN-LOW.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'LIKP'
      FIELDNAME                 = 'VBELN'
     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_VBELN-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

AT SELECTION-SCREEN on VALUE-REQUEST FOR S_VBELN-HIGH.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'LIKP'
      FIELDNAME                 = 'VBELN'
     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_VBELN-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  AT SELECTION-SCREEN on VALUE-REQUEST FOR S_KUNNR-LOW.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'RF02D'
      FIELDNAME                 = 'KUNNR'
*     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_KUNNR-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  AT SELECTION-SCREEN on VALUE-REQUEST FOR S_KUNNR-HIGH.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'RF02D'
      FIELDNAME                 = 'KUNNR'
*     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_KUNNR-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
START-OF-SELECTION .

PERFORM GET_DATA.

perform process_data.

PERFORM bulid_alv.

end-of-SELECTION.

PERFORM display_alv.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .

SELECT  a~VBELN
        a~LFDAT
        a~KUNNR
        b~NAME1
        b~ORT01
   FROM LIKP as a INNER JOIN KNa1 as b on a~kunnr = b~kunnr
   INTO TABLE I_LIKP
   WHERE a~VBELN IN S_VBELN
   AND   a~LFDAT IN S_LFDAT
   AND   a~KUNNR IN S_KUNNR.

*SELECT  VBELN
*        LFDAT
*        KUNNR
*   FROM LIKP
*   INTO TABLE I_LIKP
*   WHERE VBELN IN S_VBELN
*   AND   LFDAT IN S_LFDAT
*   AND   KUNNR IN S_KUNNR.

  IF SY-SUBRC = 0.


*I_LIKP_TEMP[] = I_LIKP[].
*
*SORT I_LIKP_TEMP ASCENDING BY KUNNR.
*
*DELETE ADJACENT DUPLICATES FROM I_LIKP_TEMP COMPARING KUNNR.
*SELECT KUNNR
*       NAME1
*  FROM LFA1
*  INTO TABLE I_LFA1
*  FOR ALL ENTRIES IN I_LIKP_TEMP
*  WHERE KUNNR = I_LIKP_TEMP-KUNNR.
*
*  LOOP AT I_LFA1.
*
*    I_LIKP-KUNNR = I_LFA1-KUNNR.
*    MODIFY I_LIKP FROM I_LIKP TRANSPORTING NAME1 WHERE KUNNR =
*I_LFA1-KUNNR.
*
*  ENDLOOP.


    SELECT  A~VBELN
            A~POSNR
            A~PSTYV
            A~MATNR
            A~WERKS
            A~LGORT
            A~CHARG
            A~LFIMG
            A~MEINS
            A~VGBEL
            A~VGPOS
            b~MAKTX
            a~vtweg
            c~VTEXT
      FROM  LIPS as a INNER JOIN makt AS B ON A~MATNR = B~MATNR
                      INNER JOIN tvtwt as c on a~vtweg = c~vtweg

      INTO TABLE I_LIPS
      FOR ALL ENTRIES IN I_LIKP
      WHERE A~VBELN = I_LIKP-VBELN
      and   a~vtweg in s_vtweg
      and   c~SPRAS = 'EN'
      AND   B~SPRAS = 'EN'.


      IF SY-SUBRC = 0.

      SELECT   VBELN
               POSNR
               MATNR
               CHARG
               KWMENG
               NETWR
               MWSBP
        FROM VBAP
        INTO TABLE I_VBAP
        FOR ALL ENTRIES IN I_LIPS
        WHERE VBELN = I_LIPS-VGBEL
        AND   POSNR = I_LIPS-VGPOS.
      ELSE.
        MESSAGE 'No records found' TYPE 'E'.
      ENDIF.

  ELSE.
    MESSAGE 'No records found' TYPE 'E'.
  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  process_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_data .

LOOP AT i_lips.

  i_final-VBELN = i_lips-vbeln.
  i_final-posnr = i_lips-posnr.
  i_final-vgbel = i_lips-vgbel.
  i_final-vgpos = i_lips-vgpos.
  i_final-MATNR = i_lips-matnr.
  i_final-lfimg = i_lips-lfimg.
  I_FINAL-MAKTX = I_LIPS-MAKTX.
  i_final-VTWEG    = i_lips-VTWEG.
  i_final-VTEXT    = i_lips-VTEXT.

  READ TABLE i_likp with key VBELN = I_lips-VBELN.
  IF SY-SUBRC = 0.
    I_FINAL-KUNNR = I_LIKP-KUNNR.
    I_FINAL-NAME1 = I_LIKP-NAME1.
    I_FINAL-LFDAT = I_LIKP-LFDAT.
    i_final-ORT01 = i_likp-ORT01.
  ENDIF.

  READ TABLE I_VBAP WITH KEY VBELN = I_LIPS-VGBEL
                             POSNR = I_LIPS-VGPOS.
  IF SY-SUBRC = 0.

    I_FINAL-KWMENG = I_VBAP-KWMENG.
    I_FINAL-NETWR  = I_VBAP-NETWR.
    I_FINAL-MWSBP  = I_VBAP-MWSBP.

  ENDIF.


  I_FINAL-DSVAL = ( I_FINAL-NETWR + I_FINAL-MWSBP ) / I_FINAL-KWMENG.
  I_FINAL-DSVAL = I_FINAL-DSVAL * I_FINAL-LFIMG.

  APPEND I_FINAL.

ENDLOOP.



ENDFORM.                    " process_data
*&---------------------------------------------------------------------*
*&      Form  bulid_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bulid_alv .

  REFRESH I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VBELN'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.


  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'KUNNR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Customer Code'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'NAME1'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Customer Name'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'ORT01'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'City'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.



  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VTWEG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Distribution Code'.
   W_FIELDCAT-seltext_m = 'Dist Code'.
   W_FIELDCAT-seltext_s = 'D code'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VTEXT'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Distribution Channel'.
  W_FIELDCAT-seltext_m = 'Dist Channel'.
   W_FIELDCAT-seltext_s = 'D Channel'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'LFDAT'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery date'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VGBEL'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Sales Order Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VGPOS'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Line Item'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'MATNR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Material Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'KWMENG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Sales Order Quantity'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'NETWR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Net Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'MWSBP'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Total Tax Sales Order Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'LFIMG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Quantity'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.


  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'DSVAL'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.



ENDFORM.                    " bulid_alv
*&---------------------------------------------------------------------*
*&      Form  display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .

  DATA : G_SYUCOMM  TYPE SY-UCOMM.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING
      I_CALLBACK_PROGRAM                = SY-REPID
*      I_CALLBACK_PF_STATUS_SET          = 'STDPOPBX_FULLSCREEN'
*      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'
*      I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
      IT_FIELDCAT                       = I_FIELDCAT
      I_DEFAULT                         = 'X'
      I_SAVE                            = 'A'
     TABLES
       T_OUTTAB                          = I_FINAL
    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.                    " display_alv