레코드 별 개별 필드 속성을 지정해주기 위해 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,
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.
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.
FORM set_fcat_layout .
( ... )
gs_layout-ctab_fname = 'COLOR'. "이 부분을 빼먹는 일이 잦으니 주의!
( ... )
ENDFORM.
생각한대로 예쁘게 나와 준 모습