Showing posts with label ALV. Show all posts
Showing posts with label ALV. Show all posts

Traffic Light in ALV Reports

Many a times we have to display a traffic light in ALV report. We can do that easily using "Exceptions" parameter provided by SAP. But it has one drawback, we cannot change the column header to something meaningful. It always set as "Exception" in case of ALV Grid and an icon in case of ALV List.

Here I'll show a workaround to show the traffic lights with a meaningful column header.

The exception display:


















The workaround is to use a field of type CHAR4 and display it as Icon.
To display a field as icon, in ALV Field catalog we have to mark ICON field as 'X'. The icons for traffic lights are : icon_green_light, icon_red_light and icon_yellow_light.


















The code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
*&---------------------------------------------------------------------*
*& Report ZTEST_SOURAV_TRAFFIC_LIGHTS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_sourav_traffic_lights.
TYPE-POOLS: slis,icon.
TYPES: BEGIN OF x_sflight,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
fldate TYPE s_date,
price TYPE s_price,
currency TYPE s_currcode,
seatsmax TYPE s_seatsmax,
seatsocc TYPE s_seatsocc,
END OF x_sflight.
TYPES:BEGIN OF x_final,
icon TYPE char4.
INCLUDE TYPE x_sflight.
TYPES: END OF x_final.

DATA: i_sflight TYPE STANDARD TABLE OF x_sflight INITIAL SIZE 0,
i_final TYPE STANDARD TABLE OF x_final INITIAL SIZE 0,
i_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv.


CONSTANTS: program TYPE syrepid VALUE sy-repid.

START-OF-SELECTION.
SELECT carrid " Airline Code
connid " Flight Connection Number
fldate " Flight date
price " Airfare
currency " Local currency of airline
seatsmax " Maximum capacity in economy class
seatsocc " Occupied seats in economy class
FROM sflight " Flight
INTO TABLE i_sflight.
IF sy-subrc <> 0.
MESSAGE i001(00) WITH 'No data found!'.
LEAVE LIST-PROCESSING.
ENDIF.


END-OF-SELECTION.

PERFORM populate_records.

PERFORM display_records.


*&---------------------------------------------------------------------*
*& Form populate_records
*&---------------------------------------------------------------------*
* Populate final table
*----------------------------------------------------------------------*
FORM populate_records .

DATA:
wa_sflight TYPE x_sflight,
wa_final TYPE x_final,
temp TYPE p DECIMALS 2.

LOOP AT i_sflight INTO wa_sflight.
CLEAR temp.
*Calculate Percentage of booked flights
temp = ( wa_sflight-seatsocc / wa_sflight-seatsmax ) .

IF temp > '0.9'.
*If booked more than 90%
wa_final-icon = icon_green_light.
ELSEIF temp < '0.2'.
*If booked less than 20%
wa_final-icon = icon_red_light.
ELSE.
*If its between 20% to 90 %
wa_final-icon = icon_yellow_light.
ENDIF.

wa_final-carrid = wa_sflight-carrid.
wa_final-connid = wa_sflight-connid.
wa_final-fldate = wa_sflight-fldate.
wa_final-price = wa_sflight-price.
wa_final-currency = wa_sflight-currency.
wa_final-seatsmax = wa_sflight-seatsmax.
wa_final-seatsocc = wa_sflight-seatsocc.

APPEND wa_final TO i_final.
CLEAR wa_final.
ENDLOOP.
FREE i_sflight.
ENDFORM. " populate_records
*&---------------------------------------------------------------------*
*& Form display_records
*&---------------------------------------------------------------------*
* Subroutines for Display
*----------------------------------------------------------------------*
FORM display_records .

PERFORM populate_field_catalog.

PERFORM populate_layout.

PERFORM trigger_alv.

ENDFORM. " display_records
*&---------------------------------------------------------------------*
*& Form populate_field_catalog
*&---------------------------------------------------------------------*
* Popualte Field Catalog
*----------------------------------------------------------------------*
FORM populate_field_catalog .
DATA:
wa_fieldcat TYPE slis_fieldcat_alv.
DEFINE fcat_merge.

