You are currently viewing ALV Grid Report in SAP

ALV Grid Report in SAP

In Previous article I have provided an overview of Classical Report in SAP, in this article I will provide Code to show data of database table in ALV Grid Report. We will also see how to edit a particular field from that report in database table.

Please see the Source code below, you can use this as is with changes as required.  

REPORT  ZBILL_ALV_REPORT.
*&---------------------------------------------------------------------*
*& Report  ZBILL_ALV_GRID_REPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
TABLES: ZBILL.
TYPE-POOLS SLIS.

" ---- WORK-AREA AND INTERNAL TABLE DECLARATION ----
DATA: WA_BILL TYPE ZBILL,
      IT_BILL TYPE ZBILL OCCURS 0.
DATA: REP_ID TYPE SY-REPID VALUE SY-REPID.

DATA:
*-----DECLARING THE FIELD CATALOG WORK AREA & INTERNAL TABLE-----------*
      WA_FCAT   TYPE SLIS_FIELDCAT_ALV,
      IT_FCAT   TYPE SLIS_T_FIELDCAT_ALV,

*-----DECLARING THE WORK AREA OF ALV LAYOUT----------------------------*
      WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
      LS_VARIANT type DISVARIANT,

*-----DECLARING THE WORK AREA & INTERNAL TABLE FOR TOP OF PAGE---------*
      WA_TOP    TYPE SLIS_LISTHEADER,
      IT_TOP    TYPE SLIS_T_LISTHEADER.
START-OF-SELECTION. " for selection of data from database.
*       SET PF-STATUS 'SAVESTS'.
       PERFORM GET_BILLS.


END-OF-SELECTION.
       PERFORM ALV_LAYOUT.
       PERFORM ALV_FIELD_CATALOG.
       PERFORM ALV_GRID_DISPLAY.

TOP-OF-PAGE.
       PERFORM TOP_OF_BILL.

*&---------------------------------------------------------------------*
*&      Form  GET_BILLS
*&---------------------------------------------------------------------*
*       Selection of BILL table data
*----------------------------------------------------------------------*
FORM GET_BILLS.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_BILL FROM ZBILL.
*  SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_BILL FROM ZBILL WHERE DOC_ID IN P_DOC_ID.

    IF SY-SUBRC = 0.
      SORT IT_BILL.
    ELSE.
      MESSAGE 'Bill Records doesn''t exist' TYPE 'I'.
    ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  alv_field_catalog
*&---------------------------------------------------------------------*
*       Preparing ALV field catalog
*----------------------------------------------------------------------*
FORM ALV_FIELD_CATALOG.
  DATA LV_COL TYPE I VALUE 0.
  IF NOT IT_BILL IS INITIAL.
    LV_COL            = 1 + LV_COL.      "INCREMENTING POSITION OF COLUMN
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'DOC_ID'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'Document ID'. "FIELD TEXT
    WA_FCAT-EMPHASIZE = 'C10'.          "FOR COLUMN COLOR
*    WA_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'.
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.

    LV_COL            = 1 + LV_COL.
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'BILNO'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'Bill Number'. "FIELD TEXT
    WA_FCAT-EMPHASIZE = 'C21'.
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.

    LV_COL            = 1 + LV_COL.
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'BILDESC'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'Description'. "FIELD TEXT
    WA_FCAT-EMPHASIZE = 'C21'.
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.

    LV_COL            = 1 + LV_COL.
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'QUANTITY'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'Total Quantity'. "FIELD TEXT
    WA_FCAT-EMPHASIZE = 'C21'.
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.

    LV_COL            = 1 + LV_COL.
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'AMOUNT'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'AMOUNT'. "FIELD TEXT
    WA_FCAT-EMPHASIZE = 'C30'.
*    WA_FCAT-EDIT = 'X'.
    WA_FCAT-DO_SUM    = 'X'.
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.

    LV_COL            = 1 + LV_COL.
    WA_FCAT-COL_POS   = LV_COL.         "COLUMN POSITION
    WA_FCAT-FIELDNAME = 'BILPMOD'.       "TECHNICAL FIELD NAME
    WA_FCAT-TABNAME   = 'IT_BILL'.     "OUTPUT TABLE NAME
    WA_FCAT-SELTEXT_L = 'Payment Mode'. "FIELD TEXT
*    WA_FCAT-EMPHASIZE = 'C2'.
    WA_FCAT-EDIT = 'X'. 
    APPEND WA_FCAT TO IT_FCAT.          "PREPARING THE FIELDCAT TABLE
    CLEAR WA_FCAT.
  ENDIF.
ENDFORM.  " end alv_field_catalog

*&---------------------------------------------------------------------*
*&      Form  alv_layout
*&---------------------------------------------------------------------*
*       Preparing the ALV Layout
*----------------------------------------------------------------------*

FORM ALV_LAYOUT.
  WA_LAYOUT-ZEBRA = 'X'.             "CALLING THE ZEBRA LAYOUT
  WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ENDFORM.

FORM TOP_OF_BILL.
    REFRESH IT_TOP.

    WA_TOP-TYP  = 'H'.            "HEADER TYPE
    WA_TOP-INFO = 'Technocrats Club'. "HEADER TEXT
    APPEND WA_TOP TO IT_TOP.
   *    WA_TOP-TYP  = 'S'.            "HEADER TYPE
