DATA: o_cnt TYPE REF TO cl_gui_docking_container.
DATA: o_alv TYPE REF TO if_salv_gui_table_ida.
DATA: o_collector TYPE REF TO cl_salv_range_tab_collector.
DATA: it_t100 TYPE t100.
SELECT-OPTIONS: s_langu FOR sy-langu.
SELECT-OPTIONS: s_arbgb FOR it_t100-arbgb.
SELECT-OPTIONS: s_msg FOR it_t100-msgnr.
SELECT-OPTIONS: s_text FOR it_t100-text.
AT SELECTION-SCREEN OUTPUT.
* Verhindern, dass der Container mehrfach erzeugt wird, wenn der Focus aus
* best. Oberflächenelementen zurück kommt.
IF NOT o_cnt IS BOUND.
* Container erzeugen
o_cnt = NEW #( repid = sy-repid
dynnr = sy-dynnr
side = cl_gui_docking_container=>dock_at_bottom " unterer Bildschirmrand
extension = 400 ). " max. 400 hoch, damit die Selektionskriterien nicht überdeckt werden
* IDA-Grid erzeugen
o_alv = cl_salv_gui_table_ida=>create( iv_table_name = 'T100'
io_gui_container = o_cnt ).
o_collector = NEW #( ).
* Suchkriterien setzen
o_collector->add_ranges_for_name( iv_name = 'SPRSL' it_ranges = s_langu[] ).
o_collector->add_ranges_for_name( iv_name = 'ARBGB' it_ranges = s_arbgb[] ).
o_collector->add_ranges_for_name( iv_name = 'MSGNR' it_ranges = s_msg[] ).
o_collector->add_ranges_for_name( iv_name = 'TEXT' it_ranges = s_text[] ).
o_collector->get_collected_ranges( IMPORTING et_named_ranges = DATA(it_name_range_pairs) ).
* IDA-Grid Optionen setzen
o_alv->set_select_options( it_ranges = it_name_range_pairs ).
o_alv->display_options( )->enable_alternating_row_pattern( ).
ENDIF.