1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ABAP]ALV GRIDでセルに色を付ける(Indivisual Cell Color Settings For ALV GRID)

Last updated at Posted at 2020-01-19

こんにちは。
今回はALVのセルに色を付けるためのサンプルコードです。

Excelの条件付き書式のように条件を満たした場合だけ色を変えたい
担当者が一覧を見て、要対応・注意の内容がある箇所に色付けしたい
というような要件があった場合の対応事例になるかと思います。

下記のSAP COMMUNITYなどのサイトのサンプルコードを手直したものを掲載します。
どなたかの参考になれば幸いです。

参考リンク先
https://answers.sap.com/questions/5936331/cell-color-in-alv-grid-display.html

※ABAP OOでのALV作成の記事はこちらにまとめています。
[[ABAP]ABAP OOでALVを作成してみる(Let's try codeing ALV in ABAP OO) (1/N)]
(https://qiita.com/Go_Ohta/items/3355a0850c092d544025)
[[ABAP]ABAP OOでALVを作成してみる(Let's try codeing ALV in ABAP OO) (2/N)]
(https://qiita.com/Go_Ohta/items/ef0d25555b3ef8749495)

仕様###

  • 色は規定済みの色しか使用できない**(16色)**→プログラム:SHOWCOLOで見られます
  • 一覧データの内部テーブルに項目の色情報用の項目を持ち、色情報を格納する
  • 色情報はテーブルデータ型で持つので、1行の複数項目に、それぞれの条件で色付けできる

プログラム:SHOWCOLOの実行結果は下記の通りです。
このうち「INTENSIFIED」「INTENSIFIED OFF」の16色しか使用できません。
image.png

処理の流れ###

  • 一覧データの構造定義。この際に色情報を設定する項目(ここでは「CELLCOLOR」)を追加で設定
  • データ抽出。上記色情報の項目があるため、「INTO CORRESPONDING FIELDS OF・・・」での抽出が必要
  • FIELD CALALOG の内部テーブル作成
  • 色情報を持っている一覧データ項目の項目名を設定
  • 色を付ける条件に従ってデータを検索し、色情報(色を付ける項目、色、強調表示有無)を設定
  • ALV表示用汎用Mやクラスメソッドなどで表示(ここでは汎用Mを使用しています)

サンプルコード###

YTEST_ALV_CELL_COLOR
*&---------------------------------------------------------------------*
*& Report YTEST_ALV_CELL_COLOR
*&---------------------------------------------------------------------*

REPORT ytest_ALV_CELL_COLOR.

TYPE-POOLS: slis.
INCLUDE <icon>.
 
*- Fieldcatalog
DATA: it_fieldcat  TYPE lvc_t_fcat,
      it_fieldcat1 TYPE slis_t_fieldcat_alv..
DATA: x_fieldcat  TYPE lvc_s_fcat.
DATA: x_layout    TYPE lvc_s_layo.
 
DATA: ls_cellcolor TYPE lvc_s_scol.
DATA: l_index TYPE sy-tabix.
DATA: l_pos TYPE i VALUE 1.
 

TYPES: BEGIN OF typ_it_vbap,
         vbeln     TYPE vbap-vbeln,
         posnr     TYPE vbap-posnr,
         matnr     TYPE vbap-matnr,
         pstyv     TYPE vbap-pstyv,
         cellcolor TYPE lvc_t_scol, "セルの色情報用項目
       END OF typ_it_vbap,
       ttyp_it_vbap TYPE STANDARD TABLE OF typ_it_vbap.
 DATA: it_vbap TYPE ttyp_it_vbap.
 
* 一覧データ抽出
SELECT vbeln
       posnr
       matnr
       pstyv
  FROM vbap
  UP TO 20000 ROWS
  INTO CORRESPONDING FIELDS OF TABLE it_vbap. "CELLCOLORがあるためCORRESPONDING
 

* FIELD CATALOG 作成
CLEAR: l_pos.
l_pos = l_pos + 1.
x_fieldcat-seltext    = 'VBELN'.
x_fieldcat-fieldname  = 'VBELN'.
*x_fieldcat-tabname    = 'ITAB'. "?
x_fieldcat-col_pos    = l_pos.
x_fieldcat-outputlen  = '10'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

l_pos = l_pos + 1.
x_fieldcat-seltext    = 'POSNR'.
x_fieldcat-fieldname  = 'POSNR'.
*x_fieldcat-tabname    = 'ITAB'.
x_fieldcat-col_pos    = l_pos.
x_fieldcat-outputlen  = '5'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

l_pos = l_pos + 1.
x_fieldcat-seltext    = 'MATNR'.
x_fieldcat-fieldname  = 'MATNR'.
*x_fieldcat-tabname    = 'ITAB'.
x_fieldcat-col_pos    = l_pos.
x_fieldcat-outputlen  = '18'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

l_pos = l_pos + 1.
x_fieldcat-seltext   = 'PSTYV'.
x_fieldcat-fieldname = 'PSTYV'.
*x_fieldcat-tabname   = 'ITAB'.
x_fieldcat-col_pos   = l_pos.
x_fieldcat-outputlen = '4'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.

* 一覧データテーブルにある、色情報を格納している項目名を指定
x_layout-ctab_fname = 'CELLCOLOR'.

* 条件を満たす行のセルに色付け
LOOP AT it_vbap ASSIGNING FIELD-SYMBOL(<fs_vbap>) .
  CLEAR ls_cellcolor.
  IF <fs_vbap>-pstyv       = 'XXXX'. "色を変える条件
    ls_cellcolor-fname     = 'PSTYV'. "色を変えたい項目
    ls_cellcolor-color-col = '6'.     "色
    ls_cellcolor-color-int = '1'.     "強調表示有無
    APPEND ls_cellcolor TO <fs_vbap>-cellcolor.
  ENDIF.
ENDLOOP.

* ALV DISPLAY
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = x_layout
    it_fieldcat_lvc    = it_fieldcat
  TABLES
    t_outtab           = it_vbap[]
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?