Farbe mit lvc_t_scol definieren

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Farbe mit lvc_t_scol definieren

Beitrag von JanR (ForumUser / 57 / 14 / 2 ) »
Hallo zusammen,

ich will eine spalte meiner Alv-Ausgabe, die ich mit der Klasse cl_salv_table erzeuge farbig unterlegen.
Dazu habe ich die Methode column->set_color() gefunden die einen Wert vom Typ lvc_t_scol braucht. Meine Frage wäre jetzt wie ich eine Farbe vom Typ lvc_t_scol definiere, z.B. grün.

Vielen Dank im Voraus
Jan

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Farbe mit lvc_t_scol definieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Deine Tabelle muss eine Spalte haben, die nicht Teil der im ALV darzustellenden Spalten ist, sondern in der Du den gewünschten Farbwert hinterlegst. Mit der Methode SET_COLOR_COLUMN Deines Objektes der Klasse CL_SALV_COLUMNS_TABLE (das Du mit CL_SALV_TABLE->GET_COLUMNS erhalten hast) teilst Du dem ALV den Spaltennamen fest, den Du Deiner Farbspalte gegeben hast, damit es die Spalte entsprechend auswerten kann.

Re: Farbe mit lvc_t_scol definieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Die Aussage von D&P gilt für den komplizierten Fall, dass du einzelne Zellen statt der ganzen Spalte färben willst. Für deinen Fall sind die Farben genau so definiert wie beim WRITE ... COLOR .. Befehl. Grün wäre also die "5"
Zuletzt geändert von black_adept am 07.12.2020 18:40, insgesamt 1-mal geändert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Farbe mit lvc_t_scol definieren

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Demo-Report BCALV_TEST_COLORS

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
JanR


Re: Farbe mit lvc_t_scol definieren

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
SET_COLOR braucht nicht lvc_t_scol, sondern lvc_s_colo:

Code: Alles auswählen.

column->set_color( VALUE lvc_s_colo( col = 5 int = 1 inv = 0 ) ).
Für die Farben googlest du am besten einmal kurz "ALV color", dann findest du Bilder mit den Werten für col, int und inv ;)
Beachten sollte man, dass die Farbdarstellung auch abhängig vom Theme der SAP GUI ist.

Folgende Benutzer bedankten sich beim Autor fr-g für den Beitrag:
JanR


Re: Farbe mit lvc_t_scol definieren

Beitrag von JanR (ForumUser / 57 / 14 / 2 ) »
Vielen Danke für die schnellen Antworten, mit lvc_s_colo statt lvc_t_scol hat es geklappt.

Code: Alles auswählen.

data: color TYPE LVC_S_COLO.
  color-col = '7'.
  color-int = '0'.
  color-inv = '0'.

Re: Farbe mit lvc_t_scol definieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Nur ist Dein Beispielcode oldschool und sollte besser so aussehen😉:

Code: Alles auswählen.

DATA(color) = VALUE LVC_S_COLO( col = '7'
                                int = '0'
                                inv = '0' ).
Kürzer und viel schöner (erfordert mind. Release 7.40).

Und dann vielleicht noch über einen anderen Namen für das Feld nachdenken, da COLOR ein ABAP-Schlüsselwort ist. ABAP erlaubt sowas zwar, aber Schlüsselwörter als Feldnamen zu verwenden, kann tückisch sein. Oder Du verzichtest gleich ganz auf das Feld und übergibst den VALUE direkt als Parameter an die ALV-Methode. Das lokale COLOR-Feld brauchst Du ja nur dafür; anschließend stiftet es ja keinen Nutzen mehr.

Re: Farbe mit lvc_t_scol definieren

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Aber die Felder sind doch alle Integer-Typen :P
Ich hatte das oben schon mit VALUE vorformuliert.

Re: Farbe mit lvc_t_scol definieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
fr-g hat geschrieben:
08.12.2020 13:10
Aber die Felder sind doch alle Integer-Typen :P
Hast recht. Diesen kleinen Makel habe ich unkritisch vom Fragesteller abgeschrieben. Deine Variante ist die beste.

War bei mir wahrscheinlich Gewohnheit, weil es meistens andersrum ist: Fast alle schreiben z.B.

