[ABAP] [ALV] 행·열·칸에 색상 넣기

홍예림·2023년 11월 10일
0

SAP ABAP 코딩하기

목록 보기
3/8
post-thumbnail

🛑 색상표

LVC_S_COLO

색상은 LVC_S_COLO라는 구조에 따라 표현되며, SE11 에서 스트럭처를 검색하면 구조를 볼 수 있다.

예를 들어서, C600 컬러코드가 의미하는 것은 아래와 같다.

600
COLINTINV
colorintensifiedinverse
색깔강조색배경색
0~7까지 색상ON(1) / OFF(0)ON(1) / OFF(0)

컬러 코드

이미지 출처 : https://www.like2party.net/45


🛑 색상 넣기

열(필드,Column)

gs_fcat-emphasize = '컬러코드'

필드카탈로그 코드에 추가.


행(레코드,Row) / 칸(Cell)

LVC_S_SCOL & LVC_T_SCOL

ALV에서 필드와 컬러코드를 매칭시키기 위한 스트럭처이며, SE11에서 LVC_S_SCOL를 조회하면 구조를 볼 수 있다.
LVC_T_SCOL은 이 스트럭처를 가진 테이블이다.

코드

  1. lvc_s_scol 스트럭처를 필드에 담은 인터널 테이블 선언
DATA : BEGIN OF gs_spfli,
         carrid    TYPE spfli-carrid,
         connid    TYPE spfli-connid,
         countryfr TYPE spfli-countryfr,
         cityfrom  TYPE spfli-cityfrom,
         airpfrom  TYPE spfli-airpfrom,
         countryto TYPE spfli-countryto,
         cityto    TYPE spfli-cityto,
         airpto    TYPE spfli-airpto,
         fltime    TYPE spfli-fltime,
         deptime   TYPE spfli-deptime,
         arrtime   TYPE spfli-arrtime,
         distance  TYPE spfli-distance,
         distid    TYPE spfli-distid,
         fltype    TYPE spfli-fltype,
         period    TYPE spfli-period,
         color     TYPE lvc_t_scol, "<--- 테이블 자체가 필드 안에 들어간다 --->"
       END OF gs_spfli,
       gt_spfil LIKE TABLE OF gt_spfli.
  1. LOOP문을 이용해 각 레코드에서 특정 필드에 해당하면 색상정보를 담도록 코드 입력
  • 컬러 코드를 반복해서 하드코딩하는 방법
    : 컬러코드마다 반복해서 코드를 전부 적는다.
    : Row 전체에 색을 칠하는 코드이다.
LOOP AT 인터널테이블 INTO 스트럭처. "<--- 스트럭처 안에  --->"

	lv_tabix = sy-tabix. "<--- MODIFY  인덱스 고정 --->"
    
    
    ls_color-fname = 'AIRPTO'. "<--- 필드명 --->"
    ls_color-color-col = 0. "<--- ls_color라는 스트럭처  color라는 스트럭처  col 필드--->"
    ls_color-color-int = 1.
    ls_color-color-inv = 0. "<--- 컬러코드 C010 --->
    
    APPEND ls_color TO gs_spfli-color.
    
    MODIFY gt_spfli FROM gs_sofli INDEX lv_tabix TRANSPORTING color.
    
    
    ls_color-fname = 'COUNTRYFR'. "<--- 필드명 --->"
    ls_color-color-col = 3. "<--- ls_color라는 스트럭처  color라는 스트럭처  col 필드--->"
    ls_color-color-int = 0.
    ls_color-color-inv = 0. "<--- 컬러코드 C010 --->
    
    APPEND ls_color TO gs_spfli-color.
    
    MODIFY gt_spfli FROM gs_sofli INDEX lv_tabix TRANSPORTING color.
    
 ENDLOOP.
  • PERFORM-FORM문(USING/CHNAGING) 활용해 로직을 재사용하는 방법
    : 위 방법을 리팩토링. 컬러코드만 파라메터로 전달해 로직이 짧아진다.
    : 1개의 셀에만 색을 칠하는 코드이다.
LOOP AT gt_spfli INTO gs_spfli.

  lv_tabix = sy-tabix.


  IF gs_spfli-airpto = 'JFK'.
    PERFORM set_color USING    'AIRPTO' 7 1 0  "<--- set_color라는 로직을 재사용 --->"
                      CHANGING gs_spfli-color.

  ELSEIF gs_spfli-countryfr = 'DE'.
    PERFORM set_color USING    'COUNTRYFR' 5 1 1
                      CHANGING gs_spfli-color.

  ELSEIF gs_spfli-countryfr = 'IT'.
    PERFORM set_color USING    'COUNTRYFR' 6 1 0
                      CHANGING gs_spfli-color.
  ENDIF.


  MODIFY gt_spfli FROM gs_spfli INDEX lv_tavbix TRANSPORTING color.

ENDLOOP.
FORM set_color    USING pv_fieldname  "<--- USING, CHANGING과 파라메터 순서 일치해야 한다 --->"
                        pv_col    TYPE i
                        pv_int    TYPE i
                        pv_inv    TYPE i
               CHANGING pt_color  TYPE lvc_t_scol.


  DATA : ls_color TYPE lvc_s_scol.

  CLEAR : ls_color.


  ls_color-fname     = pv-fieldname.
  ls_color-color-col = pv_col.
  ls_color-color-int = pv_int.
  ls_color-color-inv = pv_inv.

  APPEND ls_color TO pt_color.

ENDFORM.


결과

profile
SYNC 5반 2023.07 - 2023.12

0개의 댓글