wa_fieldcat-col_pos = &1.
wa_fieldcat-fieldname = &2.
if wa_fieldcat-fieldname = 'ICON'.
wa_fieldcat-icon = 'X'. " Display the field as ICON
wa_fieldcat-seltext_m = 'Occupency Status'. " Column Header
wa_fieldcat-inttype = 'C'.
wa_fieldcat-outputlen = '4'.
endif.

wa_fieldcat-ref_fieldname = &3.
wa_fieldcat-ref_tabname = &4.

if wa_fieldcat-fieldname = 'PRICE'.
wa_fieldcat-cfieldname = 'CURRENCY'.
wa_fieldcat-ctabname = 'I_FINAL'.
endif.

append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
END-OF-DEFINITION.

fcat_merge: '1' 'ICON' '' '',
'2' 'CARRID' 'CARRID' 'SFLIGHT',
'3' 'CONNID' 'CONNID' 'SFLIGHT',
'4' 'FLDATE' 'FLDATE' 'SFLIGHT',
'5' 'PRICE' 'PRICE' 'SFLIGHT',
'6' 'CURRENCY' 'CURRENCY' 'SFLIGHT',
'7' 'SEATSMAX' 'SEATSMAX' 'SFLIGHT',
'8' 'SEATSOCC' 'SEATSOCC' 'SFLIGHT'.

ENDFORM. " populate_field_catalog

*&---------------------------------------------------------------------*
*& Form populate_layout
*&---------------------------------------------------------------------*
* Populate LAYOUT Structure for ALV
*----------------------------------------------------------------------*
FORM populate_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
ENDFORM. "populate_layout
*&---------------------------------------------------------------------*
*& Form trigger_alv
*&---------------------------------------------------------------------*
* Trigger the ALV API
*----------------------------------------------------------------------*
FORM trigger_alv .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = program
is_layout = wa_layout
it_fieldcat = i_fieldcat
TABLES
t_outtab = i_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE i001(00) WITH 'Error while displaing ALV'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " trigger_alv

Individual cell coloring in ALV

This program demonstrates how to color individual cell in an ALV List. The same logic works for ALV grid also.

The ALV:






The Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
*&---------------------------------------------------------------------*
*& Report ZTEST_SOURAV31
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_sourav31.
TYPE-POOLS: slis.
TYPES: BEGIN OF x_sflight,
sflight TYPE sflight.
TYPES prop TYPE slis_t_specialcol_alv.
TYPES END OF x_sflight.

DATA:
i_sflight TYPE STANDARD TABLE OF sflight,
itab_sflight TYPE STANDARD TABLE OF x_sflight INITIAL SIZE 0,
wa_prop TYPE slis_specialcol_alv,
average TYPE s_seatsocc,
layout TYPE slis_layout_alv,
fieldcat TYPE slis_t_fieldcat_alv.

FIELD-SYMBOLS:
<
wa> TYPE ANY,
<
field> TYPE ANY,
<
wa_sflight> TYPE x_sflight,
<
wa_fcat> TYPE slis_fieldcat_alv.

START-OF-SELECTION.

SELECT *
FROM sflight INTO TABLE i_sflight.

CHECK sy-subrc = 0.

SELECT AVG( seatsocc ) FROM sflight
INTO average.
CHECK sy-subrc = 0.

END-OF-SELECTION.

LOOP AT i_sflight ASSIGNING <wa>.
APPEND INITIAL LINE TO itab_sflight ASSIGNING <wa_sflight>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>.
IF sy-subrc = 0.
IF sy-index = 9.
IF <field> > average.
wa_prop-fieldname = 'SFLIGHT-SEATSOCC'.
wa_prop-color-col = '5'.
wa_prop-color-int = '0'.
wa_prop-color-inv = '0'.
wa_prop-nokeycol = 'X'.
APPEND wa_prop TO <wa_sflight>-prop.
ELSE.
wa_prop-fieldname = 'SFLIGHT-SEATSOCC'.
wa_prop-color-col = '6'.
wa_prop-color-int = '0'.
wa_prop-color-inv = '0'.
wa_prop-nokeycol = 'X'.
APPEND wa_prop TO <wa_sflight>-prop.
ENDIF.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
<
wa_sflight>-sflight = <wa>.
ENDLOOP.