Code: Alles auswählen.

LEAVE TO SCREEN 0.
obgleich Dynpronummern immer NUMCs sind und daher (zur Vermeidung einer überflüssigen Konvertierung) in Anführungszeichen geschrieben werden sollten.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
fr-g


Re: Farbe mit lvc_t_scol definieren

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
DeathAndPain hat geschrieben:
08.12.2020 14:08

Code: Alles auswählen.

LEAVE TO SCREEN 0.
obgleich Dynpronummern immer NUMCs sind und daher (zur Vermeidung einer überflüssigen Konvertierung) in Anführungszeichen geschrieben werden sollten.
Guter Hinweis! Das habe ich noch nie beachtet.

Re: Farbe mit lvc_t_scol definieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
DeathAndPain hat geschrieben:
08.12.2020 14:08
obgleich Dynpronummern immer NUMCs sind und daher (zur Vermeidung einer überflüssigen Konvertierung) in Anführungszeichen geschrieben werden sollten.
Erstens: Dynpronummern sind nicht immer vom Typ NUMC sondern manchmal auch vom Typ CHAR ( SY-DYNNR ).
Eine Zuweisung = 'ABCD' ist also bei letzteren möglich auch wenn man keinen solchen Dynpro anlegen oder aufrufen kann weil SAP am Ende des Tages eben doch auf "Zahl" prüft ( Type SCRADNUM = NUMC4 ).
Zweitens: Könntest du bitte mal einen Link zu deiner Behauptung posten der erklärt welche Konvertierungen bei der Zuweisung einer Zahl zu einem NUMC-Feld passieren die bei einer Zuweisung eines Char-Felds zu einem NUMC-Feld nicht passieren und dass das tatsächlich ( von mir aus auch nur marginal ) schneller ist.
Insbesondere in Berücksichtigung der Tatsache dass eine Zuweisung von '9 ' oder '009A' zu einem Wert '0009' führt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Farbe mit lvc_t_scol definieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Dynpronummern sind nicht immer vom Typ NUMC sondern manchmal auch vom Typ CHAR ( SY-DYNNR ).
Du hast recht. Sorry für diese Ungenauigkeit auf meiner Seite.
Zweitens: Könntest du bitte mal einen Link zu deiner Behauptung posten der erklärt welche Konvertierungen bei der Zuweisung einer Zahl zu einem NUMC-Feld passieren die bei einer Zuweisung eines Char-Felds zu einem NUMC-Feld nicht passieren und dass das tatsächlich ( von mir aus auch nur marginal ) schneller ist.
Ein NUMC-Feld ist (wie das C in "NUMC" schon sagt), technisch gesehen ein Characterfeld. Dasselbe gilt übrigens auch für Datumsfelder, nur dass ABAP bei Zuweisungen bei NUMC-Feldern prüft, ob man da nur Zahlen reinschreibt, wohingegen man in ein Feld vom Typ D (bzw. DATS) jeden Character-Unsinn reinschreiben kann.

Bei einer Zuweisung einer Zahl zu einem NUMC-Feld muss diese technisch gewandelt werden. Bei einer CHAR-Quelle ist hingegen nur eine Prüfung nötig, ob die Stellen auch alle Ziffern sind. Ggf. wird mit Nullen aufgefüllt, da hast Du recht. Wenn das zugewiesene Feld aber formal dem NUMC-Standard entspricht, ist nichts zu tun. Von daher liegt es auf der Hand, dass der Aufwand hier geringer ist.

Und nein, ich habe die Performance nicht gemessen, und ich behaupte, Du auch nicht. Ich rechne auch nicht mit einer in der Höhe nennenswerten Auswirkung auf die Performance, auch wenn ich davon ausgehe, dass es einen Unterschied geben wird. Für mich symbolisiert es aber mangelnde Bewusstheit hinsichtlich der Datentypen, wenn man einem als NUMC (oder hier sogar als CHAR) definierten Feld eine Integerzahl als Literal zuweist. Literale sollten meiner Meinung nach immer in dem Datentyp abgefasst werden, dem sie zugeordnet werden.

