Нужно использовать метод
CL_GUI_ALV_GRID>->get_filtered_entries
Метод возвращает список отфильтрованных позиций, а если быть точнее, то их индексы.
Далее можно скопировать свою таблицу, и применить фильтры уже к ней.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
DATA lt_data_copy TYPE data_tt WITH HEADER LINE. CLEAR lt_data_copy[]. APPEND LINES OF gt_data[] TO lt_data_copy[]. DATA lt_fe TYPE lvc_t_fidx. lo_grid->get_filtered_entries( IMPORTING et_filtered_entries = lt_fe ). IF lt_fe[] IS NOT INITIAL. DATA ls_fe LIKE LINE OF lt_fe. LOOP AT lt_fe INTO ls_fe. FIELD-SYMBOLS <ls_line_filter> LIKE LINE OF lt_data_copy. READ TABLE lt_data_copy INDEX ls_fe ASSIGNING <ls_line_filter>. IF sy-subrc = 0. <ls_line_filter>-filtered = 'X'. "Позиция была отфильтрована ENDIF. ENDLOOP. DELETE lt_data_copy[] WHERE filtered = 'X'. ENDIF. |
После выполнения алгоритма в таблице lt_data_copy будут актуальные для ALV Данные.