[SALV] 2탄: 표준 기능 확장 (Toolbar, Selection, Sort/Filter)

2026. 3. 27.
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 등)의 필드에만 적용 가능합니다.
    • 정렬 우선순위: 소계를 보고 싶다면 해당 그룹 필드에 정렬이 반드시 먼저 적용되어야 합니다.