Wobei die Frage spannend ist, ob die Dynpronummer bei LEAVE TO SCREEN x (oder CALL SCREEN x) technisch als NUMC oder als CHAR implementiert ist. Du hast recht, dass SY-DYNNR etwas inkonsequent als CHAR umgesetzt worden ist. Aber wenn die o.g. Befehle den Wert als CHAR interpretieren würden, dann würde ein LEAVE TO SCREEN 0. ja sogar die Null in die dritte Stelle des vierstelligen Characterfeldes setzen (rechtsbündig, aber mit nachfolgendem Vorzeichen, wie ABAP das halt so macht, wenn man eine Integerzahl einem C-Feld zuweist). Das dürfte dann eigentlich nicht funktionieren. Also ist davon auszugehen, dass das intern erkannt und umformatiert wird - und die naheliegendste Form, in der das mutmaßlich geschieht, ist die Behandlung als NUMC.

Dann aber sollte man natürlich auch nicht LEAVE TO SCREEN '0'., sondern LEAVE TO SCREEN '0000'. schreiben. Da hast Du dann natürlich recht.

Re: Farbe mit lvc_t_scol definieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
@D&P: Erstmal danke, dass du meine Frage wirklich im Kern verstanden und gut beantwortet hast.
DeathAndPain hat geschrieben:
08.12.2020 19:15
Literale sollten meiner Meinung nach immer in dem Datentyp abgefasst werden, dem sie zugeordnet werden.
Kann man machen - aber ehrlich gesagt sehe ich das schon lange sehr locker zumal man manchmal mehr oder weniger gezwungen ist das anders zu machen.
Beispiele: float = '12.34' oder String = 'abc'(222).
Ich stimme dir im Grundsatz zu und versuche das i.A. auch so zu handhaben - aber meine grauen Haare kommen nicht daher, dass ich mir Vorwürfe mache das nicht überall konsequent durchzuhalten.
DeathAndPain hat geschrieben:
08.12.2020 19:15
Wobei die Frage spannend ist, ob die Dynpronummer bei LEAVE TO SCREEN x (oder CALL SCREEN x) technisch als NUMC oder als CHAR implementiert ist.
NUMC! Ein CALL SCREEN '9X4' führt dich auf den Screen 94 falls vorhanden und ich hoffe mal, dass sich CALL SCREEN und LEAVE TO SCREEN da nicht unterscheiden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Farbe mit lvc_t_scol definieren

Beitrag von JanR (ForumUser / 57 / 14 / 2 ) »
DeathAndPain hat geschrieben:
08.12.2020 12:56
Nur ist Dein Beispielcode oldschool und sollte besser so aussehen😉:

Code: Alles auswählen.

DATA(color) = VALUE LVC_S_COLO( col = '7'
                                int = '0'
                                inv = '0' ).
Kürzer und viel schöner (erfordert mind. Release 7.40).

Und dann vielleicht noch über einen anderen Namen für das Feld nachdenken, da COLOR ein ABAP-Schlüsselwort ist. ABAP erlaubt sowas zwar, aber Schlüsselwörter als Feldnamen zu verwenden, kann tückisch sein. Oder Du verzichtest gleich ganz auf das Feld und übergibst den VALUE direkt als Parameter an die ALV-Methode. Das lokale COLOR-Feld brauchst Du ja nur dafür; anschließend stiftet es ja keinen Nutzen mehr.
Ja hätte ich auch gern so gemacht, leider lässt das unser Release Stand nicht zu :/. Aber den Hinweis mit dem falschen Feldnamen nehme ich gerne mit, danke.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
2727
Views
Farbe im Tablecontrol
von dste » 29.08.2007 14:13 • Verfasst in Dialogprogrammierung
1
Antw.
1266
Views
Formulardruck in Farbe
von Fdrescher » 10.04.2006 10:57 • Verfasst in ABAP® Core
4
Antw.
403
Views
screen painter farbe ändern
von Micha_ela » 23.05.2023 15:22 • Verfasst in Dialogprogrammierung
2
Antw.
1317
Views
Farbe Edit Felder CL_GUI_ALV_GRID
von Pinguincommander » 07.06.2013 09:27 • Verfasst in ABAP® Core
4
Antw.
1264
Views
OLE2 Farbe und Schriftart unterschiedlich
von dkast » 05.02.2018 14:10 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140