0% found this document useful (0 votes)
19 views

Classical Reports in SAP ABAP

Classical Reports in SAP ABAP

Uploaded by

saikumar satya
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

Classical Reports in SAP ABAP

Classical Reports in SAP ABAP

Uploaded by

saikumar satya
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 42

Classical Reports :

Below are the list of Report Events. In ABAP, every event have importance.

 Load-of-program
 Initialization
 At Selection-Screen output
 At Selection-Screen on field
 At Selection-Screen on value request
 At Selection-Screen on help request
 At Selection-Screen
 Start-of-Selection
 End-of-Selection
 Top-of-Page
 End-of-Page
LOAD-OF-PROGRAM:
This is the first event in execution sequence. This event loads the program into memory
for execution.

All Data Declarations, Type Declarations will execute in this event only.

INITIALIZIATON:
This event is used to initialize variables, Screen values and other default actions.

We can provide default values to the selection screen which includes calculations.

We can provide default values in the declaration statement also. But we cannot perform
default values with calculations here.

Example :

SELECT-OPTIONS: s_date for sy-datum.

INITIALIZATION.
s_date-sign = ‘I’.
s_date-option = ‘EQ’.
s_date-low = sy-datum – 30.
s_date-high = sy-datum.
APPEND s_date.

AT SELECTION-SCREEN OUTPUT:
By using this event we can manipulate dynamic selection-screen changes.
This event triggers at the screen event PBO of the selection screen.

EXAMPLE :

REPORT ZBP_CLASSICAL_EVENTS.

PARAMETERS P_ENABLE AS CHECKBOX USER-COMMAND UC1.


PARAMETERS: INPUT(5) TYPE C MODIF ID IN1 . “Based on modif id we will
perform dynamic operations
AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.
IF P_ENABLE = ‘X’ . ” If check box is selected
IF SCREEN-GROUP1 = ‘IN1’ .
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
ENDIF.
ELSE.
IF SCREEN-GROUP1 = ‘IN1’ .
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN ON FIELD :
This event is used to validate a single selection-screen input parameter.

At Selection-Screen on <selection screen Field name>.


It will validate this particular field first.

AT SELECTION-SCREEN ON VALUE REQUEST :


This event is used to provide value help ( field help ) for a input field.

At Selection-Screen on Value request for <Selection Screen Field


Name>
It will provide F4 Help.

AT SELECTION-SCREEN ON HELP REQUEST :


By using this event we can provide F1 help for a input field.

At Selection-Screen on Help request for <Selection Screen Field


Name>
AT SELECTION-SCREEN :
This event is used to validate multiple input fields.

START-OF-SELECTION :
This is default event which is used to write actual business logic .

