2017-09-19 13 views
3

해당 ALV에 사용 된 필터가있을 때 표시되는 ALV 데이터를 쉽게 검색 할 수 있습니까?ABAP에서 ALV에서 필터링 된 데이터 검색

사용 된 ALV는 CL_GUI_ALV_GRID의 객체입니다. 사용자에게 표시 할 때 기본적으로 필터가 배치됩니다. 또한 사용자는 ALV의 데이터를 처리하는 버튼을 가지고 있습니다. 사용자가 ALV에 자신의 필터를 배치하더라도 프로세스가 표시된 데이터에서만 작동하는지 어떻게 확인할 수 있습니까?

예 : 10 개의 행이있는 itab에서 ALV가 만들어 지지만 ALV에 전달 된 필터가 있기 때문에 8 개의 행만 표시됩니다. 버튼을 누를 때, 나는 현재 사용자에게 보여주고있는 8 개의 열만으로 작업하기를 원합니다.

이 목적을 위해 함수 모듈을 찾으려고했지만 ALV에서 선택된 행으로 작동하는 FM 만 찾을 수 있습니다.

** EDIT : ** get_filtered_entries라는 메소드가 있지만 표시되지 않은 항목 만 검색합니다. 이것을 사용하면 번역 된 내용을 표시하는 데 많은 시간이 걸릴 수 있습니다. get_filtered_entries

미리 감사드립니다.

답변

4

GET_FILTERED_ENTRIES은 제외 된 행 인덱스의 테이블을 반환합니다. 당신은 당신의 처리 과정에서 그것들을 건너 뛰기 만하면됩니다.


편집

" Copy original table DATA(lit_buffer) = it_out[]. " Get excluded rows o_grid->get_filtered_entries( IMPORTING et_filtered_entries = DATA(lit_index) ). " Reverse order to keep correct indizes; thnx futu SORT lit_index DESCENDING. " Remove excluded rows from buffer LOOP AT lit_index ASSIGNING FIELD-SYMBOL(<index>). DELETE lit_buffer INDEX <index>. ENDLOOP. 

:
나는 cl_gui_alv_grid 조금 디버깅하고 원래 테이블의 필터링 된 버전이 모두 존재하는 것처럼하지 보인다 않습니다. 라인은 필터링, 정렬, 그룹화되어 즉시 셀 테이블로 전송됩니다. 성능 단점없이 표시된 행을 얻는 것이 거의 불가능한 것처럼 보입니다.

+0

가장 효율적인 방법은 무엇이라고 생각하십니까? itab에 표시되지 않은 항목을 모두로드하고, 소스 itab을 복사하고, 복사를 반복하고, 표시되지 않은 itab에있는 항목을 삭제하십시오. 다른 함수에 전달할 수있는 표시된 항목의 테이블이 필요합니다. – Erik

+0

@Erik 원본 테이블을 복사하고 수정하는 것이 유일한 옵션 인 것 같습니다. 내 대답에 몇 가지 코드를 추가했습니다. 또한 인덱스 테이블을 삭제하는 또 다른 방법을 알지 못합니다. –

+0

@Erik'APPEND' ('LINES OF ... FROM ... TO ... ')에 몇 가지 흥미로운 옵션이 있습니다. 나중에 이것을 테스트 할 것입니다. –