[SALV] 6탄: 데이터 시각화의 정점, 컬럼 및 행 색상 변경 (Color)

2026. 4. 8.
SAP ABAP SALV 시리즈 6탄. 특정 조건에 따라 행(Row)이나 셀(Cell)의 색상을 변경하여 가독성을 극대화하는 시각화 전략을 다룹니다. LVC_T_SCOL 구조를 활용한 동적 색상 제어 기법 정리했습니다.
 

CONTENTS: SALV 6탄 - 컬럼 및 행 색상 제어

    1. 실무 적용 코드 예시 (Dynamic Color Handling)

    특정 조건(예: 잔여 좌석 부족)에 따라 행 전체 또는 특정 셀에 색상을 입히는 실무형 로직입니다. 데이터 구조에 색상 정보 테이블을 포함하는 것이 핵심입니다.

    
    " --- 1. 색상 정보를 포함할 데이터 구조 정의 ---
    TYPES: BEGIN OF ty_flight.
             INCLUDE TYPE sflight.
    TYPES:   t_color TYPE lvc_t_scol, " 셀/행 색상을 제어할 딥 구조체 추가
           END OF ty_flight.
    
    DATA: lt_display TYPE TABLE OF ty_flight.
    
    " --- 2. 데이터 조회 및 동적 색상 로직 적용 ---
    SELECT * FROM sflight INTO TABLE @DATA(lt_flight) UP TO 50 ROWS.
    
    lt_display = CORRESPONDING #( lt_flight ).
    
    LOOP AT lt_display ASSIGNING FIELD-SYMBOL(<ls_flight>).
      " 시나리오: 좌석 점유율이 95% 이상인 경우 해당 행을 '빨간색'으로 강조
      IF <ls_flight>-seatsocc >= <ls_flight>-seatsmax * '0.95'.
        " 행 전체 색상 지정 (Color: 6-Red, Intensified: 1)
        <ls_flight>-t_color = VALUE #( ( color = VALUE #( col = 6 int = 1 ) ) ).
      
      " 시나리오: 특정 항공사(AA)의 항공편명 셀만 '노란색'으로 강조
      ELSEIF <ls_flight>-carrid = 'AA'.
        <ls_flight>-t_color = VALUE #( ( fname = 'CONNID' color = VALUE #( col = 3 int = 1 ) ) ).
      ENDIF.
    ENDLOOP.
    
    TRY.
        " 3. SALV 객체 생성
        cl_salv_table=>factory(
          IMPORTING r_salv_table = DATA(lo_alv)
          CHANGING  t_table      = lt_display
        ).
    
        " --- [핵심] 4. SALV에 색상 정보 필드 알려주기 ---
        DATA(lo_columns) = lo_alv->get_columns( ).
        " 데이터 테이블 내의 'T_COLOR' 필드가 색상 컨트롤 필드임을 지정합니다.
        lo_columns->set_color_column( 'T_COLOR' ).
    
        " 5. 컬럼 단위 고정 색상 지정 (예: 비행일자 컬럼은 항상 파란색)
        DATA(lo_column) = CAST cl_salv_column_table( lo_columns->get_column( 'FLDATE' ) ).
        lo_column->set_color( VALUE #( col = 1 int = 0 ) ).
    
        " 6. 화면 출력
        lo_alv->display( ).
    
      CATCH cx_root INTO DATA(lx_root).
        MESSAGE lx_root->get_text( ) TYPE 'E'.
    ENDTRY.
    

    2. 기술 상세 설명: SALV 색상 모델의 이해

    SALV에서 색상을 적용하는 방식은 단순히 '무슨 색을 칠해라'는 명령보다 훨씬 정교한 구조를 가집니다. 특히 LVC_T_SCOL 구조를 이해하는 것이 동적 ALV 개발의 시작입니다.

    색상 지정의 3단계 계층 구조

    SALV는 데이터 표시 시 다음의 우선순위에 따라 색상을 결정합니다.

    • 1단계: Cell Color (최우선): 특정 셀에 지정된 색상입니다. 행 색상보다 우선합니다.
    • 2단계: Row Color: 행 전체에 적용된 색상입니다. 특정 조건에 맞는 데이터 라인을 강조할 때 씁니다.
    • 3단계: Column Color: 특정 컬럼 전체에 고정으로 적용되는 색상입니다.

    SAP 표준 컬러 코드 (Color Code)

    SAP 색상 시스템은 4자리 숫자(Cxyz)의 조합으로 이해할 수 있지만, ABAP 구문에서는 보통 구조체 필드로 제어합니다.

    코드(COL) 색상 의미 실무적 활용
    1 Blue (Gray blue) 일반 텍스트, 헤더 정보
    3 Yellow 경고, 선택된 항목
    5 Green 정상 처리 완료, 성공
    6 Red 오류 발생, 위험 수치 강조
    7 Orange 특별 관리 대상

    3. 비즈니스 시나리오 기반 실무 팁

    실제 프로젝트에서 색상 제어는 단순 미관용이 아닌 '의사결정 지원 도구'입니다. 현업 사용자는 수천 줄의 데이터를 보며 즉각적으로 판단해야 하기 때문입니다.

    예외 상황 강조 (Exception Highlighting)

    재고 관리 리스트에서 안전 재고 수량보다 현재고가 적은 경우 해당 행을 빨간색으로 처리하면, 사용자는 필터링 없이도 즉시 발주 대상을 인지할 수 있습니다. 이때 INT (Intensified) 값을 1로 주어 진하게 표시하는 것이 효과적입니다.

    입력 가능 필드 구분

    Edit 모드가 포함된 ALV(주로 Grid 방식이지만 SALV 조회용으로도 씀)에서 특정 컬럼이 계산된 결과값임을 알리기 위해 해당 컬럼에만 연한 파란색(COL=1, INT=0)을 주어 '읽기 전용'임을 시각적으로 암시할 수 있습니다.

    4. 주의사항 및 트러블슈팅 (Q&A)

    색상 처리 로직 구현 중 자주 발생하는 병목 지점과 해결책입니다.

    • 왜 색상이 안 나오나요? 가장 흔한 실수는 set_color_column 메서드에 필드명을 대문자로 전달하지 않았거나, 필드 지정을 아예 누락한 경우입니다.
    • 성능 문제: 수만 건의 데이터 루프 내에서 매번 색상 정보(Internal Table)를 추가하는 행위는 성능에 영향을 줄 수 있습니다. 대량 데이터 처리 시에는 꼭 필요한 행에만 조건부로 로직을 수행하도록 최적화해야 합니다.
    • Zebra 패턴과의 충돌: set_striped_pattern을 적용한 상태에서 연한 색상을 쓰면 가독성이 더 떨어질 수 있습니다. 색상 적용 시에는 배경과의 명도 대비를 충분히 고려하세요.