END-OF-SELECTION :
We can use this event just to state that start-of-selection is ended, this event is used
with logical databases, logical databases are in HR ABAP only. In normal ABAP we
don`t have much importance .

TOP-OF-PAGE :
This event prints constant heading for all pages.

END-OF-PAGE :
This event prints constant footer for all pages.

Before using this event, we need to reserve some lines for displaying footer .

REPORT ZBP_PROG LINE-COUNT 34(2).

It will reserve 2 lines space for end-of-page.


What Are Classical Reports
Classical Reports:
These are the most simple reports. Programmers learn this one first. It is just an output
of data using the Write statement inside a loop.
Classical reports are normal reports. These reports are not having any sub reports. IT
IS HAVING ONLY ONE SCREEN/LIST FOR OUTPUT.

Events In Classical Reports:


INTIALIZATION: This event triggers before selection screen display.
AT-SELECTION-SCREEN: This event triggers after proccesing user input still
selection screen is in active mode.
START OF SELECTION: Start of selection screen triggers after proceesing selection
screen.
END-OF-SELECTION: It is for Logical Database Reporting.

CLASSICAL REPORTS

Events in Classical report

Events associated with classical report are as follows and each one will be discussed
in detail.

- INITIALIZATION
- AT SELECTION-SCREEN
- AT SELECTION-SCREEN ON <field>
- START-OF-SELECTION
- TOP-OF-PAGE
- END-OF-PAGE
- END-OF-SELECTION

In this case first three events are associated with selection screen. Rest of the events
are associated with your list.

INITIALIZATION

We have already seen how to fill default values for the selection criteria. But in many
cases you need to calculate the value and then put it in selection criteria. For example,
say, you are accepting date from user and you need to fill in the default value for
lower range as sy-datum – 30 days and sy-datum for higher range. In this case you are
calculating lower range and then filling the criteria. This can be done in
INITIALIZATION event. Piece of code to do the above task would look like the
following:
Tables: Sflight.
Select-options: fldate1 for sflight-fldate.
INITIALIZATION.
Data: date1 like SY-DATUM.
Date1 = sy-datum – 30.
Fldate1-low = date1.
Fldate1-high = sy-datum.
Append fldate1.
* Here appending is required because fldate1 is int’ table
This event is triggered when you execute your program for the first time i.e., before
selection screen is displayed.

AT SELECTION-SCREEN

When user enters the values in the fields of selection screen and clicks on execute
button, this event gets triggered. This event is basically for checking the values
entered by the user for the fields of the selection screen i.e., data validity checking.
This event is for entire selection screen. For example:

You are accepting carrid, connid, fldate from user and you don’t want to proceed if
user enters no value for carrid and fldate. Using AT SELECTION-SCREEN can do
this.

Select-options: carrid1 for sflight-carrid,


Connid1 for sflight-connid,
F1date1 for sflight-f1date.

AT SELECTION-SCREEN.
If carrid1-low ne ‘ ’ and fldate1-low = ‘ ’.
Error message.
Endif.

In this case, if both the fields are entered blank, then the user gets error message.
Basically, this event is for many fields on selection screen. Usually, it is for the fields
which are logically related.
AT SELECTION-SCREEN ON <field>
When you want to check for specific value of a field. For example, carrid should be in
the range of ‘LH’ and ‘SQ’. This can be done in this event. Basically, this event is for
checking individual fields. You can have many AT selection-screen events in your
program (i.e., for each field specified in the Select-Options).

Select-Options carrid1 for sflight-carrid.

AT SELECTION-SCREEN.
If carrid1-low ne ‘LH’ and carrid1-high ne ‘SQ’.
Error message.
Endif.
Here the system will not proceed on entering wrong values.

START-OF-SELECTION

This is the first event for your list. Once all the events are triggered for selection
screen, the data is retrieved from database. Data declaration, select statements are
done in this event. Consider the following example:

START-OF-SELECTION.
Data: mtype i.
Tables: sflight.
Select * from sflight where carrid = ‘LH’.
Write: / sflight-carrid,sflight-connid.
Endselect.

TOP-OF-PAGE

This event is triggered with first WRITE statement or whenever new page is triggered.
Advantage of using this event is that, whatever you write under this event, is
applicable to all the pages. If you don’t have any write statement before TOP-OF-
PAGE or in START-OF-SELECTION, this event is not triggered at all. For example,
if you want the name of company and column headers for all the pages, it can be
written in this event.

TOP-OF-PAGE
Write: / ‘INTELLIGROUP ASIA PVT. LTD.’
Write : / 10 ‘carrid’, 20 ‘connid’, 30 ‘fldate’.

END-OF-PAGE
This event is triggered at the end of page.

End-of-page.
Write : / ‘page number’, sy-pagno.

In this case page number will be written on every page.

Conditional triggering of EOP

Consider the following case.

REPORT ZDEMO1 line-count 15(3).


Top-of-page.
Write: ‘this line is written by top-of-page event’.
Start-of-selection.
Write: ‘this line is written by start-of-selection event’.
End-of-page.
Write : ‘this line is written by end-of-page event’.

In this case EOP will never be triggered, as end of page is never reached. The total
Line-count defined for page = 15 in which 3 lines are for footer area. The output of
the above code will be

This line is written by top of page event.


This line is written by start of selection event.

In output screen, only two lines are written and cursor remains still on 3rd line, the
end-of-page event is not triggered. To trigger end of page event, cursor should reach
at the last position, in this case on 11th line.

Such cases are quite common, and could be overcome by conditional triggering of end
of page.

Sy-linct is the system variable, which gives total line count of a list.
Sy-linno is the system variable, which gives the current line number where the cursor
is placed on the list.

Consider the following case:

Report zdemo1 line count 20(1).


Start-of-selection.
Data: m type i.
Write: / ‘this is first line’.
Do 5 times.
Write: / ‘the number is’, sy-index.
Enddo.
M = sy-linct, sy-linno – 1.
Skip x.
End-of-page.
Write: / ‘page end’.

The output of above example is as follows :


This is first line.
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

After skipping 10 lines


Page end

In this case, with all write statement, you don’t reach to the end of page. After all
write statement, m is calculated in this case:

M = 20 – 8 – 1, So m is 12. And 11 lines are skipped after write statement and end of
page is reached. (In this case you have 6 write statement so 6 lines + 1 line for page
number and 1 horizontal line which is displayed for any list. So cursor is on 8th line
and is subtracted from total line count i.e, 20.)

Common errors that user commits

Stating of another event denotes the end of any event. If you forget to mention the
next event then everything is included in the same event. Consider the following case:

AT SELECTION-SCREEN.
If carrid1-low ne ‘ ‘.
Err. or message.
Endif.
Write: / ‘INTELLIGROUP ASIA P. LTD.’
WRITE: / 10 ‘CARRID’, 20 ‘CONNID’, 30 ‘FLDATE’.
START-OF-SELECTION.
….….
….
In this case all the write statement are included in the `at selection screen’ as top-of-
page is not specified. The end of `at selection-screen’ is denoted by the starting of
start-of-selection.

Though the sequence of events in program is immaterial, it is a good programming


practice to write all the events in the order specified above.

Using Variants with selection criteria

In many cases you need report to execute report at regular interval for certain fixed
values of selection criteria. That means each times you execute the report you need to
enter its values again and again. ABAP/4 provides the facility by which you can
define the values for selection screen and store it. Using VARIANTS can do this. It
can be defined as group of values used for selection criteria while executing report.
For a particular report, you create a variant which means variant created for particular
report cannot be used for another report. The group of values for the selection criteria
is saved and assigned a variant name. So every time you call a report, you need not
specify the values for selection criteria but instead call the variant thus avoiding extra
typing. User can have many variants for a single report. Each of them can be used as
different type of information. For example, if a manager wants to see how an
employee in personnel department or admin department has performed. He need not
enter the department, one has to just execute the report with variant. In case he doesn’t
know about the variant, which is available, he can display list of variants attached to
the report and values assigned to each variant.

Creating variant

- Execute the report program. The selection screen is displayed.


- Enter the values for selection screen and click on saves.
-- System displays the variant screen
- Enter the variant name and description for it.
- Save it.

Usually the variants are useful when you need to execute the report in background,
which will be discussed in background processing.

Check this sample code which provides exact info.

REPORT Z_ALVINTER1.

*********************************************************************
***
*TABLE DECLARATION*
*********************************************************************
***
TABLES: vbak , "Sales Document: Header Data
vbap , "Sales Document: Item Data
makt , "Material Descriptions
lips . "SD document: Delivery: Item data
*********************************************************************
***
*DECLARATION OF TYPE-POOL*
*THIS TYPE-POOL CONTAINS THE EVENTS,
*********************************************************************
***
TYPE-POOLS : slis.
*********************************************************************
***
*DECLARATION OF EVENTS*
*********************************************************************
***
DATA: i_event TYPE slis_t_event.
DATA: t_event TYPE slis_alv_event.
*********************************************************************
***
*DECLARATION OF LIST HEADER*
*********************************************************************
***
DATA: i_listheader TYPE slis_t_listheader.
*********************************************************************
***
*DECLARATION OF FIELD CATALOG FOR SCREEN 1*
*********************************************************************
***
DATA: i_fldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
*********************************************************************
***
*DECLARATION OF FIELD CATALOG FOR SCREEN 2*
*********************************************************************
***
DATA: i_fldcat2 TYPE slis_t_fieldcat_alv WITH HEADER LINE.
*********************************************************************
***
*DECLARATION OF FIELD LAYOUT*
*********************************************************************
***
DATA: i_layout TYPE slis_layout_alv.
*********************************************************************
***
*SORTING OF OUTPUT*
*********************************************************************
***
DATA: i_sort TYPE slis_t_sortinfo_alv.
*********************************************************************
***
*DATA DECLARATION
*********************************************************************
***
DATA: v_auart TYPE tvak-auart,
v_vkorg TYPE tvko-vkorg,
v_kunnr TYPE kna1-kunnr,
v_matnr TYPE mara-matnr ,
v_spart TYPE tvta-spart .

TYPES: BEGIN OF it_so ,

vbeln TYPE vbeln_va , "SALES ORDER NO.


auart TYPE auart , "SALES DOC. TYPE
vkorg TYPE vkorg , "SALES ORG.
spart TYPE spart , "DIVISION
kunnr TYPE kunag , "SOLD TO PARTY
posnr TYPE posnr_va , "SALES DOC. ITEM
matnr TYPE matnr , "MATERIAL NO
maktx TYPE maktx , "DESCRIPTION
kwmeng TYPE kwmeng , "QUANTITY
vrkme TYPE vrkme , "SALES UNIT
line_color(4) TYPE c ,

END OF it_so .

TYPES: BEGIN OF it_del ,

vbeln TYPE vbeln_vl , "SALES ORDER NO.


posnr TYPE posnr_vl , "SALES DOC. ITEM
matnr TYPE matnr , "MATERIAL NO
werks TYPE werks_d , "PLANT
lgort TYPE lgort_d , "STORAGE LOCATION
charg TYPE charg_d , "BATCH NO.
lfimg TYPE lfimg , "ACTUAL DELIVERY QTY.
vrkme TYPE vrkme , "SALES UNIT

END OF it_del .

TYPES: BEGIN OF type_vbfa ,

vbelv TYPE vbeln_von , "Preceding sales and distribution document


posnv TYPE posnr_von , "Preceding item of an SD document
vbeln TYPE vbeln_nach, "Subsequent sales and distribution document
posnn TYPE posnr_nach, "Document category of subsequent document
vbtyp_n TYPE vbtyp_n ,

END OF type_vbfa .

DATA: it_so1 TYPE STANDARD TABLE OF it_so ,


it_del1 TYPE STANDARD TABLE OF it_del ,
it_vbfa TYPE STANDARD TABLE OF type_vbfa,
it_del_ful TYPE STANDARD TABLE OF it_del.

DATA: wa_so TYPE it_so ,


wa_del TYPE it_del ,
wa_vbfa TYPE type_vbfa,
wa_it_del_ful TYPE it_del.

DATA: i_title_vbfa TYPE lvc_title VALUE 'SALES ORDER LIST DISPLAYED'.


DATA: i_title_vbpa TYPE lvc_title VALUE
'DELIVERY DETAILS DISPLAYED AGAINST GIVEN SALES ORDER'.

*********************************************************************
***
*SELECTION SCREEN *
*********************************************************************
***

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-004 .


SELECT-OPTIONS: s_vbeln FOR vbak-vbeln ,
s_auart FOR v_auart ,
s_vkorg FOR v_vkorg ,
s_spart FOR v_spart ,
s_kunnr FOR v_kunnr ,
s_matnr FOR v_matnr .
SELECTION-SCREEN END OF BLOCK blk1 .

*********************************************************************
***
*AT SELECTION SCREEN *
*********************************************************************
***
AT SELECTION-SCREEN.

SELECT SINGLE vbeln


FROM vbak INTO vbak-vbeln
WHERE vbeln IN s_vbeln.

IF sy-subrc <> 0.
MESSAGE e202.
ENDIF.
*********************************************************************
***
*START OF SELECTION *
*********************************************************************
***
START-OF-SELECTION .

PERFORM data_select.
PERFORM t_sort USING i_sort .
PERFORM event_cat USING i_event .
PERFORM fld_cat USING i_fldcat[] .
PERFORM t_layout USING i_layout .
PERFORM fld_cat2 USING i_fldcat2[] .
PERFORM call_alv.
*********************************************************************
***
* DATA SELECT *
*********************************************************************
***

*&---------------------------------------------------------------------*
*& Form DATA_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM data_select .

REFRESH: it_vbfa, it_so1, it_del_ful ,it_del1 .


* BREAK-POINT.
SELECT
a~vbeln
a~auart
a~vkorg
a~spart
a~kunnr
b~posnr
b~matnr
c~maktx
b~kwmeng
b~vrkme
INTO TABLE it_so1 FROM vbak AS a
JOIN vbap AS b ON b~vbeln = a~vbeln
JOIN makt AS c ON c~matnr = b~matnr
AND c~spras = sy-langu
WHERE a~vbeln IN s_vbeln .

*********************************************************************
***
* COLURING DISPLAY *
*********************************************************************
***

DATA: ld_color(1) TYPE c .


LOOP AT it_so1 INTO wa_so.
* Populate color variable with colour properties
* Char 1 = C (This is a color property)
* Char 2 = 3 (Color codes: 1 - 7)
* Char 3 = Intensified on/off ( 1 or 0 )
* Char 4 = Inverse display on/off ( 1 or 0 )
* i.e. wa_ekko-line_color = 'C410'
ld_color = ld_color + 1.
* Only 7 colours so need to reset color value
IF ld_color = 8.
ld_color = 1.
ENDIF.
CONCATENATE 'C' ld_color '10' INTO wa_so-line_color.
* wa_ekko-line_color = 'C410'.
MODIFY it_so1 FROM wa_so.
ENDLOOP .

IF sy-subrc = 0.

SELECT vbelv
posnv
vbeln
posnn
vbtyp_n
INTO TABLE it_vbfa
FROM vbfa
FOR ALL ENTRIES IN it_so1
WHERE vbelv = it_so1-vbeln
AND posnn = it_so1-posnr
AND vbtyp_n ='J' .

IF sy-subrc = 0.

SELECT vbeln
posnr
matnr
werks
lgort
charg
lfimg
vrkme
FROM lips INTO TABLE it_del_ful
FOR ALL ENTRIES IN it_vbfa
WHERE vbeln = it_vbfa-vbeln
AND posnr = it_vbfa-posnn.

ENDIF.

ENDIF.
ENDFORM. " DATA_SELECT

*********************************************************************
**
**************** EVENT CATALOG
****************************************
*********************************************************************
**

*&---------------------------------------------------------------------*
*& Form EVENT_CAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_EVENT text
*----------------------------------------------------------------------*

FORM event_cat USING p_i_event TYPE slis_t_event .

REFRESH p_i_event .

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'


* EXPORTING
* I_LIST_TYPE = 0
IMPORTING
et_events = p_i_event
* EXCEPTIONS
* LIST_TYPE_WRONG = 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.

READ TABLE p_i_event WITH KEY name = slis_ev_top_of_page INTO t_event.

IF sy-subrc = 0.

MOVE 'TOP_OF_PAGE' TO t_event-form.


MODIFY p_i_event FROM t_event INDEX sy-tabix TRANSPORTING form.
ENDIF.

CLEAR t_event .

ENDFORM. " EVENT_CAT

*********************************************************************
*
**********FORM FOR EVENT
TOP_OF_PAGE**********************************
*********************************************************************
*

FORM top_of_page .

REFRESH i_listheader.
DATA: t_header TYPE slis_listheader.
DATA: v_text(50).

WRITE sy-datum TO v_text.


CLEAR t_header.
t_header-typ = 'S'.
t_header-key = 'Date'.
t_header-info = v_text.
APPEND t_header TO i_listheader.

CLEAR t_header.
CLEAR v_text.

* WRITE: 'SALES ORDER REPORT ' TO v_text .

* t_header-typ = 'S'.
* t_header-key = 'TITLE'.
* t_header-info = v_text.
* APPEND t_header TO i_listheader.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
it_list_commentary = i_listheader
I_LOGO = 'ENJOYSAP_LOGO' .
* I_END_OF_LIST_GRID =

ENDFORM. "TOP_OF_PAGE

*********************************************************************
***
******** FIRST ALV GRID DISPLAY
***************************************
*********************************************************************
***

*&---------------------------------------------------------------------*
*& Form CALL_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

FORM call_alv .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND1'
i_callback_top_of_page = 'TOP_OF_PAGE'
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
i_grid_title = i_title_vbfa
is_layout = i_layout
it_fieldcat = i_fldcat[]
it_sort = i_sort
it_events = i_event
TABLES
t_outtab = it_so1
.
* 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. " CALL_ALV


*********************************************************************
**
************** FIRST FIELDCATALOG
*************************************
*********************************************************************
**
*&---------------------------------------------------------------------*
*& Form FLD_CAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_FLDCAT[] text
*----------------------------------------------------------------------*

FORM fld_cat USING p_i_fldcat TYPE slis_t_fieldcat_alv.

CLEAR i_fldcat.
i_fldcat-fieldname = 'VBELN'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'."TABLE NAME
i_fldcat-seltext_m = 'SALES ORDER NO.'.
i_fldcat-col_pos = 1. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.

APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'AUART'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'."TABLE NAME
i_fldcat-seltext_m = 'SALES DOC. TYPE'.
i_fldcat-col_pos = 2. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 15. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.

APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'VKORG'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'SALES ORG.'.
i_fldcat-col_pos = 3. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 12. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'SPART'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'DIVISION'.
i_fldcat-col_pos = 4. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 10. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'KUNNR'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'SOLD TO PARTY'.
i_fldcat-col_pos = 5. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 15. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'POSNR'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'SALES DOC. ITEM'.
i_fldcat-col_pos = 6. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 17. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.

i_fldcat-fieldname = 'MATNR'. "FIELD FOR WHICH CATALOG ID FILLED


i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'MATERIAL NO.'.
i_fldcat-col_pos = 7. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'MAKTX'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'DESCRIPTION'.
i_fldcat-col_pos = 8. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'KWMENG'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'QUANTITY'.
i_fldcat-col_pos = 9. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 15. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-do_sum = 'X'. " For doing "SUM"
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

CLEAR i_fldcat.
i_fldcat-fieldname = 'VRKME'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat-tabname = 'IT_SO1'.
i_fldcat-seltext_m = 'SALES UNIT'.
i_fldcat-col_pos = 10. " POSITION OF THE COLUMN.
i_fldcat-outputlen = 10. " SET THE OUTPUT LENGTH.
i_fldcat-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat-just(1) = 'C'.
APPEND i_fldcat.

ENDFORM. " FLD_CAT

*********************************************************************
**
****************** ALV SORTING
***************************************
*********************************************************************
**
*&---------------------------------------------------------------------*
*& Form SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_SORT text
*----------------------------------------------------------------------*

FORM t_sort USING p_i_sort TYPE slis_t_sortinfo_alv .

DATA: i_sort TYPE slis_sortinfo_alv .


REFRESH p_i_sort .
CLEAR i_sort.
i_sort-spos = 1.
i_sort-tabname = 'IT_SO1'.
i_sort-fieldname = 'VBELN'.
i_sort-up = 'X'.
i_sort-subtot = 'X'.
i_sort-group = '*'.
APPEND i_sort TO p_i_sort.

ENDFORM. " SORT

*FORM SET_PF_STATUS USING rt_extab TYPE slis_t_extab.


* SET PF-STATUS 'ZSTANDARD'.
*ENDFORM. "Set_pf_status

*********************************************************************
**
***********FORM FOR EVENT
USER_COMMAND1********************************
*********************************************************************
**

FORM user_command1 USING r_ucomm LIKE sy-ucomm


rs_selfield TYPE slis_selfield.

*CASE R_UCOMM .
* WHEN '&IC1' .
*
* IF rs_selfield-FIELDNAME = 'VBELN' .
*
* ENDIF .
*
* WHEN OTHERS .
*
* ENDCASE .

CLEAR wa_so.

REFRESH: it_del1 .

IF r_ucomm = '&IC1' AND rs_selfield-fieldname = 'VBELN' AND


rs_selfield-value IS NOT INITIAL.
READ TABLE it_so1 INTO wa_so INDEX rs_selfield-tabindex.

IF sy-subrc = 0.

LOOP AT it_vbfa INTO wa_vbfa WHERE vbelv = wa_so-vbeln


AND posnv = wa_so-posnr.
READ TABLE it_del_ful INTO wa_it_del_ful
WITH KEY vbeln = wa_vbfa-vbelv
posnr = wa_vbfa-posnn.

IF sy-subrc = 0.

CLEAR wa_del.
MOVE wa_it_del_ful TO wa_del.
APPEND wa_del TO it_del1.

ENDIF.

ENDLOOP.
ENDIF.
ENDIF.

*********************************************************************
********* SECOND ALV GRID DISPLAY
***********************************
*********************************************************************
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND2'
i_callback_top_of_page = 'TOP_OF_PAGE'
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
i_grid_title = i_title_vbpa
it_fieldcat = i_fldcat2[]
it_sort = i_sort
TABLES
t_outtab = it_del_ful
.
* 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 . "USER_COMMAND1
*********************************************************************
**
********** FORM FOR EVENT USER_COMMAND 2
******************************
*********************************************************************
**

FORM user_command2 USING r_ucomm LIKE sy-ucomm


rs_selfield TYPE slis_selfield.

CLEAR wa_so.

REFRESH: it_del1 .

IF r_ucomm = '&IC1' AND rs_selfield-fieldname = 'VBELN' AND


rs_selfield-value IS NOT INITIAL.

READ TABLE it_so1 INTO wa_so INDEX rs_selfield-tabindex.

* IF SY-SUBRC = 0.
*
* LOOP AT it_vbfa INTO wa_vbfa WHERE vbelv = WA_SO-vbeln
* AND posnv = WA_SO-posnr.
READ TABLE it_del_ful INTO wa_it_del_ful
WITH KEY vbeln = rs_selfield-value
posnr = wa_vbfa-posnn.

IF rs_selfield-fieldname = 'VBELN'.

SET PARAMETER ID 'VL' FIELD wa_vbfa-vbeln .


CALL TRANSACTION 'VL03' AND SKIP FIRST SCREEN.

ENDIF .

* ENDLOOP.
* ENDIF.
ENDIF.
ENDFORM . "USER_COMMAND2
*********************************************************************
***
********* SECOND FIELDCATALOG
******************************************
*********************************************************************
***

*&---------------------------------------------------------------------*
*& Form FLD_CAT2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_FLDCAT2[] text
*----------------------------------------------------------------------*

FORM fld_cat2 USING p_i_fldcat2 TYPE slis_t_fieldcat_alv .

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'VBELN'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-tabname = 'IT_DEL_FUL'."TABLE NAME
i_fldcat2-seltext_m = 'DELIVERY NO.'.
i_fldcat2-col_pos = 1. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-hotspot = 'X'.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'POSNR'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'DELIVERY ITEM'.
i_fldcat2-col_pos = 2. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.
CLEAR i_fldcat2.
i_fldcat2-fieldname = 'MATNR'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'MATERIAL NO.'.
i_fldcat2-col_pos = 3. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'WERKS'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'PLANT.'.
i_fldcat2-col_pos = 4. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'LGORT'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'ST. LOCATION'.
i_fldcat2-col_pos = 5. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'CHARG'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'BATCH NO.'.
i_fldcat2-col_pos = 6. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'LFIMG'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'ACT. DEL. QTY.'.
i_fldcat2-col_pos = 7. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

CLEAR i_fldcat2.
i_fldcat2-fieldname = 'VRKME'. "FIELD FOR WHICH CATALOG ID FILLED
i_fldcat2-seltext_m = 'SALES UNIT.'.
i_fldcat2-col_pos = 8. " POSITION OF THE COLUMN.
i_fldcat2-outputlen = 20. " SET THE OUTPUT LENGTH.
i_fldcat2-emphasize = 'X'. " COLOR OF THIS COLUMN.
i_fldcat2-key = 'X'. " SO THAT THIS FIELD IS NOT
"SCROLLABLE AND HIDDABLE.
i_fldcat2-just(1) = 'C'.
APPEND i_fldcat2.

ENDFORM. " FLD_CAT2

*********************************************************************
***
***************** ALV LAYOUT
*******************************************
*********************************************************************
***
*&---------------------------------------------------------------------*
*& Form LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_LAYOUT text
*----------------------------------------------------------------------*

FORM t_layout USING p_i_layout TYPE slis_layout_alv .


p_i_layout-zebra = 'X'.
p_i_layout-totals_text = 'GRAND TOTAL ='.
* p_i_layout-CONFIRMATION_PROMPT = 'X'.
* p_i_layout-DEF_STATUS = ' '.
p_i_layout-info_fieldname = 'LINE_COLOR'.

ENDFORM. " LAYOUT

This is the sample report for ALV INTERACTIVE .

REPORT YMS_ALVINTERSAMPLE NO STANDARD PAGE HEADING LINE-


SIZE 650
MESSAGE-ID ZZ_9838.

TYPE-POOLS: SLIS.
*type declaration for values from ekko
TYPES: BEGIN OF I_EKKO,
EBELN LIKE EKKO-EBELN,
AEDAT LIKE EKKO-AEDAT,
BUKRS LIKE EKKO-BUKRS,
BSART LIKE EKKO-BSART,
LIFNR LIKE EKKO-LIFNR,
END OF I_EKKO.

DATA: IT_EKKO TYPE STANDARD TABLE OF I_EKKO INITIAL SIZE 0,


WA_EKKO TYPE I_EKKO.

*type declaration for values from ekpo


TYPES: BEGIN OF I_EKPO,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
NETPR LIKE EKPO-NETPR,
END OF I_EKPO.

DATA: IT_EKPO TYPE STANDARD TABLE OF I_EKPO INITIAL SIZE 0,


WA_EKPO TYPE I_EKPO .
*variable for Report ID
DATA: V_REPID LIKE SY-REPID .

*declaration for fieldcatalog


DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

DATA: IT_LISTHEADER TYPE SLIS_T_LISTHEADER.

* declaration for events table where user comand or set PF status will
* be defined
DATA: V_EVENTS TYPE SLIS_T_EVENT,
WA_EVENT TYPE SLIS_ALV_EVENT.

* declartion for layout


DATA: ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.

* declaration for variant(type of display we want)


DATA: I_VARIANT TYPE DISVARIANT,
I_VARIANT1 TYPE DISVARIANT,
I_SAVE(1) TYPE C.

*PARAMETERS : p_var TYPE disvariant-variant.

*Title displayed when the alv list is displayed


DATA: I_TITLE_EKKO TYPE LVC_TITLE VALUE 'FIRST LIST DISPLAYED'.
DATA: I_TITLE_EKPO TYPE LVC_TITLE VALUE 'SECONDRY LIST
DISPLAYED'.

INITIALIZATION.
V_REPID = SY-REPID.
PERFORM BUILD_FIELDCATLOG.
PERFORM EVENT_CALL.
PERFORM POPULATE_EVENT.

START-OF-SELECTION.
PERFORM DATA_RETRIEVAL.
PERFORM BUILD_LISTHEADER USING IT_LISTHEADER.
PERFORM DISPLAY_ALV_REPORT.
*&--------------------------------------------------------------------*
*& Form BUILD_FIELDCATLOG
*&--------------------------------------------------------------------*
* Fieldcatalog has all the field details from ekko
*---------------------------------------------------------------------*
FORM BUILD_FIELDCATLOG.
WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'EBELN'.
WA_FIELDCAT-SELTEXT_M = 'PO NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'AEDAT'.
WA_FIELDCAT-SELTEXT_M = 'DATE.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'BUKRS'.
WA_FIELDCAT-SELTEXT_M = 'COMPANY CODE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'BUKRS'.
WA_FIELDCAT-SELTEXT_M = 'DOCMENT TYPE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_EKKO'.
WA_FIELDCAT-FIELDNAME = 'LIFNR'.
WA_FIELDCAT-NO_OUT = 'X'.
WA_FIELDCAT-SELTEXT_M = 'VENDOR CODE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

ENDFORM. "BUILD_FIELDCATLOG

*&--------------------------------------------------------------------*
*& Form EVENT_CALL
*&--------------------------------------------------------------------*
* we get all events - TOP OF PAGE or USER COMMAND in table v_events
*---------------------------------------------------------------------*
FORM EVENT_CALL.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = V_EVENTS
* EXCEPTIONS
* LIST_TYPE_WRONG = 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. "EVENT_CALL

*&--------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&--------------------------------------------------------------------*
* Events populated for TOP OF PAGE & USER COMAND
*---------------------------------------------------------------------*
FORM POPULATE_EVENT.
READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME =
'TOP_OF_PAGE'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'TOP_OF_PAGE'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE
NAME =
WA_EVENT-FORM.
ENDIF.

READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME =


'USER_COMMAND'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'USER_COMMAND'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE
NAME =
WA_EVENT-NAME.
ENDIF.
ENDFORM. "POPULATE_EVENT

*&--------------------------------------------------------------------*
*& Form data_retrieval
*&--------------------------------------------------------------------*
* retreiving values from the database table ekko
*---------------------------------------------------------------------*
FORM DATA_RETRIEVAL.
SELECT EBELN AEDAT BUKRS BSART LIFNR FROM EKKO INTO TABLE
IT_EKKO.

ENDFORM. "data_retrieval
*&--------------------------------------------------------------------*
*& Form bUild_listheader
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->I_LISTHEADEtext
*---------------------------------------------------------------------*
FORM BUILD_LISTHEADER USING I_LISTHEADER TYPE
SLIS_T_LISTHEADER.
DATA HLINE TYPE SLIS_LISTHEADER.
HLINE-INFO = 'this is my first alv pgm'.
HLINE-TYP = 'H'.
ENDFORM. "build_listheader

*&--------------------------------------------------------------------*
*& Form display_alv_report
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.
V_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_GRID_TITLE = I_TITLE_EKKO
* I_GRID_SETTINGS =
* IS_LAYOUT = ALV_LAYOUT
IT_FIELDCAT = I_FIELDCAT[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* i_default = 'ZLAY1'
I_SAVE = 'A'
* is_variant = i_variant
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = IT_EKKO
* 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_report

*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_LISTHEADER
* i_logo =
* I_END_OF_LIST_GRID =
.

ENDFORM. "TOP_OF_PAGE
*&--------------------------------------------------------------------*
*& Form USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->R_UCOMM text
* -->, text
* -->RS_SLEFIELDtext
*---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE IT_EKKO INTO WA_EKKO INDEX RS_SELFIELD-TABINDEX.
PERFORM BUILD_FIELDCATLOG_EKPO.
PERFORM EVENT_CALL_EKPO.
PERFORM POPULATE_EVENT_EKPO.
PERFORM DATA_RETRIEVAL_EKPO.
PERFORM BUILD_LISTHEADER_EKPO USING IT_LISTHEADER.
PERFORM DISPLAY_ALV_EKPO.
ENDCASE.
ENDFORM. "user_command
*&--------------------------------------------------------------------*
*& Form BUILD_FIELDCATLOG_EKPO
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM BUILD_FIELDCATLOG_EKPO.

WA_FIELDCAT-TABNAME = 'IT_EKPO'.
WA_FIELDCAT-FIELDNAME = 'EBELN'.
WA_FIELDCAT-SELTEXT_M = 'PO NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'IT_EKPO'.
WA_FIELDCAT-FIELDNAME = 'EBELP'.
WA_FIELDCAT-SELTEXT_M = 'LINE NO'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MATNR'.
WA_FIELDCAT-SELTEXT_M = 'MATERIAL NO.'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MENGE'.
WA_FIELDCAT-SELTEXT_M = 'QUANTITY'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'MEINS'.
WA_FIELDCAT-SELTEXT_M = 'UOM'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'I_EKPO'.
WA_FIELDCAT-FIELDNAME = 'NETPR'.
WA_FIELDCAT-SELTEXT_M = 'PRICE'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR WA_FIELDCAT.

ENDFORM. "BUILD_FIELDCATLOG_EKPO

*&--------------------------------------------------------------------*
*& Form event_call_ekpo
*&--------------------------------------------------------------------*
* we get all events - TOP OF PAGE or USER COMMAND in table v_events
*---------------------------------------------------------------------*
FORM EVENT_CALL_EKPO.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = V_EVENTS
* EXCEPTIONS
* LIST_TYPE_WRONG = 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. "event_call_ekpo

*&--------------------------------------------------------------------*
*& Form POPULATE_EVENT
*&--------------------------------------------------------------------*
* Events populated for TOP OF PAGE & USER COMAND
*---------------------------------------------------------------------*
FORM POPULATE_EVENT_EKPO.
READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME =
'TOP_OF_PAGE'.
IF SY-SUBRC EQ 0.
WA_EVENT-FORM = 'TOP_OF_PAGE'.
MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE
NAME =
WA_EVENT-FORM.
ENDIF.

ENDFORM. "POPULATE_EVENT

*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM F_TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_LISTHEADER
* i_logo =
* I_END_OF_LIST_GRID =
.

ENDFORM. "TOP_OF_PAGE

*&--------------------------------------------------------------------*
*& Form USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->R_UCOMM text
* -->, text
* -->RS_SLEFIELDtext
*---------------------------------------------------------------------*

*retreiving values from the database table ekko


FORM DATA_RETRIEVAL_EKPO.
SELECT EBELN EBELP MATNR MENGE MEINS NETPR FROM EKPO INTO
TABLE IT_EKPO.
ENDFORM.

FORM BUILD_LISTHEADER_EKPO USING I_LISTHEADER TYPE


SLIS_T_LISTHEADER.
DATA: HLINE1 TYPE SLIS_LISTHEADER.
HLINE1-TYP = 'H'.
HLINE1-INFO = 'CHECKING PGM'.
ENDFORM.

FORM DISPLAY_ALV_EKPO.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = V_REPID
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = I_TITLE_EKPO
* I_GRID_SETTINGS =
* IS_LAYOUT =
IT_FIELDCAT = I_FIELDCAT[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT =
I_SAVE = 'A'
* IS_VARIANT =
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = IT_EKPO
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.

SAP ABAP Classical Reports


SAP ABAP Classical Reports are the most basic ABAP reports that
contain both selection screen and an output screen. Classical
reports are executed based on events, and not executed on a line-
by-line basis. Classical reports are non-interactive reports.
Basically, they consist of one program that creates a single list.
The following SAP training tutorials guides various events in
classical reports, provide the syntax for each and then present a
simple programming example of a Classical Report.
Events in Classical Reports.
The following are the list of Events in Classical Reports.
1. Load-of-program: The Load-of-program event loads the
program into memory for execution. Always, Load-of-program is the
first event in execution sequence.
2. Initialization: Initialization is an event that is used for initialize
variables, screen values and other default actions.
3. At Selection-Screen output: One of the selection screen
events is used to manipulate dynamic selection-screen changes.
4. At Selection-Screen on field: It is used to validates the screen
input parameter.
5. At Selection-Screen on value request: This selection screen
event allows for a value help or field help for an input field.
6. At Selection-Screen on help request: This selection screen
event enables function key F1 help for a input field.
7. At Selection-Screen: Selection screen validates various input
fields.
8. Start-of-Selection: This is the default event in any ABAP
program and is activated whether we use it explicitly or not .
9. End-of-Selection: This event signals that event of what has
been initiated by the start-of-selection event.
10. Top-of-Page: This event is used to print the same heading for
all pages.
11. End-of-Page: This event is used to print the same footer for all
pages.

The below simple programming example shows how an typical


Classical Report is written:

REPORT ZSIMPLE_DBPRG.
TABLES MARA.
DATA : WA_MARA LIKE MARA.
START-OF-SELECTION.
**FIRST MARA IS DATABASE TABLE SECOND MARA IS DEFAULT
STRUCTURE
*SELECT SINGLE * FROM MARA INTO MARA.
* SELECT SINGLE * FROM MARA INTO MARA WHERE matnr EQ
‘000000000000000023’.
SELECT SINGLE * FROM MARA INTO MARA WHERE matnr EQ
‘000000000000000023’.
IF SY-SUBRC EQ 0.
WRITE :/10 ‘SELECT SUCCESSFUL’.
move-CORRESPONDING mara to wa_mara.
ELSE.
WRITE :/10 ‘SELECT NOT SUCCESSFUL’.
ENDIF.
END-OF-SELECTION.
if WA_mara is not INITIAL.
WRITE /10 : WA_MARA-MATNR, “MATERIAL NUMBER
WA_MARA-MTART, “MATERIAL TYPE
WA_MARA-MBRSH, “INDUSTRY SECTOR
WA_MARA-MATKL. “MATERIAL ID
else.
write :/10 ‘wa_mara is empty…’.
endif.

You might also like