layout-coltab_fieldname = 'PROP'.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = 'ZTEST_SOURAV31'
i_internal_tabname = 'ITAB_SFLIGHT'
i_structure_name = 'SFLIGHT'
i_client_never_display = 'X'
CHANGING
ct_fieldcat = fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

LOOP AT fieldcat ASSIGNING <wa_fcat>.
CONCATENATE 'SFLIGHT-' <wa_fcat>-fieldname INTO <wa_fcat>-fieldname.
IF <wa_fcat>-cfieldname IS NOT INITIAL.
CONCATENATE 'SFLIGHT-' <wa_fcat>-cfieldname INTO <wa_fcat>-cfieldname.
ENDIF.
ENDLOOP.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = 'ZTEST_SOURAV31'
is_layout = layout
it_fieldcat = fieldcat
TABLES
t_outtab = itab_sflight
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.

Display an ALV in a Selection Screen

This program demonstrates how to display an ALV grid in the selection screen itself upon hitting "ENTER" button.

The Selection Screen:



The ALV (Upon hitting enter):



The ALV gets refreshed when new selection screen values are entered:



The code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
*&---------------------------------------------------------------------*
*& Report ZSB_ALV_SAME_SCREEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsb_alv_same_screen.

DATA:
wa_sflight TYPE sflight,
i_sflight TYPE STANDARD TABLE OF sflight INITIAL SIZE 0,
oref_dock TYPE REF TO cl_gui_docking_container,
oref_alv TYPE REF TO cl_gui_alv_grid,
i_exclude TYPE TABLE OF syucomm.


SELECT-OPTIONS:
s_carrid FOR wa_sflight-carrid,
s_connid FOR wa_sflight-connid,
s_fldate FOR wa_sflight-fldate.

AT SELECTION-SCREEN OUTPUT.

APPEND 'ONLI' TO i_exclude.
APPEND 'SJOB' TO i_exclude.
APPEND 'PRIN' TO i_exclude.

CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
p_program = sy-repid
TABLES
p_exclude = i_exclude.


AT SELECTION-SCREEN.
CHECK sy-ucomm = space.
SELECT * FROM sflight INTO TABLE i_sflight
WHERE carrid IN s_carrid
AND connid IN s_connid
AND fldate IN s_fldate.

IF sy-subrc = 0.

IF oref_dock IS NOT BOUND.

CREATE OBJECT oref_dock
EXPORTING
repid = sy-repid
dynnr = '1000'
side =
cl_gui_docking_container=>dock_at_bottom
ratio = 70
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF oref_alv IS NOT BOUND.

CHECK oref_dock IS BOUND.
CREATE OBJECT oref_alv
EXPORTING
i_parent = oref_dock
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CHECK oref_alv IS BOUND.

CALL METHOD oref_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
it_outtab = i_sflight
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.

CALL METHOD oref_alv->refresh_table_display
EXCEPTIONS
finished = 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.

ENDIF.
ENDIF.

Demo program for TOP-OF-PAGE for ALV displayed through CL_GUI_ALV_GRID

This program demonstrates how to create TOP OF PAGE for an ALV grid displayed through CL_GUI_ALV_GRID. One interesting fact which may be considered here is that the splitter TOP-OF-PAGE is not called while printing or background spool and the TOP-OF-PAGE printed in the spool cannot be displayed in the foreground.

