Вы находитесь на странице: 1из 4

Display ALV Grid on List

Generated by WRITE

Ever wondered how to generate the ALV Grid on the list generated by WRITE
statement. Lets see today how we can do that.

Preface
Many years ago I wrote an article (I used to refer them as Post, that time) on how to
display the ALV on the selection screen. The idea on displaying the ALV on
selection screen is simple Get the data, create the docking container and display
that on the selection screen generated by the program. Read more on that
atDisplay ALV report output in the SAME Selection Screen

For this new way, I was researching how to apply the similar concept on the List
generated by the WRITE. I should be fare here I didnt thought of working on this
until, reader Kousik Mishra raised the question on how to achieve it.

The output is something similar to this:

Solution
I will skip the journey as I referred to the earlier post and fast forward to come to the
point. The key here is to display the output on the screen generated by the list.
When we use the WRITE statement, system uses the specific screen to display
that list. The screen is 0120 of the program SAPMSSY0. So, while generating the
docking container, I have used that to display the ALV grid.

Code Lines
Here is the complete code:

*&--------------------------------------------------------------------
-*
*& Generates the ALV on the List generated by WRITE
*& Author: Naimesh Patel
*&--------------------------------------------------------------------
-*
REPORT zalv_grid_on_list_screen NO STANDARD PAGE HEADING.
*
*---------------------------------------------------------------------
-*
* Local class for report
*---------------------------------------------------------------------
-*
CLASS lcl_report DEFINITION.
*
PUBLIC SECTION.
*
DATA: t_data TYPE STANDARD TABLE OF sflight, " Output data
r_carrid TYPE RANGE OF sflight-carrid. " Select Option
*
METHODS:
get_data,
write_list,
generate_alv.
*
ENDCLASS. "lcl_report DEFINITION
*
DATA: o_report TYPE REF TO lcl_report.
*
DATA: v_carrid TYPE sflight-carrid.
*
** Selection Screen
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.
SELECT-OPTIONS: s_carrid FOR v_carrid.
SELECTION-SCREEN: END OF BLOCK blk1.
*
** Initialization
INITIALIZATION.
aaa = 'Selection Criteria'.

*
** Start of Selection
START-OF-SELECTION.
* object for the report
CREATE OBJECT o_report.

* Get data
o_report->r_carrid = s_carrid[].
o_report->get_data( ).
* generate output
o_report->write_list( ).
o_report->generate_alv( ).

*---------------------------------------------------------------------
-*
* Local Class Implementation
*---------------------------------------------------------------------
-*
CLASS lcl_report IMPLEMENTATION.
*
METHOD get_data.
* data selection
SELECT * FROM sflight
INTO TABLE me->t_data
WHERE carrid IN s_carrid.

ENDMETHOD. "get_data
*
METHOD write_list.

WRITE: / 'This list is generated using the Good Old fashioned


WRITE'.
WRITE: / ' --- Total number of records', LINES( t_data ).

ENDMETHOD.
*
METHOD generate_alv.
* local data
DATA: lo_dock TYPE REF TO cl_gui_docking_container,
lo_cont TYPE REF TO cl_gui_container,
lo_alv TYPE REF TO cl_salv_table.

DATA: lv_repid TYPE sy-repid,


lv_dynnr TYPE sy-dynnr.

lv_repid = 'SAPMSSY0'.
lv_dynnr = '0120'.

*
* Create a docking control at bottom
CHECK lo_dock IS INITIAL.
CREATE OBJECT lo_dock
EXPORTING
repid = lv_repid
dynnr = lv_dynnr
ratio = 80
side = cl_gui_docking_container=>dock_at_bottom
NAME = 'DOCK_CONT'.
IF sy-subrc <> 0.
MESSAGE 'Error in the Docking control' TYPE 'S'.
ENDIF.
*
* Create a SALV for output
CHECK lo_alv IS INITIAL.
TRY.
* Narrow Casting: To initialize custom container from
* docking container
lo_cont ?= lo_dock.
*
* SALV Table Display on the Docking container
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
r_container = lo_cont
container_name = 'DOCK_CONT'
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = me->t_data.
CATCH cx_salv_msg .
ENDTRY.
*
* Pf status
DATA: lo_functions TYPE REF TO cl_salv_functions_list.
lo_functions = lo_alv->get_functions( ).
lo_functions->set_default( abap_true ).
*
* output display
lo_alv->display( ).
*
ENDMETHOD. "generate_ALV
*
ENDCLASS. "lcl_report IMPLEMENTATION

Output with ALV functions applied

Just to make sure all other functions on ALV also works