ABAP ALV Report에서 조건에 따라 필드에 서로 다른 색상을 지정하는 방법


ABAP 프로그램의 ALV Grid 리포트에서 행(Row)이나 각 필드(Field)에 색상(Color)을 지정해서 리포트를 만들어야 하는 경우가 종종 생기게 됩니다.

단순한 색상을 지정하는 것이 아니라 조건에 따라 서로 다른 색상을 지정해야 한다면 어떻게 구현할 수 있을까요?

기준 수량 범위를 초과하는 경우 빨간색으로, 반대로 기준 수량 범위에 미달하는 경우 파란색으로 필드의 색을 지정 하거나 그룹 별로 서로 다른 색을 지정하거나 또는 소계나 합계를 구분하기 위해 별도의 색을 지정하는 경우 등, 의외로 ALV 리포트에서 색상을 지정해야 할 경우는 많이 있습니다.

이번 글에서는 ABAP ALV Report에서 조건에 따라 필드에 서로 다른 색상을 지정하는 방법과 SAP ABAP에서 사용하는 기본 색상표에 대해 알아보겠습니다.

ALV 리포트의 행 또는 필드에 서로 다른 색상으로 출력 된 결과 미리보기

▼ 아래 화면은 ‘수량’과 ‘금액’에 따라 각 필드에 서로 다른 색상을 지정한 리포트 입니다.

ABAP ALV Report에서 조건에 따라 필드에 서로 다른 색상을 지정하는 방법

ALV Grid에서 조건에 따라 서로 다른 색상을 지정해서 출력하는 ABAP Source

▼ ALV 리포트에서 조건에 따라 필드에 서로 다른 색상을 지정해서 출력하는 ABAP의 예제 소스입니다.

  • 행의 색상을 지정하기 위해서 행에 있는 모든 필드를 동일한 색상으로 지정해 주었습니다.
  • 하나의 특정 필드에 여러 색이 지정되었을 경우 마지막에 지정된 색이 최종 리포트에서 표시됩니다.
REPORT  ymm0001 .
 
* ALV GRID ————————————————————
TYPE-POOLS : slis.
DATA: l_pos TYPE i VALUE 0.
 
DATA: fieldcat TYPE slis_t_fieldcat_alv,
      fieldcat_ln LIKE LINE OF fieldcat.
DATA: sortcat TYPE slis_t_sortinfo_alv,
      sortcat_ln LIKE LINE OF sortcat.
DATA: eventcat TYPE slis_t_event,
      eventcat_ln LIKE LINE OF eventcat,
      gs_fcatlayo  TYPE slis_layout_alv.
 
 
* Coloring에 대한 정보를 담을 itab
 
DATA: t_colinfo_table TYPE slis_t_specialcol_alv WITH HEADER LINE.
 
DATA: BEGIN OF it_list OCCURS 0,
               name(10),
               fkimg(10)  TYPE p DECIMALS 0,
               netwr(10) TYPE p DECIMALS 0,
              alv_color TYPE slis_t_specialcol_alv, “Color 정보가 들어갈 구조 필드
        END OF it_list.
 
*—- START OF SELECTION
START-OF-SELECTION.
 
  PERFORM p100_display_data.
  PERFORM p200_build_fieldcat.
  PERFORM p500_alv_write.
 
 
*&———————————————————————*
*&      Form  P100_DISPLAY_DATA
*&———————————————————————*
FORM p100_display_data .
 
  SELECT name qty pay
    INTO (it_list-name, it_list-fkimg, it_list-netwr)
    FROM zpp100t
    WHERE zmonth = ’01’.
 
    REFRESH t_colinfo_table. “Coloring에 대한 정보를 담을 itab
    CLEAR t_colinfo_table.
 
* Row의 모든 필드에 동일 색상을 줌으로써 Row Color 지정 효과
    IF it_list-fkimg = 750.
      t_colinfo_table-color-col = 3.
      t_colinfo_table-fieldname = ‘NAME’.
      APPEND t_colinfo_table.
      t_colinfo_table-fieldname = ‘FKIMG’.
      APPEND t_colinfo_table.
      t_colinfo_table-fieldname = ‘NETWR’.
      APPEND t_colinfo_table.
    ENDIF.
 