The TOP-OF-PAGE displayed in foreground (this TOP-OF-PAGE won't be printed):



Choose the list output:



The list output(this top-of-page will be printed):



The code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
*&---------------------------------------------------------------------*
*& Report Z_SOURAV_ALV_TOP_OF_PAGE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT z_sourav_alv_top_of_page.

*----------------------------------------------------------------------*
* CLASS cl_main DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_main DEFINITION.
PUBLIC SECTION.
METHODS:
constructor,
get_data,
populate_fc_layout,
top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING
e_dyndoc_id
table_index,
print_top_of_page FOR EVENT print_top_of_page OF cl_gui_alv_grid
IMPORTING table_index,
display.


PROTECTED SECTION.

PRIVATE SECTION.
TYPE-POOLS:sdydo.
DATA:i_sbook TYPE STANDARD TABLE OF sbook INITIAL SIZE 0.
DATA:oref_splitter TYPE REF TO cl_gui_splitter_container,
oref_container TYPE REF TO cl_gui_custom_container,
oref_alv TYPE REF TO cl_gui_alv_grid,
container1 TYPE REF TO cl_gui_container,
container2 TYPE REF TO cl_gui_container,
oref_doc TYPE REF TO cl_dd_document,
oref_html TYPE REF TO cl_gui_html_viewer,
wa_layout TYPE lvc_s_layo,
i_fieldcatalog TYPE lvc_t_fcat.

ENDCLASS. "cl_main DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_main IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_main IMPLEMENTATION.
METHOD constructor.

CREATE OBJECT oref_container
EXPORTING
container_name = 'CONTAINER'
repid = 'Z_SOURAV_ALV_TOP_OF_PAGE'
dynnr = '0100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


CREATE OBJECT oref_splitter
EXPORTING
parent = oref_container
rows = 2
columns = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD oref_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = container1.

CALL METHOD oref_splitter->set_row_height
EXPORTING
id = 1
height = 20
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


CALL METHOD oref_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = container2.


CREATE OBJECT oref_doc
EXPORTING
style = 'ALV_GRID'.


CREATE OBJECT oref_alv
EXPORTING
i_parent = container2
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


ENDMETHOD. "constructor
METHOD get_data.
SELECT * FROM sbook INTO TABLE i_sbook UP TO 500 ROWS.
IF sy-subrc <> 0.

ENDIF.

ENDMETHOD. "get_data
METHOD populate_fc_layout.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SBOOK'
i_client_never_display = 'X'
i_internal_tabname = 'I_SBOOK'
CHANGING
ct_fieldcat = i_fieldcatalog
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

wa_layout-cwidth_opt = 'X'.

ENDMETHOD. "populate_fc_layout
METHOD top_of_page.

DATA: text TYPE sdydo_text_element,
background_id TYPE sdydo_key VALUE 'ALV_BACKGROUND'.

text = 'Top of Page'.

CALL METHOD oref_doc->add_text
EXPORTING
text = text
sap_color = cl_dd_document=>list_positive
sap_fontsize = cl_dd_document=>large.

oref_doc->new_line( ).
text = 'Line1'.

CALL METHOD oref_doc->add_text
EXPORTING
text = text.

CREATE OBJECT oref_html
EXPORTING
parent = container1
EXCEPTIONS
cntl_error = 1
cntl_install_error = 2
dp_install_error = 3
dp_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

oref_doc->html_control = oref_html.

CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING
document = oref_doc
bottom = space.

CALL METHOD oref_doc->merge_document.

CALL METHOD oref_doc->set_document_background
EXPORTING
picture_id = background_id.

CALL METHOD oref_doc->display_document
EXPORTING
reuse_control = 'X'
parent = container1
EXCEPTIONS
html_display_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.
ENDMETHOD. "create_top_of_page
METHOD display.

SET HANDLER me->top_of_page FOR oref_alv.
SET HANDLER me->print_top_of_page FOR oref_alv.

CALL METHOD oref_alv->set_table_for_first_display
EXPORTING
is_layout = wa_layout
CHANGING
it_outtab = i_sbook
it_fieldcatalog = i_fieldcatalog
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD oref_doc->initialize_document
.


CALL METHOD oref_alv->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = oref_doc.


CALL SCREEN 0100.
ENDMETHOD. "display
METHOD print_top_of_page.
WRITE:/5 'Print top of page' COLOR 5 INTENSIFIED OFF.
WRITE:/5 'Line1'.
ENDMETHOD. "print_top_of_page
ENDCLASS. "cl_main IMPLEMENTATION

DATA: oref_main TYPE REF TO cl_main.
DATA:ok_code TYPE syucomm.

START-OF-SELECTION.

CREATE OBJECT oref_main.

oref_main->get_data( ).
oref_main->populate_fc_layout( ).

END-OF-SELECTION.

oref_main->display( ).
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
SET SCREEN 00.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT