-
[ABAP] #24 Report Program - ALV (3)SAP/ABAP 2026. 1. 10. 22:32
주요 CHANGING 옵션
CALL METHOD go_alv->set_table_for_first_display EXPORTING ... CHANGING it_outtab = gt_data * it_fieldcatalog = * it_sort = * it_filter = EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 others = 4.1. 출력 데이터의 정렬(it_sort)
- it_sort 는 ALV 최초 출력 시 데이터 정렬 기준을 설정하는 옵션
- 여러 필드를 우선순위(spos) 로 정렬 가능
- 오름차순 / 내림차순 지정 가능
주요 필드 (lvc_s_sort)
필드명 설명 fieldname 정렬 기준 필드명 spos 정렬 우선순위 (1부터 시작) up 오름차순 정렬 down 내림차순 정렬 subtotal 소계 표시 group 그룹화 기준 DATA: gt_sorter TYPE lvc_t_sort, gs_sorter TYPE lvc_s_sort.*&---------------------------------------------------------------------* *& Form set_sorter *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM set_sorter . IF gt_sorter IS INITIAL. CLEAR gs_sorter. gs_sorter-fieldname = 'ORDER_DATE'. " 정렬 기준 필드 " gs_sorter-spos = 1. " 정렬 순서 " gs_sorter-up = 'X'. " 오름차순 (기본) " APPEND gs_sorter TO gt_sorter. "itab 맨마지막에 추가 " CLEAR gs_sorter. gs_sorter-fieldname = 'LOCCURAM'. gs_sorter-spos = 2. gs_sorter-down = 'X'. " 내림차순 " APPEND gs_sorter TO gt_sorter. ENDIF. ENDFORM.PERFORM set_sorter. CALL METHOD go_alv->set_table_for_first_display EXPORTING i_structure_name = 'SBOOK' CHANGING it_outtab = gt_data it_sort = gt_sorter EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4.
2. 출력 데이터의 필터링(it_filter)
- it_filter 는 ALV 출력 데이터에 대해 조건 필터링 적용
- Selection Screen의 SELECT-OPTIONS 값을 그대로 매핑 가능
- 화면 출력 후에도 동적으로 필터 변경 가능
주요 필드 (lvc_s_filt)
필드명 설명 fieldname 필터 적용 필드 sign 포함(I) / 제외(E) option EQ, BT, CP 등 low 조건 시작값 high 조건 종료값 DATA: gt_filter TYPE lvc_t_filt, gs_filter TYPE lvc_s_filt.FORM set_filter . CLEAR: gt_filter, gs_filter. IF so_car_f IS NOT INITIAL. LOOP AT so_car_f. CLEAR gs_filter. gs_filter-fieldname = 'CARRID'. gs_filter-sign = so_car_f-sign. gs_filter-option = so_car_f-option. gs_filter-low = so_car_f-low. gs_filter-high = so_car_f-high. APPEND gs_filter TO gt_filter. ENDLOOP. ENDIF. IF so_con_f IS NOT INITIAL. LOOP AT so_con_f. CLEAR gs_filter. gs_filter-fieldname = 'CONNID'. gs_filter-sign = so_con_f-sign. gs_filter-option = so_con_f-option. gs_filter-low = so_con_f-low. gs_filter-high = so_con_f-high. APPEND gs_filter TO gt_filter. ENDLOOP. ENDIF. " 만약 sorter도 화면 출력 이후에 변경하고자 한다면, " " => set_sorter_criteria 사용 " CALL METHOD go_alv->set_filter_criteria EXPORTING it_filter = gt_filter EXCEPTIONS no_fieldcatalog_available = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE 'Filter 적용 중 에러 발생' TYPE 'E'. ENDIF. ENDFORM.MODULE user_command_0100 INPUT. CASE ok_code. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN 'SEARCH'. PERFORM set_filter. ENDCASE. ENDMODULE.필터 조건은 set_table_for_first_display의 it_filter로도 설정할 수 있지만, 이는 ALV 최초 출력 시에만 적용된다.
이미 출력된 ALV 데이터에 대해 필터 조건을 변경하려면 set_filter_criteria 메서드를 사용해야 한다.
이 경우 DB 재조회 없이, 현재 화면에 출력된 ALV 내부 데이터만 필터링하여 표시한다.
따라서
- 최초 출력 시 : set_table_for_first_display의 it_sort, it_filter
- 출력 후 변경 시 : set_sort_criteria, set_filter_criteria → 이 방식은 DB 재조회를 하지 않고 화면 데이터만 변경한다.
※ 주의 사항
refresh_table_display를 구현했다면 i_soft_refresh 값이 space 여야한다.
그렇지 않으면 정렬과 필터에 대한 기능이 바뀌지 않는다.
CALL METHOD go_alv->refresh_table_display EXPORTING is_stable = gs_stable i_soft_refresh = '' " X: 정렬, 필터, 그외 기능들 유지 " " _: 전체 리프레쉬(기본) " EXCEPTIONS finished = 1 OTHERS = 2.
3. 출력 그리드 설정 (it_fieldcatalog)
it_fieldcatalog는 ALV 그리드의 컬럼 속성 정의 테이블이다.
- 컬럼별로 표시 방식, 순서, 숨김 여부, 합계, 아이콘, 색상 등을 설정
- 필드마다 설정이 다르므로 인터널 테이블(lvc_t_fcat)로 관리
- DDIC 구조를 그대로 쓰는 것보다 출력 제어가 훨씬 자유로움
DATA: gt_fcat TYPE lvc_t_fcat, gs_fcat TYPE lvc_s_fcat. " 기존 테이블 필드 + 화면 전용 필드(아이콘, 하이퍼링크, 가공 컬럼)를 함께 사용 " DATA: BEGIN OF gs_data. INCLUDE TYPE sbook. DATA: cancelled_icon TYPE icon-id, phone TYPE scustom-telephone, END OF gs_data.FORM set_fieldcat . CLEAR gs_fcat. gs_fcat-fieldname = 'CANCELLED_ICON'. gs_fcat-icon = 'X'. " 아이콘 필드로 출력 " gs_fcat-coltext = 'Cancelled'. "컬럼 헤더 " APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'CANCELLED'. gs_fcat-no_out = 'X'. " 컬럼 숨김 " APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'PASSFORM'. gs_fcat-no_out = 'X'. APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'PASSBIRTH'. gs_fcat-no_out = 'X'. APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'PHONE'. gs_fcat-ref_field = 'TELEPHONE'. " 참조필드 " gs_fcat-ref_table = 'SCUSTOM'. " 참조테이블 " gs_fcat-col_pos = 4. " 컬럼 출력 순서 " gs_fcat-hotspot = 'X'. " 하이퍼링크 " APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'SMOKER'. gs_fcat-checkbox = 'X'. " 체크박스로 출력 " APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'INVOICE'. gs_fcat-checkbox = 'X'. APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'CLASS'. gs_fcat-emphasize = 'C510'. " 컬럼 색상 지정 " APPEND gs_fcat TO gt_fcat. CLEAR gs_fcat. gs_fcat-fieldname = 'LOCCURAM'. gs_fcat-do_sum = 'X'. " 합계 적용 " APPEND gs_fcat TO gt_fcat. ENDFORM.CALL METHOD go_alv->set_table_for_first_display EXPORTING i_structure_name = 'SBOOK' is_layout = gs_layout CHANGING it_outtab = gt_data it_fieldcatalog = gt_fcat EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4.※ i_structure_name는 기본 구조 제공, it_fieldcatalog가 해당 구조를 오버라이드함
자주 쓰이는 LVC_T_FCAT 타입의 핵심 속성
1. 컬럼의 정체성을 정의하는 속성
속성 의미 FIELDNAME 인터널 테이블의 필드명 (대문자 필수) COLTEXT 화면에 표시될 컬럼의 제목 (Label) SCRTEXT_L / _M / _S 길이에 따른 텍스트(Long, Medium, Short). COLTEXT만 써도 보통 해결 KEY 'X'로 설정하면 키 필드로 인식되어 색상이 다르게 표시되고 스크롤 시 고정 NO_OUT 'X'로 설정하면 필드 카탈로그에는 있지만 화면에는 보이지 않음 REF_TABLE 원본 DB 테이블 지정 REF_FIELD 원본 DB 필드 지정, REF_TABLE와 함께 사용 ※ REF_TABLE & REF_FIELD
- 해당 필드가 원본 DB의 필드와 같은 데이터 성격을 가지게 한다.
- F4 도움말 자동화 & 도메인 텍스트, 데이터 속성 자동 상속, 다국어 지원, Unit/Currency 연결 등 원본 데이터를 따라간다.
2. 레이아웃 및 디자인 관련 속성
속성 의미 COL_POS 컬럼이 나타날 순서 (정수 값 입력) OUTPUTLEN 컬럼의 출력 길이 (정수 값 입력) JUST 정렬 ( 'R': 우측, 'L': 좌측, 'C': 중앙 ) EMPHASIZE 컬럼 색상 (예: 'C310' - 노란색 계열) HOTSPOT 'X'로 설정하면 데이터에 밑줄이 생기며 클릭 가능한 상태 -> 하이퍼링크 ICON 'X'로 설정하면 해당 필드의 값 텍스트 대신 아이콘 출력 3. 데이터 편집 및 제어 속성
속성 의미 EDIT 'X'로 설정하면 해당 셀을 직접 수정할 수 있게 바뀜 CHECKBOX 'X'로 설정하면 데이터를 체크박스 형태로 출력 F4AVAILABL 'X'로 설정하면 입력 도움말(F4) 버튼이 나타남 4. 수치 계산 관련 속성
속성 의미 DO_SUM 'X'로 설정하면 해당 컬럼의 합계(Total)를 자동으로 계산하여 하단에 보여줌 CURRENCY / CFIELDNAME 통화 단위(KRW, USD 등)를 지정하거나 통화 단위가 담긴 필드명을 참조 QUANTITY / QFIELDNAME 수량 단위(EA, KG 등)를 지정하거나 단위 필드명을 참조 'SAP > ABAP' 카테고리의 다른 글
[ABAP] #26 ALV Container (1) 2026.01.10 [ABAP] #25 ALV의 Event Class (0) 2026.01.10 [ABAP] #23 Report Program - ALV (2) (1) 2026.01.05 [ABAP] #22 Report Program - ALV (1) (0) 2026.01.04 [ABAP] #21 Report Program (1) (0) 2025.12.31