[SALV] 3탄: 컬럼 속성 제어 (Text, Alignment, Technical)

2026. 3. 27.
SAP ABAP SALV 시리즈 3탄. 컬럼명 변경, 데이터 중앙 정렬, 그리고 레이아웃에서 아예 숨겨버리는 기술적 필드(Technical Field) 설정법을 가장 쉬운 코드로 설명합니다.
 

CONTENTS: SALV 3탄 - 컬럼 속성 제어 기초

 

    1. 실무 적용 코드 예시 (Column Control)

    가장 직관적인 코드로 컬럼의 이름, 정렬, 숨김 상태를 제어하는 방법입니다.

    
    " 1. 데이터 조회
    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
        ).
    
        " 3. 전체 컬럼 관리 객체 가져오기
        DATA(lo_columns) = lo_alv->get_columns( ).
        lo_columns->set_optimize( abap_true ). " 너비 자동 최적화
    
        " 4. 특정 컬럼 제어 (TRY-CATCH로 안전하게 처리)
        TRY.
            " [기능] 컬럼 숨기기 (Technical Field: 레이아웃 리스트에서도 삭제)
            lo_columns->get_column( 'MANDT' )->set_technical( abap_true ).
    
            " [기능] 컬럼명 및 툴팁 변경
            DATA(lo_col) = lo_columns->get_column( 'PRICE' ).
            lo_col->set_long_text( '항공운임(최종)' ).
            lo_col->set_tooltip( '세금이 포함된 가격입니다' ).
    
            " [기능] 데이터 중앙 정렬
            " * 정렬 기능을 쓰기 위해 전용 클래스로 형변환(Casting)이 필요합니다.
            DATA(lo_col_tab) = CAST cl_salv_column_table( lo_columns->get_column( 'CARRID' ) ).
            lo_col_tab->set_alignment( if_salv_c_alignment=>centered ).
    
          CATCH cx_salv_not_found.
        ENDTRY.
    
        " 5. 화면 출력
        lo_alv->display( ).
    
      CATCH cx_salv_msg INTO DATA(lx_msg).
        MESSAGE lx_msg->get_text( ) TYPE 'E'.
    ENDTRY.
    

    2. 기술 상세 설명

    Technical Field (기술적 필드)

    단순히 안 보이게 하는 set_visible과 달리, set_technical은 사용자가 레이아웃 변경 설정에서도 해당 컬럼을 아예 찾을 수 없게 만듭니다. 클라이언트(MANDT)나 시스템 내부 ID처럼 굳이 현업이 알 필요 없는 필드에 사용합니다.

    정렬 (Alignment)

    기본적으로 숫자는 오른쪽, 문자는 왼쪽으로 정렬됩니다. 항공사 코드나 날짜처럼 고정된 길이의 데이터는 Centered(중앙 정렬)를 적용하면 훨씬 보기 좋은 리스트가 됩니다.

    툴팁 (Tooltip)

    컬럼 헤더가 짧아서 의미 전달이 어려울 때 사용합니다. 마우스를 컬럼 제목 위에 올리면 풍선 도움말 형태로 긴 설명이 나타나 사용자 편의성을 높여줍니다.

    3. 주의사항

    • Casting (형변환): SALV의 기본 컬럼 객체에는 '정렬' 기능이 없습니다. 따라서 CAST cl_salv_column_table 구문을 통해 기능을 확장해줘야 정렬 메서드를 사용할 수 있습니다.
    • 컬럼명 오타: get_column( 'FIELD' ) 안의 필드명이 틀리면 프로그램이 멈출 수 있으므로 반드시 대문자로 작성하고 예외 처리를 해주는 것이 좋습니다.