Обработка нажатия кнопки
CASE okcode.
WHEN '&MY_ILT'.
PERFORM my_filter.
Переменные в главной программе
DATA: g_custom_container TYPE REF TO cl_gui_custom_container,
g_alv_grid_ref TYPE REF TO cl_gui_alv_grid,
gt_sflight TYPE sflight OCCURS 0.
FIELD-SYMBOLS: <my_fs> TYPE ANY TABLE.
DATA:
go_struct TYPE REF TO cl_abap_structdescr,
go_table TYPE REF TO cl_abap_tabledescr,
gt_comp TYPE abap_compdescr_tab,
wa_gt_comp like LINE OF gt_comp,
gs_comp_a LIKE LINE OF gt_comp,
gdo_data type ref to data,
gr TYPE REF TO data,
grf4 TYPE REF TO data.
FIELD-SYMBOLS: <my_table> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <fld_f4table> TYPE STANDARD TABLE.
data: dyn_table type ref to data,
* dyn_line type ref to data,
wa_fcat type lvc_s_fcat,
it_fcat type lvc_t_fcat,
d_table type ref to data.
Сама процедура
FORM my_filter.
DATA: ls_row_id TYPE lvc_s_row.
DATA: ls_col type i.
DATA: ls_col_id TYPE lvc_s_col.
DATA: l_value TYPE lvc_s_data-value.
* DATA: ls_selfield TYPE lvc_s_self.
* DATA: ls_fieldcat TYPE slis_fieldcat_alv.
* DATA: ls_fieldcat_lvc TYPE lvc_s_fcat.
DATA: lt_fcat_lvc TYPE lvc_t_fcat,
* lt_sort_lvc TYPE lvc_t_sort,
* ls_lyout_lvc TYPE lvc_s_layo,
lt_filter_lvc TYPE lvc_t_filt,
wa_lt_filter_lvc LIKE LINE OF lt_filter_lvc.
DATA:
i_retab TYPE TABLE OF ddshretval,
wa_retab LIKE LINE OF i_retab OCCURS 0 WITH HEADER LINE,
r_field TYPE dfies-fieldname,
r_dynprofield TYPE help_info-dynprofld.
FIELD-SYMBOLS:
<ls_wa> TYPE ANY,
<my_wa> TYPE ANY.
FIELD-SYMBOLS:
<fs1> TYPE ANY,
<fs2> TYPE ANY.
**********************************************************************
CALL METHOD gt_grid-grid->get_current_cell
IMPORTING
es_row_id = ls_row_id
e_col = ls_col
es_col_id = ls_col_id
e_value = l_value.
CALL METHOD gt_grid-grid->get_filter_criteria
IMPORTING
et_filter = lt_filter_lvc.
*** создаем ссылку на динамическую.таблицу
IF <my_fs> IS NOT ASSIGNED.
ASSIGN ('T_OUTTAB[]') TO <my_fs>.
ENDIF.
*** создаем копию динамическ.таблицы с полными данными
IF <my_table> IS NOT ASSIGNED.
GET REFERENCE OF <my_fs> INTO gdo_data.
go_table ?= cl_abap_structdescr=>describe_by_data_ref( gdo_data ).
go_struct ?= go_table->get_table_line_type( ).
gt_comp = go_struct->components.
CREATE DATA gr TYPE HANDLE go_table. " создаем обект-данных полученного типа
ASSIGN gr->* TO <my_table>. "создаем таблицу
<my_table>[] = <my_fs>[].
ENDIF.
**********************************************************************
r_field = ls_col_id.
r_dynprofield = ls_col_id.
clear it_fcat.
refresh it_fcat.
* IF <fld_f4table> IS NOT ASSIGNED.
READ TABLE gt_comp INTO wa_gt_comp WITH KEY name = ls_col_id.
wa_fcat-fieldname = wa_gt_comp-name .
wa_fcat-datatype = wa_gt_comp-type_kind.
wa_fcat-inttype = wa_gt_comp-type_kind.
wa_fcat-intlen = wa_gt_comp-length.
wa_fcat-decimals = wa_gt_comp-decimals.
APPEND wa_fcat TO it_fcat.
* Create dynamic internal table and assign to Field-Symbol
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = d_table.
ASSIGN d_table->* TO <fld_f4table>.
* else.
* UNASSIGN <fld_f4table>.
*
* READ TABLE gt_comp INTO wa_gt_comp WITH KEY name = ls_col_id.
*
* wa_fcat-fieldname = wa_gt_comp-name .
* wa_fcat-datatype = wa_gt_comp-type_kind.
* wa_fcat-inttype = wa_gt_comp-type_kind.
* wa_fcat-intlen = wa_gt_comp-length.
* wa_fcat-decimals = wa_gt_comp-decimals.
*
* APPEND wa_fcat TO it_fcat.
*
** Create dynamic internal table and assign to Field-Symbol
* CALL METHOD cl_alv_table_create=>create_dynamic_table
* EXPORTING
* it_fieldcatalog = it_fcat
* IMPORTING
* ep_table = d_table.
*
* ASSIGN d_table->* TO <fld_f4table>.
* ENDIF.
REFRESH <fld_f4table>.
ASSIGN COMPONENT r_field OF STRUCTURE <fld_f4table> TO <fs2>.
LOOP AT <my_table> ASSIGNING <ls_wa>.
ASSIGN COMPONENT r_field OF STRUCTURE <ls_wa> TO <fs1>.
APPEND <fs1> TO <fld_f4table>.
ENDLOOP.
**********************************************************************
DATA h_field_tab LIKE dfies OCCURS 0 WITH HEADER LINE.
DATA h_field_wa LIKE dfies.
DATA wa_it_fieldcat LIKE LINE OF it_fieldcat OCCURS 0 WITH HEADER LINE.
READ TABLE it_fieldcat INTO wa_it_fieldcat WITH KEY fieldname = wa_gt_comp-name.
h_field_wa-tabname = 'LT_VALUES'.
CONCATENATE '1~' wa_gt_comp-name INTO h_field_wa-fieldname.
r_field = h_field_wa-fieldname.
h_field_wa-intlen = wa_gt_comp-length. "'000008'.
h_field_wa-outputlen = wa_gt_comp-length. "'000008'.
h_field_wa-inttype = wa_gt_comp-type_kind."'N'.
h_field_wa-LOWERCASE = 'X'.
IF wa_it_fieldcat-seltext_l IS NOT INITIAL.
h_field_wa-reptext = wa_it_fieldcat-seltext_l.
ELSEIF wa_it_fieldcat-seltext_m IS NOT INITIAL.
h_field_wa-reptext = wa_it_fieldcat-seltext_m.
ELSE.
h_field_wa-reptext = wa_it_fieldcat-seltext_s.
ENDIF.
APPEND h_field_wa TO h_field_tab.
**********************************************************************
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = r_field "<---Return field column name
* dynpprog = sy-repid
* dynpnr = sy-dynnr
dynprofield = 'RSCSEL-SLOW_I' "r_dynprofield
value_org = 'S'
multiple_choice = 'X'
TABLES
value_tab = <fld_f4table>
field_tab = h_field_tab
return_tab = i_retab.
IF sy-subrc EQ 0.
ENDIF.
LOOP AT i_retab INTO wa_retab.
wa_lt_filter_lvc-fieldname = wa_gt_comp-name.
wa_lt_filter_lvc-tabname = '1'.
wa_lt_filter_lvc-seltext = h_field_wa-reptext.
wa_lt_filter_lvc-lowercase = 'X'.
wa_lt_filter_lvc-inttype = wa_gt_comp-type_kind.
wa_lt_filter_lvc-no_sign = 'X'.
wa_lt_filter_lvc-order = ls_col.
wa_lt_filter_lvc-REF_FIELD = wa_gt_comp-name.
wa_lt_filter_lvc-low = wa_retab-fieldval.
wa_lt_filter_lvc-sign = 'I'.
wa_lt_filter_lvc-option = 'EQ'.
APPEND wa_lt_filter_lvc TO lt_filter_lvc.
CLEAR wa_lt_filter_lvc.
ENDLOOP.
CALL METHOD gt_grid-grid->set_filter_criteria
EXPORTING
it_filter = lt_filter_lvc.
CALL METHOD gt_grid-grid->REFRESH_TABLE_DISPLAY.
ENDFORM. "my_filter
CASE okcode.
WHEN '&MY_ILT'.
PERFORM my_filter.
Переменные в главной программе
DATA: g_custom_container TYPE REF TO cl_gui_custom_container,
g_alv_grid_ref TYPE REF TO cl_gui_alv_grid,
gt_sflight TYPE sflight OCCURS 0.
FIELD-SYMBOLS: <my_fs> TYPE ANY TABLE.
DATA:
go_struct TYPE REF TO cl_abap_structdescr,
go_table TYPE REF TO cl_abap_tabledescr,
gt_comp TYPE abap_compdescr_tab,
wa_gt_comp like LINE OF gt_comp,
gs_comp_a LIKE LINE OF gt_comp,
gdo_data type ref to data,
gr TYPE REF TO data,
grf4 TYPE REF TO data.
FIELD-SYMBOLS: <my_table> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <fld_f4table> TYPE STANDARD TABLE.
data: dyn_table type ref to data,
* dyn_line type ref to data,
wa_fcat type lvc_s_fcat,
it_fcat type lvc_t_fcat,
d_table type ref to data.
Сама процедура
FORM my_filter.
DATA: ls_row_id TYPE lvc_s_row.
DATA: ls_col type i.
DATA: ls_col_id TYPE lvc_s_col.
DATA: l_value TYPE lvc_s_data-value.
* DATA: ls_selfield TYPE lvc_s_self.
* DATA: ls_fieldcat TYPE slis_fieldcat_alv.
* DATA: ls_fieldcat_lvc TYPE lvc_s_fcat.
DATA: lt_fcat_lvc TYPE lvc_t_fcat,
* lt_sort_lvc TYPE lvc_t_sort,
* ls_lyout_lvc TYPE lvc_s_layo,
lt_filter_lvc TYPE lvc_t_filt,
wa_lt_filter_lvc LIKE LINE OF lt_filter_lvc.
DATA:
i_retab TYPE TABLE OF ddshretval,
wa_retab LIKE LINE OF i_retab OCCURS 0 WITH HEADER LINE,
r_field TYPE dfies-fieldname,
r_dynprofield TYPE help_info-dynprofld.
FIELD-SYMBOLS:
<ls_wa> TYPE ANY,
<my_wa> TYPE ANY.
FIELD-SYMBOLS:
<fs1> TYPE ANY,
<fs2> TYPE ANY.
**********************************************************************
CALL METHOD gt_grid-grid->get_current_cell
IMPORTING
es_row_id = ls_row_id
e_col = ls_col
es_col_id = ls_col_id
e_value = l_value.
CALL METHOD gt_grid-grid->get_filter_criteria
IMPORTING
et_filter = lt_filter_lvc.
*** создаем ссылку на динамическую.таблицу
IF <my_fs> IS NOT ASSIGNED.
ASSIGN ('T_OUTTAB[]') TO <my_fs>.
ENDIF.
*** создаем копию динамическ.таблицы с полными данными
IF <my_table> IS NOT ASSIGNED.
GET REFERENCE OF <my_fs> INTO gdo_data.
go_table ?= cl_abap_structdescr=>describe_by_data_ref( gdo_data ).
go_struct ?= go_table->get_table_line_type( ).
gt_comp = go_struct->components.
CREATE DATA gr TYPE HANDLE go_table. " создаем обект-данных полученного типа
ASSIGN gr->* TO <my_table>. "создаем таблицу
<my_table>[] = <my_fs>[].
ENDIF.
**********************************************************************
r_field = ls_col_id.
r_dynprofield = ls_col_id.
clear it_fcat.
refresh it_fcat.
* IF <fld_f4table> IS NOT ASSIGNED.
READ TABLE gt_comp INTO wa_gt_comp WITH KEY name = ls_col_id.
wa_fcat-fieldname = wa_gt_comp-name .
wa_fcat-datatype = wa_gt_comp-type_kind.
wa_fcat-inttype = wa_gt_comp-type_kind.
wa_fcat-intlen = wa_gt_comp-length.
wa_fcat-decimals = wa_gt_comp-decimals.
APPEND wa_fcat TO it_fcat.
* Create dynamic internal table and assign to Field-Symbol
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = d_table.
ASSIGN d_table->* TO <fld_f4table>.
* else.
* UNASSIGN <fld_f4table>.
*
* READ TABLE gt_comp INTO wa_gt_comp WITH KEY name = ls_col_id.
*
* wa_fcat-fieldname = wa_gt_comp-name .
* wa_fcat-datatype = wa_gt_comp-type_kind.
* wa_fcat-inttype = wa_gt_comp-type_kind.
* wa_fcat-intlen = wa_gt_comp-length.
* wa_fcat-decimals = wa_gt_comp-decimals.
*
* APPEND wa_fcat TO it_fcat.
*
** Create dynamic internal table and assign to Field-Symbol
* CALL METHOD cl_alv_table_create=>create_dynamic_table
* EXPORTING
* it_fieldcatalog = it_fcat
* IMPORTING
* ep_table = d_table.
*
* ASSIGN d_table->* TO <fld_f4table>.
* ENDIF.
REFRESH <fld_f4table>.
ASSIGN COMPONENT r_field OF STRUCTURE <fld_f4table> TO <fs2>.
LOOP AT <my_table> ASSIGNING <ls_wa>.
ASSIGN COMPONENT r_field OF STRUCTURE <ls_wa> TO <fs1>.
APPEND <fs1> TO <fld_f4table>.
ENDLOOP.
**********************************************************************
DATA h_field_tab LIKE dfies OCCURS 0 WITH HEADER LINE.
DATA h_field_wa LIKE dfies.
DATA wa_it_fieldcat LIKE LINE OF it_fieldcat OCCURS 0 WITH HEADER LINE.
READ TABLE it_fieldcat INTO wa_it_fieldcat WITH KEY fieldname = wa_gt_comp-name.
h_field_wa-tabname = 'LT_VALUES'.
CONCATENATE '1~' wa_gt_comp-name INTO h_field_wa-fieldname.
r_field = h_field_wa-fieldname.
h_field_wa-intlen = wa_gt_comp-length. "'000008'.
h_field_wa-outputlen = wa_gt_comp-length. "'000008'.
h_field_wa-inttype = wa_gt_comp-type_kind."'N'.
h_field_wa-LOWERCASE = 'X'.
IF wa_it_fieldcat-seltext_l IS NOT INITIAL.
h_field_wa-reptext = wa_it_fieldcat-seltext_l.
ELSEIF wa_it_fieldcat-seltext_m IS NOT INITIAL.
h_field_wa-reptext = wa_it_fieldcat-seltext_m.
ELSE.
h_field_wa-reptext = wa_it_fieldcat-seltext_s.
ENDIF.
APPEND h_field_wa TO h_field_tab.
**********************************************************************
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = r_field "<---Return field column name
* dynpprog = sy-repid
* dynpnr = sy-dynnr
dynprofield = 'RSCSEL-SLOW_I' "r_dynprofield
value_org = 'S'
multiple_choice = 'X'
TABLES
value_tab = <fld_f4table>
field_tab = h_field_tab
return_tab = i_retab.
IF sy-subrc EQ 0.
ENDIF.
LOOP AT i_retab INTO wa_retab.
wa_lt_filter_lvc-fieldname = wa_gt_comp-name.
wa_lt_filter_lvc-tabname = '1'.
wa_lt_filter_lvc-seltext = h_field_wa-reptext.
wa_lt_filter_lvc-lowercase = 'X'.
wa_lt_filter_lvc-inttype = wa_gt_comp-type_kind.
wa_lt_filter_lvc-no_sign = 'X'.
wa_lt_filter_lvc-order = ls_col.
wa_lt_filter_lvc-REF_FIELD = wa_gt_comp-name.
wa_lt_filter_lvc-low = wa_retab-fieldval.
wa_lt_filter_lvc-sign = 'I'.
wa_lt_filter_lvc-option = 'EQ'.
APPEND wa_lt_filter_lvc TO lt_filter_lvc.
CLEAR wa_lt_filter_lvc.
ENDLOOP.
CALL METHOD gt_grid-grid->set_filter_criteria
EXPORTING
it_filter = lt_filter_lvc.
CALL METHOD gt_grid-grid->REFRESH_TABLE_DISPLAY.
ENDFORM. "my_filter