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

normal report & ALV Report

Former Member
0 Kudos

what is difference between normal report & ALV Report explain plzzzzzzzz.


Former Member
0 Kudos


A classical report is a program that generates a single list, which must contain all of the required detail information.

1) This procedure may result in extensive lists from which the user has to pick the relevant data.

2) For background processing, this is the only possible method. After starting a background job, there is no way of influencing the program.

3) The desired selections must be made beforehand and the list must provide detailed information.

4) For dialog sessions, there are no such restrictions.

5) The user is present during the execution of the program and can control and manipulate the program flow directly.

6) To be able to use all advantages of the online environment, classical reporting was developed into interactive reporting.

ALV is Application List viewer. Sap provides a set of ALV (ABAP LIST VIEWER) function modules which can be put into use to embellish the output of a report. This set of ALV functions is used to enhance the readability and functionality of any report output. Cases arise in sap when the output of a report contains columns extending more than 255 characters in length. In such cases, this set of ALV functions can help choose selected columns and arrange the different columns from a report output and also save different variants for report display. This is a very efficient tool for dynamically sorting and arranging the columns from a report output. The report output can contain up to 90 columns in the display with the wide array of display options.


Collapse multiple reports into one, drastically cutting down your report development time

Save many hours using built-in ALV sorting, subtotaling and filtering capabilities

Add conditional structures into your ALV report: No programming required!

Combine ALV with display variants to meet a wide range of reporting requirements more easily

Dynamically reorder column layouts and add/subtract fields

Enable users and analysts to save their own personalized variants

All the definitions of internal tables, structures and constants are declared in a type-pool called SLIS.


The important function modules are

a. Reuse_alv_list_display

b. Reuse_alv_fieldcatalog_merge

c. Reuse_alv_events_get

d. Reuse_alv_commentary_write

e. Reuse_alv_grid_display

A. REUSE_ALV_LIST_DISPLAY : This is the function module which prints the data.

The important parameters are :

I. Export :

i. I_callback_program : report id

ii. I_callback_pf_status_set : routine where a user can set his own pf status or change the functionality of the existing pf status

iii. I_callback_user_command : routine where the function codes are handled

iv. I_structure name : name of the dictionary table

v. Is_layout : structure to set the layout of the report

vi. It_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 module REUSE_ALV_FIELDCATALOG_MERGE

vii. It_events : internal table with a list of all possible events of ALV and their corresponding form names.

II. Tables :

i. t_outtab : internal table with the data to be output

B. REUSE_ALV_FIELDCATALOG_MERGE : This function module is used to populate a fieldcatalog 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.

The Important Parameters are :

I. Export :

i. I_program_name : report id

ii. I_internal_tabname : the internal output table

iii. I_inclname : include or the report name where all the dynamic forms are handled.

II Changing

ct_fieldcat : an internal table with the type SLIS_T_FIELDCAT_ALV which is

declared in the type pool SLIS.

C. REUSE_ALV_EVENTS_GET : Returns table of possible events for a list type

Parameters :

I. 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 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 SALV.

II. Export :

I_List_type :

0 = simple list REUSE_ALV_LIST_DISPLAY

1 = hierarchcal-sequential list REUSE_ALV_HIERSEQ_LIST_DISPLAY

2 = simple block list REUSE_ALV_BLOCK_LIST_APPEND

3 = hierarchical-sequential block list


D. REUSE_ALV_COMMENTARY_WRITE : This is used in the Top-of-page event to print the headings and other comments for the list.

Parameters :

I. 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’ - action

Key : only when typ is ‘S’.

Info : the text to be printed

E. REUSE_ALV_GRID_DISPLAY : A new function in 4.6 version, to display the results in grid rather than as a preview.

Parameters : same as reuse_alv_list_display

This is an example for simple list.


This is used to have multiple lists continuously.

The important functions used in this report are:










This function module is used to set the default gui status etc.


Parameters :

Export :

I. is_layout : layout settings for block

II. it_fieldcat : field catalog

III. i_tabname : internal table name with output data

IV. it_events : internal table with all possible events

Tables :

i. t_outtab : internal table with output data.

This function module adds the data to the block.

Repeat this function for all the different blocks to be displayed one after the other.


This function module is used for hierarchical sequential blocks.


Parameters : All the parameters are optional.

This function module display the list with data appended by the above function.


3. Hierarchical reports :

Hierarchical sequential list output.

The function module is



I. Export:







vii. i_tabname_header : Name of the internal table in the program containing the

output data of the highest hierarchy level.

viii. i_tabname_item : Name of the internal table in the program containing the

output data of the lowest hierarchy level.

ix. is_keyinfo : This structure contains the header and item table field

