How to create Simple ALV Report in SAP ABAP
ABAP List Viewer (ALV).
The common desired features of any report are "column alignment", sorting, filtering, subtotals, totals etc. To implement these from scratch , a lot of coding effort is to be put. To avoid that we can use a concept called ABAP List Viewer (ALV).
In this tutorial you will learn:
Simple Report
Block Report
Hierarchical Reports
Display Variants
Each of these reports provide function modules which help in producing desired output without much effort. Lets look at them in detail -
Simple ReportImportant function modules in these report are -
Reuse_alv_fieldcatalog_mergeReuse_alv_list_displayReuse_alv_events_getReuse_alv_grid_displayReuse_alv_commentary_writeREUSE_ALV_FIELDCATALOG_MERGE
This function module is used to populate a field catalog which is essential to display the data in ALV.
If the output data is from a single dictionary table and all the columns are selected, then we need not exclusively create the field catalog. Its enough to mention the table name as a parameter (I_structure_name) in the REUSE_ALV_LIST_DISPLAY. But in other cases we need to create it.
Note : Fieldcatalog can be filled manually also by filling up all the required details into the internal table
Important parameters in are:
1. Export:
I_program_name : report idI_internal_tabname : the internal output tableI_inclname : include or the report name where all the dynamic forms are handled.2. Changing
ct_fieldcat : an internal table with the type SLIS_T_FIELDCAT_ALV which is declared in the type pool SLIS.REUSE_ALV_LIST_DISPLAY
This is the function module which prints the data.
The important parameters are:
1. Export:
I_callback_program : report idI_bypassing_buffer : 'X'I_buffer_active : ' 'I_callback_pf_status_set : routine where a user can set his own pf status or change the functionality of the existing pf status.I_callback_user_command : routine where the function codes are handled.I_structure name : name of the dictionary tableIs_Layout : structure to set the layout of the reportIt_fieldcat : internal table with the list of all fields and their attributes which are to be printed (this table can be populated automatically by the function)It_events : internal table with a list of all possible events of ALV and their corresponding form names.2. Tables:
a. t_outtab : internal table with the data to be outputREUSE_ALV_EVENTS_GET:
Returns table of possible events for a a list type
1. Import:
Et_Events :The event table is returned with all possible CALLBACK events for the specified list type (column 'NAME'). For events to be processed by the Callback, their 'FORM' field must be filled. If the field is initialized, the event is ignored. The entry can be read from the event table, the field 'FORM' filled and the entry modified using constants from the type pool SLIS.
2. Export:
I_list_type: 0 = simple list REUSE_ALV_LIST_DISPLAY
1 = hierarchical-sequential list REUSE_ALV_HIERSEQ_LIST_DISPLAY
2 = simple block list REUSE_ALV_BLOCK_LIST_APPEND
3 = hierarchical-sequential block list REUSE_ALV_BLOCK_LIST_HS_APPEND
REUSE_ALV_GRID_DISPLAY
A new function from ABAP4.6 version, to display the results in grid rather than a preview.
Parameters : same as reuse_alv_list_display
Note:Grid cannot handle high volumes. Functions like sort, scrolling down consumes a lot of resources / time if the volume of data to be displayed is high. There is no clear cut definition such that if the amount of data is X go for list or grid but the developer has to take a call based on his experience. If not sure, then list is the better optionREUSE_ALV_COMMENTARY_WRITE
This is used in the Top-of-page event to print the headings and other comments for the list.
Important Parameters
It_list_commentary : Internal table with the headings of the type slis_t_listheader.This internal table has three fields:
Typ : 'H' - header, 'S' - selection, 'A' - actionKey : only when typ is 'S'.Info : the text to be printedBlock ReportThis looks like a simple report but this report has the features of sorting and filtering only.This report is used if you have to display more than one report on the output. Technically speaking if you have multiple internal table with data to be displayed as separate blocks then we go for block report of ALV.
The important functions used for creating this report are:
REUSE_ALV_BLOCK_LIST_INITREUSE_ALV_BLOCK_LIST_APPENDREUSE_ALV_BLOCK_LIST_DISPLAYREUSE_ALV_BLOCK_LIST_INIT
This function module is used to set the default gui status etc. The parameters are similar to the one used in reuse_alv_list_display or reuse_alv_grid_display
REUSE_ALV_BLOCK_LIST_APPEND
This function module adds the data to the block.
Important Parameters
1.Export :
is_layout : layout settings for blockit_fieldcat : field catalogI_tabname : internal table name with all all possible events2.Tables :
t_outtab : internal table with output data.REUSE_ALV_BLOCK_LIST_DISPLAY
This function module display the list with data appended by the above function.
Parameters : All the parameters are optional.
Hierarchical ReportsHierarchical display is used for displaying data that are related. Like sales order and item details. Here sales order details can be the header data whereas them items in the sales order can be the item data
The function module used for this is
REUSE_ALV_HIERSEQ_LIST_DISPLAY
Export:
I_CALLBACK_PROGRAMI_CALLBACK_PF_STATUS_SETI_CALLBACK_USER_COMMANDIS_LAYOUTIt_fieldcatIt_eventsI_tabname_header : Name of the internal table in the program containing the output data of the highest hierarchy level.I_tabname_item : Name of the internal table in the program containing the output data of the lowest hierarchy level.Is_keyinfo : This structure contains the header and item table field names which link the two tables (shared key).Tables
t_outtab_header : Header table with data to be outputt_outtab_item : Name of the internal table in the program containing the output data of the lowest hierarchy level.All the definitions of internal tables, structures and constants are declared in a type-pool called SLIS. This internal table can be populated automatically by using REUSE_ALV_FIELDCATALOG_MERGE'.
Display VariantsDisplay variants are used to set the default properties of an alv output like sort criteria, filtering criteria, totaling and subtotaling etcDisplay variants can be user specific and standard (standard variants can be used by any user )Kind of display variants that can be saved is controlled by the parameter i_save that is passed in function modules reuse_alv_list_display / reuse_alv_grid_displayYou can provide an option on the selection screen to select what display variant to be usedThe common function modules related to selecting / validating display variants are
Reuse_alv_variant_default_getReuse_alv_variant_f4Reuse_alv_variant_existence
The common desired features of any report are "column alignment", sorting, filtering, subtotals, totals etc. To implement these from scratch , a lot of coding effort is to be put. To avoid that we can use a concept called ABAP List Viewer (ALV).
In this tutorial you will learn:
Simple Report
Block Report
Hierarchical Reports
Display Variants
Each of these reports provide function modules which help in producing desired output without much effort. Lets look at them in detail -
Simple ReportImportant function modules in these report are -
Reuse_alv_fieldcatalog_mergeReuse_alv_list_displayReuse_alv_events_getReuse_alv_grid_displayReuse_alv_commentary_writeREUSE_ALV_FIELDCATALOG_MERGE
This function module is used to populate a field catalog which is essential to display the data in ALV.
If the output data is from a single dictionary table and all the columns are selected, then we need not exclusively create the field catalog. Its enough to mention the table name as a parameter (I_structure_name) in the REUSE_ALV_LIST_DISPLAY. But in other cases we need to create it.
Note : Fieldcatalog can be filled manually also by filling up all the required details into the internal table
Important parameters in are:
1. Export:
I_program_name : report idI_internal_tabname : the internal output tableI_inclname : include or the report name where all the dynamic forms are handled.2. Changing
ct_fieldcat : an internal table with the type SLIS_T_FIELDCAT_ALV which is declared in the type pool SLIS.REUSE_ALV_LIST_DISPLAY
This is the function module which prints the data.
The important parameters are:
1. Export:
I_callback_program : report idI_bypassing_buffer : 'X'I_buffer_active : ' 'I_callback_pf_status_set : routine where a user can set his own pf status or change the functionality of the existing pf status.I_callback_user_command : routine where the function codes are handled.I_structure name : name of the dictionary tableIs_Layout : structure to set the layout of the reportIt_fieldcat : internal table with the list of all fields and their attributes which are to be printed (this table can be populated automatically by the function)It_events : internal table with a list of all possible events of ALV and their corresponding form names.2. Tables:
a. t_outtab : internal table with the data to be outputREUSE_ALV_EVENTS_GET:
Returns table of possible events for a a list type
1. Import:
Et_Events :The event table is returned with all possible CALLBACK events for the specified list type (column 'NAME'). For events to be processed by the Callback, their 'FORM' field must be filled. If the field is initialized, the event is ignored. The entry can be read from the event table, the field 'FORM' filled and the entry modified using constants from the type pool SLIS.
2. Export:
I_list_type: 0 = simple list REUSE_ALV_LIST_DISPLAY
1 = hierarchical-sequential list REUSE_ALV_HIERSEQ_LIST_DISPLAY
2 = simple block list REUSE_ALV_BLOCK_LIST_APPEND
3 = hierarchical-sequential block list REUSE_ALV_BLOCK_LIST_HS_APPEND
REUSE_ALV_GRID_DISPLAY
A new function from ABAP4.6 version, to display the results in grid rather than a preview.
Parameters : same as reuse_alv_list_display
Note:Grid cannot handle high volumes. Functions like sort, scrolling down consumes a lot of resources / time if the volume of data to be displayed is high. There is no clear cut definition such that if the amount of data is X go for list or grid but the developer has to take a call based on his experience. If not sure, then list is the better optionREUSE_ALV_COMMENTARY_WRITE
This is used in the Top-of-page event to print the headings and other comments for the list.
Important Parameters
It_list_commentary : Internal table with the headings of the type slis_t_listheader.This internal table has three fields:
Typ : 'H' - header, 'S' - selection, 'A' - actionKey : only when typ is 'S'.Info : the text to be printedBlock ReportThis looks like a simple report but this report has the features of sorting and filtering only.This report is used if you have to display more than one report on the output. Technically speaking if you have multiple internal table with data to be displayed as separate blocks then we go for block report of ALV.
The important functions used for creating this report are:
REUSE_ALV_BLOCK_LIST_INITREUSE_ALV_BLOCK_LIST_APPENDREUSE_ALV_BLOCK_LIST_DISPLAYREUSE_ALV_BLOCK_LIST_INIT
This function module is used to set the default gui status etc. The parameters are similar to the one used in reuse_alv_list_display or reuse_alv_grid_display
REUSE_ALV_BLOCK_LIST_APPEND
This function module adds the data to the block.
Important Parameters
1.Export :
is_layout : layout settings for blockit_fieldcat : field catalogI_tabname : internal table name with all all possible events2.Tables :
t_outtab : internal table with output data.REUSE_ALV_BLOCK_LIST_DISPLAY
This function module display the list with data appended by the above function.
Parameters : All the parameters are optional.
Hierarchical ReportsHierarchical display is used for displaying data that are related. Like sales order and item details. Here sales order details can be the header data whereas them items in the sales order can be the item data
The function module used for this is
REUSE_ALV_HIERSEQ_LIST_DISPLAY
Export:
I_CALLBACK_PROGRAMI_CALLBACK_PF_STATUS_SETI_CALLBACK_USER_COMMANDIS_LAYOUTIt_fieldcatIt_eventsI_tabname_header : Name of the internal table in the program containing the output data of the highest hierarchy level.I_tabname_item : Name of the internal table in the program containing the output data of the lowest hierarchy level.Is_keyinfo : This structure contains the header and item table field names which link the two tables (shared key).Tables
t_outtab_header : Header table with data to be outputt_outtab_item : Name of the internal table in the program containing the output data of the lowest hierarchy level.All the definitions of internal tables, structures and constants are declared in a type-pool called SLIS. This internal table can be populated automatically by using REUSE_ALV_FIELDCATALOG_MERGE'.
Display VariantsDisplay variants are used to set the default properties of an alv output like sort criteria, filtering criteria, totaling and subtotaling etcDisplay variants can be user specific and standard (standard variants can be used by any user )Kind of display variants that can be saved is controlled by the parameter i_save that is passed in function modules reuse_alv_list_display / reuse_alv_grid_displayYou can provide an option on the selection screen to select what display variant to be usedThe common function modules related to selecting / validating display variants are
Reuse_alv_variant_default_getReuse_alv_variant_f4Reuse_alv_variant_existence
Creating a Simple ALV Report in SAP ABAP
*&---------------------------------------------------------------------*
*& Report ZDEMO_PROGRAM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO_PROGRAM.
*report program started
TYPE-POOLS: slis. " SLIS contains all the ALV data types
*&---------------------------------------------------------------------*
*& Data Declaration
*&---------------------------------------------------------------------*
DATA: it_vbak TYPE TABLE OF vbak.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*Fetch data from the database
SELECT * FROM vbak INTO TABLE it_vbak.
*Build field catalog
wa_fieldcat-fieldname = 'VBELN'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'SALES DOCUMENT'. " Column description in the output
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERDAT'.
wa_fieldcat-seltext_m = 'DATE.'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERZET'.
wa_fieldcat-seltext_m = 'ENTRY TIME'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERNAM'.
wa_fieldcat-seltext_m = 'NAME OF PERSON'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ANGDT'.
wa_fieldcat-seltext_m = 'QUATATION'.
APPEND wa_fieldcat TO it_fieldcat.
*Pass data and field catalog to ALV function module to display ALV list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_VBAK
EXCEPTIONS
program_error = 1
OTHERS = 2.
*& Report ZDEMO_PROGRAM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO_PROGRAM.
*report program started
TYPE-POOLS: slis. " SLIS contains all the ALV data types
*&---------------------------------------------------------------------*
*& Data Declaration
*&---------------------------------------------------------------------*
DATA: it_vbak TYPE TABLE OF vbak.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*Fetch data from the database
SELECT * FROM vbak INTO TABLE it_vbak.
*Build field catalog
wa_fieldcat-fieldname = 'VBELN'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'SALES DOCUMENT'. " Column description in the output
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERDAT'.
wa_fieldcat-seltext_m = 'DATE.'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERZET'.
wa_fieldcat-seltext_m = 'ENTRY TIME'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ERNAM'.
wa_fieldcat-seltext_m = 'NAME OF PERSON'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'ANGDT'.
wa_fieldcat-seltext_m = 'QUATATION'.
APPEND wa_fieldcat TO it_fieldcat.
*Pass data and field catalog to ALV function module to display ALV list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_VBAK
EXCEPTIONS
program_error = 1
OTHERS = 2.
Output of ALV Report.