ALV Zeilen, Zellen und Spalten farbig formatieren

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Es kann eine gesamte Spalte einer Farbe zugewiesen werden im Fieldcat.

Aber manchmal möchte man auch eine Zeile farbig formatieren in Abhängigkeit einer Bedingung oder eine Zelle und dieser Zeile bzw. Zelle mit der Farbcodierung der Zelle eine semantische Bedeutung geben.

Eine Zeile farbig formatieren

Erweiterung interne Tabelle

Die interne Tabelle wird um eine Spalte erweitert. In diesem Fall um die Spalte ROWCOLOR. Sie typisiert auf ein Char-Feld der Länge 4.

Types: begin of ty_paragraphs.
include structure SSFPARAS.
types: ROWCOLOR type char4.
Types: end of ty_paragraphs.

Neue Spalte der Layout-Struktur bekannt machen

Die Layout-Struktur vom ALV-Grid wird im Spaltennamen INFO_FNAME mit der neuen Spalte gefüllt. Der ALV-Grid weiß somit in welcher Spalte der internen Tabelle die Farbcodierung der Zeile ist.

ls_layout-info_fname = 'ROWCOLOR'.

Interne Tabelle füllen

Die interne Tabelle wird in Abhängigkeit vom Kontext mit einer Farbcodierung gefüllt. Hier wird die interne Tabelle CT_PARAGRAPHS in der Spalte ROWCOLOR mit "C300" (Beige) gefüllt.

read table ct_paragraphs ASSIGNING <fs_paragraphs> with key TDPARGRAPH = ls_itab-TDFIRSTPAR.

<fs_paragraphs>-rowcolor = 'C300'.

Anzeige in ALV-Liste

Hier wird der Standardabsatz "AL" in einer Liste von Absatzformaten eines Smart Form-Stils in einer beigen Farbe angezeigt.

Zeilenfarbe1.JPG


Zeilenfarbe2.JPG

Eine Zelle farbig formatieren

Feld einfügen Typ LVC_T_SCOL

In der internen Tabelle, die im ALV ausgegeben wird, muss ein Feld (hier mit Namen CELLCOLL) eingefügt werden, was den Typ LVC_T_SCOL hat.

TYPES: BEGIN OF ty_texte,
       ..., "(normale Felder)
       CELLCOL  TYPE LVC_T_SCOL.    "Zellfarben
TYPES: END OF ty_texte.

Zellenfarbe4.jpg

Das Feld FNAME muss zwingend mit dem gewünschten Feld gefüllt werden. COLOR ist eine Struktur vom Typ LVC_S_COLO.

Zellenfarbe5.jpg


Das Feld COL wird mit einem Farbwert von 1 bis 7 gefüllt. INT und INV werden oft leer sein.

Zellenfarbe6.jpg

Feld CELLCOL in Layout-Struktur bekannt machen

In der Layoutstruktur wird dieses Feld CELLCOL dem ALV bekannt gemacht.

ls_layout-ctab_fname  = 'CELLCOL'.

Feld CELLCOL im Loop füllen

Beim Loop über die interne Tabelle wird dieses Feld CELLCOL nun gefüllt mit dem Feldnamen und dem gewünschten Farbwert.

Data: ls_cellcol type lvc_s_scol.

Field-Symbols: <fs_texte> type ty_texte.

constants: begin of gcs_color_inaktiv,
           col type lvc_col value 5, "steht hier für Grün
           int type lvc_int value 0,
           inv type lvc_inv value 0,
           end of gcs_color_inaktiv.

Loop at gt_texte assigning <fs_texte> where Textart = 'FP' or
                                            Textart = 'NP'.

  ls_cellcol-fname = 'TEXTART'.
  ls_cellcol-color = gcs_color_inaktiv.
  append ls_cellcol to <fs_texte>-cellcol.

  ls_cellcol-fname = 'TEXTNR'.
  ls_cellcol-color = gcs_color_inaktiv.
  append ls_cellcol to <fs_texte>-cellcol.

endloop.

Problem Select in tiefe Struktur

Wenn die interne Tabelle um die interne Tabelle CELLCOL erweitert wurde, liegt eine tiefe Struktur vor, in die nicht mehr so einfach selektiert werden kann mittels

select .. into itab

Es kann dann gleich bei der Syntaxprüfung zu einer Fehlermeldung kommen. Hier behilft man sich dann, indem die tiefe Struktur mit einer Select-Endselect-Schleife gefüllt wird oder die tiefe Struktur bereinigt um CELLCOL definiert wird und die Daten der bereinigten internen Tabelle dann zur tiefen Struktur übertragen werden.

Ausgabe ALV-Liste

Die Zellen mit den Werten "FP" und "NP" in der Spalte Textart (TA) erscheinen grün.

Zellenfarbe3.jpg

Spalten mit Farben formatieren

Farbkonstanten in einer Klasse

Es bietet sich an diese Farben als Konstanten in einer Klasse oder einem Interface zu hinterlegen, um die Farben dann mit sprechenden Namen reportübergreifend nutzen zu können und um nicht jedes mal neu nachschlagen zu müssen welche Codewert für welche Farbe steht.

Zudem kann man später systemweit die Farbintensität einer Farbe ändern, indem man den Farbwert der Konstante in der globalen Klasse/Interface ändert.

ALVFieldcat1.jpg

Web-Links