names which link the two tables (shared key).

II. Tables

i. t_outtab_header : Header table with data to be output

ii. t_outtab_item : Name of the internal table in the program containing the

output data of the lowest hierarchy level.

slis_t_fieldcat_alv : This internal table contains the field attributes. This internal table can be populated automatically by using ‘REUSE_ALV_FIELDCATALOG_MERGE’.

Important Attributes :

A. col_pos : position of the column

B. fieldname : internal fieldname

C. tabname : internal table name

D. ref_fieldname : fieldname (dictionary)

E. ref_tabname : table (dictionary)

F. key(1) : column with key-color

G. icon(1) : icon

H. symbol(1) : symbol

I. checkbox(1) : checkbox

J. just(1) : (R)ight (L)eft (C)ent.

K. do_sum(1) : sum up

L. no_out(1) : (O)blig.(X)no out

M. outputlen : output length

N. seltext_l : long key word

O. seltext_m : middle key word

P. seltext_s : short key word

Q. reptext_ddic : heading (ddic)

R. ddictxt(1) : (S)hort (M)iddle (L)ong

S. datatype : datatype

T. hotspot(1) : hotspot



0 Kudos

Hi priyanka,

Can u send me any sample code for ALV Report?

becoz i have created one dynamic ALV Report ,it is displaying fine But when I am trying to Download in Excell some records are not properly ,

the save in local file option is not working properly ( download ),

Can u send me any Sample coding for ALV Report>



Former Member
0 Kudos


  • Normal report are called as classical reports used writed statements to display report data.

  • ALV uses a A special type of list viewer (using simple ALV or using ALV control)

  • No field catalog in classical reports but for ALV it is must.

  • Normal report are : simple list report, drill down report, tree report

  • ALV is : Simple ALV, Hirarchical ALV, Block ALV

  • Normal report: Character based : ALV: Char/control based

Jogdand M B

Former Member
0 Kudos



ALV is nothing but "application list viewer.

An ALV displays the output directly in the form of a grid or a list.

ie,in a tabular format with the required field names as headings.

while in a normal report,user has to design and format his output in a list or table fashion,which is a tedious process.

it is to overcome the user designing the output in list,SAP has given ALV,thro which one can deirectly get a tabulated list output.

type-pool:slis is basically declared to call the respective function module for the ALV display.

its mandatory that type-pool:slis is declared.

Imagine you have to write a report that lists out customer addresses. You will write code to get the input from the user via selection screen and then read the data based on the seletion from the database into an internal table(or a set of internal tables). Now once you have the data you will need to output this. In normal list reports, you will have to use 'WRITE' statements to format the output into columns and rows. Now suppose user wants some interactivity in it. Then you will have to provide some buttons and/or menu options through custom pf-status and then write logic for reacting to the user actions. After writing many such reportsm, you will feel like some of this can generalized and reused in every report.

That is exactly what ALV does. It takes out most of repeated sections of the code from out of you and provides you with excellent outputting functionality. It provides many standard functions like 'print', 'sort', 'filter', 'sum' etc by default. Imagine writing code yourself for all these if you were writing normal list program. One more major difference is the editing feature. If you were write a program that gives the user with editing features, then you will have to write a lot of logic. But with ALV, all the features like adding a row, deleting a row, copying a row, editing some fields of a row etc come by default.

Likewise, interactivity has become quite easy to implement. Like double clicking on a customer number, if the user wants to go to display customer transaction, it is very easy using ALV.

As pointed out here by others, go through the documentation of ALV and go through some of those demo programs and you will know the difference. ALV takes out a lot of burden of coding everything away from you and lets you worry about the business functionality that your report provides, rather than formatting the output or providing interactivity to the output.

<b>Reward points</b>


Former Member
0 Kudos


<b>Find the example code of ALV report.</b>

DATA : l_pos TYPE i VALUE 1.
  ist_fieldcat-fieldname = 'POSID'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 24.
  ist_fieldcat-col_pos   = l_pos.
*  ist_fieldcat-ddictxt = 'L'.
  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Appropriation Request Number'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.
  l_pos = l_pos + 1.
  ist_fieldcat-fieldname = 'TXT04'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 4.
  ist_fieldcat-col_pos   = l_pos.
  ist_fieldcat-ddictxt = 'L'.
*  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Status'.
  ist_fieldcat-EMPHASIZE = 'C400'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.
  l_pos = l_pos + 1.
  ist_fieldcat-fieldname = 'UDATE'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 8.
  ist_fieldcat-col_pos   = l_pos.
  ist_fieldcat-ddictxt = 'L'.
  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Status Date'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.

<i><b>Reward point if find helpful