[SAP ABAP] 필드별 색상 번갈아서 나타내기

성희·2025년 8월 25일
0

[SAP개발] ABAP

목록 보기
1/12
post-thumbnail

문제

  • 필드에 따라 색상이 번갈아서 나와야 함.
  • zebra mode는 색상이 번갈아서 나오긴 하지만 디폴드 색이 정해져 있기 때문에 원하는 색상을 주기는 어려움

아이디어

  • lvc_t_scol를 통해 컬럼별 색상주기
  • FIELD-SYBOLS : LOOP안에서 ASSIGNING문을 통해 동적 접근
  • loop의 tabix가 짝수, 홀수 임에 따라 다른 색상 주기

코드

top

레코드 별 개별 필드 속성을 지정해주기 위해 lvc_t_scol 타입의 필드 선언

DATA : BEGIN OF gs_data,
         carrid     TYPE spfli-carrid,
         connid     TYPE spfli-connid,
         fldate     TYPE sflight-fldate,
         price      TYPE sflight-price,
         ( 생략... )
         color      TYPE lvc_t_scol, "
       END OF gs_data,

f01

- set_color : 조건에 맞는 필드 파악

FORM set_color .

  IF pa_lo = 'X'.

    DATA : lv_tabix TYPE sy-tabix.

	" 필드 심볼 선언, 해당 폼에서만 사용하기 때문에 local로 선언
    " loop를 돌며 레코드의 특정 필드를 파악하기 위해 사용
    FIELD-SYMBOLS: <lf_data>  TYPE any,
                   <lf_field> TYPE any.

    LOOP AT gt_data ASSIGNING <lf_data>.
   
      lv_tabix = sy-tabix.
      REFRESH gs_data-color.
	
      " 메인 로직
      ASSIGN COMPONENT 'CONNID' OF STRUCTURE <lf_data> TO <lf_field>.
      IF sy-subrc = 0.
        IF lv_tabix MOD 2 = 0.
          PERFORM fill_color TABLES gs_data-color
                             USING : 'CONNID' 1 1 0.

        ELSE.
          PERFORM fill_color TABLES gs_data-color
                             USING : 'CONNID' 1 0 0.
        ENDIF.

        MODIFY gt_data FROM gs_data INDEX lv_tabix
                                    TRANSPORTING color.

      ENDIF.

      ASSIGN COMPONENT 'PRICE' OF STRUCTURE <lf_data> TO <lf_field>.
      IF sy-subrc = 0.
        IF lv_tabix MOD 2 = 0.
          PERFORM fill_color TABLES gs_data-color
                             USING : 'PRICE' 3 1 0.

        ELSE.
          PERFORM fill_color TABLES gs_data-color
                             USING : 'PRICE' 3 0 0.
        ENDIF.

        MODIFY gt_data FROM gs_data INDEX lv_tabix
                                    TRANSPORTING color.

      ENDIF.
	
    ( 코드 생략 ... )

    ENDLOOP.

  ENDIF.

ENDFORM.

- fill_color : color 필드에 색상 데이터 추가

FORM fill_color  TABLES   pt_color TYPE lvc_t_scol
                 USING    pv_field
                          pv_color TYPE i
                          pv_int   TYPE i
                          pv_inv   TYPE i.

  DATA : ls_color TYPE lvc_s_scol.

  CLEAR ls_color.

  ls_color-fname     = pv_field.
  ls_color-color-col = pv_color. "color 코드
  ls_color-color-int = pv_int.   "intensified off
  ls_color-color-inv = pv_inv.   "inverse off

  APPEND ls_color TO pt_color.

ENDFORM.

- fcat에 color 필드 물려주기

FORM set_fcat_layout .

  ( ... )
  
  gs_layout-ctab_fname = 'COLOR'. "이 부분을 빼먹는 일이 잦으니 주의!
 
  ( ... )
  
 ENDFORM.

결과


생각한대로 예쁘게 나와 준 모습

profile
ABAP 개발자로 성장하는 중

0개의 댓글