* 원하는 필드만 색상을 줌으로써 Cell Color 지정 효과
    IF it_list-fkimg = 800 AND it_list-netwr <> 9000.
      t_colinfo_table-color-col = 5.
      t_colinfo_table-fieldname = ‘FKIMG’.
      APPEND t_colinfo_table.
    ENDIF.
 
* 필드마다 각기 다른 색을 줌으로써 다양한 Cell Color 지정 효과
    IF it_list-fkimg = 800 AND it_list-netwr = 9000.
      t_colinfo_table-color-col = 6.
      t_colinfo_table-fieldname = ‘NAME’.
      APPEND t_colinfo_table.
      t_colinfo_table-color-col = 7.
      t_colinfo_table-fieldname = ‘FKIMG’.
      APPEND t_colinfo_table.
      t_colinfo_table-fieldname = ‘NETWR’.
      APPEND t_colinfo_table.
    ENDIF.
 
    it_list-alv_color[] = t_colinfo_table[]. “Table 내용 copy!
 
    APPEND it_list.
 
  ENDSELECT.
 
ENDFORM.                    ” P100_DISPLAY_DATA
 
*&———————————————————————*
*&      Form  P200_BUILD_FIELDCAT
*&———————————————————————*
FORM p200_build_fieldcat .
 
  l_pos = l_pos + 1.
  CLEAR fieldcat_ln.
  fieldcat_ln-col_pos = l_pos.
  fieldcat_ln-fieldname = ‘NAME’.
  fieldcat_ln-reptext_ddic = ‘이름’.
  fieldcat_ln-key = ‘X’.
  fieldcat_ln-outputlen = 10.
  APPEND fieldcat_ln TO fieldcat.
 
  l_pos = l_pos + 1.
  CLEAR fieldcat_ln.
  fieldcat_ln-col_pos = l_pos.
  fieldcat_ln-fieldname = ‘FKIMG’.
  fieldcat_ln-reptext_ddic = ‘수량’.
  fieldcat_ln-outputlen = 15.
  APPEND fieldcat_ln TO fieldcat.
 
  l_pos = l_pos + 1.
  CLEAR fieldcat_ln.
  fieldcat_ln-col_pos = l_pos.
  fieldcat_ln-fieldname = ‘NETWR’.
  fieldcat_ln-reptext_ddic = ‘금액’.
  fieldcat_ln-outputlen = 15.
  APPEND fieldcat_ln TO fieldcat.
 
ENDFORM.                    ” P200_BUILD_FIELDCAT
 
*&———————————————————————*
*&      Form  P500_ALV_WRITE
*&———————————————————————*
FORM p500_alv_write .
 
  DATA: pgm LIKE sy-repid.
  pgm = sy-repid.
  gs_fcatlayo-coltab_fieldname = ‘ALV_COLOR’.
 
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
    EXPORTING
      i_callback_program = pgm
      is_layout          = gs_fcatlayo
      it_fieldcat        = fieldcat
*      it_sort            = sortcat
      i_save             = ‘U’
*      it_events          = eventcat
    TABLES
      t_outtab           = it_list
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
 
ENDFORM.                    ” P500_ALV_WRITE
 

※ 위의 ABAP 소스에서 빨간색으로 표시한 구문을 자세히 보면 쉽게 이해할 수 있습니다.

SAP ABAP에서 Color 지정을 위한 색상표

▶ ABAP 리포트 프로그램을 개발할 때 출력 행이나 필드에 색상(Color)을 지정해서 출력할 때가 많습니다.

▼ ABAP의 Report 프로그램에서 WRITE문 사용하여 Color를 지정하거나 ALV에서 Color를 지정할 때 아래 색상 표를 참고 하시면 됩니다.

SAP ABAP에서 Color 지정을 위한 색상표

▼ 각 색상에 대한 기본적인 의미입니다.

  • 1 – gray-blue headers
  • 2 – light gray list bodies
  • 3 – yellow totals
  • 4 – blue-green key columns
  • 5 – green positive threshold value
  • 6 – red negative threshold value
  • 7 – orange Control levels

※ 색상을 지정할 때 No의 숫자를 입력하거나 Color의 고유 이름을 입력해도 동일한 색이 표시됩니다.
(예를 들어 색을 지정할 때 ‘
0‘을 입력하거나 ‘COL_BACKGROUND‘를 입력해도 동일한 색으로 나타납니다)





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기