*    WA_TOP-KEY = 'Bill Records'. "HEADER TEXT
*
*    APPEND WA_TOP TO IT_TOP.
*    CLEAR WA_TOP.

    WA_TOP-TYP  = 'S'.            "NORMAL LINE TYPE
    WA_TOP-KEY = 'Report:'.     "NORMAL LINE TEXT
    WA_TOP-INFO = SY-REPID.
*    CONCATENATE WA_TOP-KEY SY-REPID INTO WA_TOP-INFO SEPARATED BY SPACE.
    "CONCATENATING THE TEXT INFO WITH PROGRAM NAME
    APPEND WA_TOP TO IT_TOP.
    CLEAR WA_TOP.

    WA_TOP-TYP  = 'S'.
    WA_TOP-KEY = 'User:'.
    WA_TOP-INFO = SY-UNAME.
*    CONCATENATE WA_TOP-INFO SY-UNAME INTO WA_TOP-INFO SEPARATED BY SPACE.
    "CONCATENATING THE TEXT INFO WITH USER NAME
    APPEND WA_TOP TO IT_TOP.
    CLEAR WA_TOP.

    DATA: DATUM type c LENGTH 10.   " CONVERT DATE TO EXTERNAL.
    WRITE SY-DATUM TO DATUM.

    WA_TOP-TYP  = 'S'.
    WA_TOP-KEY = 'Date:'.
    WA_TOP-INFO = DATUM.
*    CONCATENATE WA_TOP-INFO SY-DATUM INTO WA_TOP-INFO SEPARATED BY SPACE.
    "CONCATENATING THE TEXT INFO WITH USER NAME
    APPEND WA_TOP TO IT_TOP.
    CLEAR WA_TOP.


   DATA : S_TIME TYPE C LENGTH 20.   "TIME CONVERSION TO EXTERNAL
   WRITE SY-UZEIT TO S_TIME.
    WA_TOP-TYP  = 'S'.
    WA_TOP-KEY = 'Time:'.
    WA_TOP-INFO = S_TIME.
*    CONCATENATE WA_TOP-INFO SY-UZEIT INTO WA_TOP-INFO SEPARATED BY SPACE.
    "CONCATENATING THE TEXT INFO WITH USER NAME
    APPEND WA_TOP TO IT_TOP.
    CLEAR WA_TOP.

    "-CALLING FUNCTION MODULE FOR DISPLAYING TOP OF PAGE-------------------*
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = IT_TOP "PASSING THE INTERNAL TABLE
      I_LOGO                   = 'ENJOYSAP_LOGO'
*     I_END_OF_LIST_GRID       =
*     I_ALV_FORM               =
            .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  alv_grid_display
*&---------------------------------------------------------------------*
*       Preparing the final output by using Grid Display
*----------------------------------------------------------------------*

FORM ALV_GRID_DISPLAY.
    IF NOT IT_BILL IS INITIAL AND NOT IT_FCAT IS INITIAL.
*     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
*      CALL FUNCTION 'CL_GUI_ALV_GRID'
     EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
       I_CALLBACK_PROGRAM             = SY-REPID
   I_CALLBACK_PF_STATUS_SET          = 'PF'
       I_CALLBACK_USER_COMMAND        = 'USER_COMMAND'
       I_CALLBACK_TOP_OF_PAGE         = 'TOP_OF_BILL'
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
       I_GRID_TITLE                   =  'Bill Records'
*   I_GRID_SETTINGS                   =

       IS_LAYOUT                      = WA_LAYOUT
       IT_FIELDCAT                    = IT_FCAT
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*     IT_SORT                           = ITSORT
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*    I_SAVE                           = 'X'
*   IS_VARIANT                        = LS_VARIANT
*   IT_EVENTS                         = LI_EVENTS
*   IT_EVENT_EXIT                     =


*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =

     TABLES
       T_OUTTAB               = IT_BILL.
       IF SY-SUBRC <> 0.
* Implement suitable error handling here
      ENDIF.
    ENDIF.
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
      CASE R_UCOMM.
      
      WHEN 'SAVE'." INSERTING NEW FIELD VALUE IN DATABASE TABLE.
        LOOP AT IT_BILL INTO WA_BILL WHERE BILPMOD IS NOT INITIAL.          
UPDATE ZBILL SET BILPMOD = WA_BILL-BILPMOD  UNAME = SY-UNAME BILDATE = SY-DATUM BILTIME = SY-UZEIT WHERE DOC_ID = WA_BILL-DOC_ID.
        ENDLOOP.
 
          IF SY-SUBRC EQ 0.
            MESSAGE 'RECORD UPDATED SUCCESSFULLY' TYPE 'I'.
          ENDIF.
      
ENDFORM.

FORM PF USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'SAVESTS'.  "&QUOT;<--PASS YOUR PF-STATUS CREATED
ENDFORM.

 Out Put:

 

 

Dinesh Kumar Bansal

Dinesh Kumar Bansal is an Indian Software Developer, who is working on ASP.Net, MS-SQL, SAP-ABAP technologies from last one year. His Basic Principle of developing software is, “You have to clear about, what do you want to do, how can it be done”. He always says that development can be done with a cool & fresh mind.

Leave a Reply