SAP ABAP SALV 시리즈 2탄. 표준 툴바 활성화는 물론, 실무 필수 기능인 행 선택 모드(Selection), 데이터 정렬/필터 및 합계(Aggregation) 설정법을 정리합니다.
CONTENTS: SALV 2탄 - 표준 기능 확장
1. 실무 적용 코드 예시 (Standard Functions Pack)
기본 SALV에 툴바, 행 선택, 자동 합계 기능을 한 번에 적용한 코드입니다.
" 1. 데이터 준비 (Inline Declaration)
SELECT * FROM sflight INTO TABLE @DATA(lt_flight) UP TO 50 ROWS.
TRY.
" 2. SALV 생성
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(lo_alv)
CHANGING t_table = lt_flight
).
" --- [기능 1] 표준 툴바 활성화 ---
lo_alv->get_functions( )->set_all( abap_true ).
" --- [기능 2] 행 선택 모드 설정 (체크박스/라인선택) ---
DATA(lo_selections) = lo_alv->get_selections( ).
lo_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
" --- [기능 3] 합계(Aggregation) 설정 ---
DATA(lo_aggr) = lo_alv->get_aggregations( ).
lo_aggr->add_aggregation( columnname = 'PRICE' ). " PRICE 컬럼 합계 추가
" --- [기능 4] 정렬 및 소계(Subtotal) 설정 ---
DATA(lo_sorts) = lo_alv->get_sorts( ).
lo_sorts->add_sort(
columnname = 'CARRID'
subtotal = abap_true " 항공사별 소계(PRICE 합계가 여기 반영됨)
).
" 3. 화면 출력
lo_alv->display( ).
CATCH cx_salv_msg INTO DATA(lx_msg).
MESSAGE lx_msg->get_text( ) TYPE 'E'.
ENDTRY.
2. 기술 상세 설명
행 선택 모드 (Selection Mode)
SALV는 기본적으로 행을 선택할 수 없는 상태로 생성됩니다. get_selections( )를 통해 가져온 객체에서 set_selection_mode를 설정해야만 사용자가 라인을 선택하거나 좌측 버튼을 클릭할 수 있습니다. (주요 값: row_column, multiple 등)
합계 및 소계 (Aggregation & Subtotal)
단순히 툴바에서 합계 버튼을 누르는 것이 아니라, 프로그램 실행 시 자동으로 특정 컬럼(금액, 수량 등)의 합계를 구하려면 add_aggregation이 필요합니다. 이때 정렬(Sort) 객체에서 subtotal = abap_true를 함께 설정하면 그룹별 중간 합계가 자동으로 생성됩니다.
3. 주의사항
- Selection Mode의 제약: 다중 선택(Multiple) 모드를 활성화하더라도, SALV는 조회용이므로 선택된 행을 가져오는 로직은 별도의 이벤트 처리가 필요합니다.
- 합계 대상 필드: 합계(Aggregation)는 반드시 숫자형 타입(P, I, F 등)의 필드에만 적용 가능합니다.
- 정렬 우선순위: 소계를 보고 싶다면 해당 그룹 필드에 정렬이 반드시 먼저 적용되어야 합니다.
'ABAP > SALV' 카테고리의 다른 글
| [SALV] 6탄: 데이터 시각화의 정점, 컬럼 및 행 색상 변경 (Color) (0) | 2026.04.08 |
|---|---|
| [SALV] 5탄: 이벤트 핸들링 (Double Click & Hotspot) (0) | 2026.04.07 |
| [SALV] 4탄: 레이아웃 및 디스플레이 설정 (Variant, Title, Stripe) (0) | 2026.04.06 |
| [SALV] 3탄: 컬럼 속성 제어 (Text, Alignment, Technical) (0) | 2026.03.27 |
| [SALV] 1탄: 기본 생성 (0) | 2026.03.26 |