SAP Jobsuche bei DV-Treff
gulange
  • gulange
  • SAP Forum - User Thema Starter
vor 6 Jahre
Hallöchen!

mein ALV ist eingabebereit und hat seine Custom-Buttons.

Einer ist CHECK, einer COPY.

COPY ist zum Start deaktiviert und erst nach erfolgtem CHECK wird check aktiv.

Was ich noch gerne hätte, wäre dass bei einem CHECK die Felder rot werden, die den Check nicht bestanden haben.

Ich befinde mich hier:

METHOD handle_user_command.

CASE e_ucomm.

WHEN 'CPY'.

PERFORM save.

WHEN 'CHK'.

PERFORM check TABLES .

CALL METHOD grid2->set_toolbar_interactive.

ENDCASE.

ENDMETHOD. "handle_user_command

Wie könnte man das hinbekommen?

Schöne Wochenhalbzeit!

Förderer

Felix L.
vor 6 Jahre
Hallo gulange,

ich habe kein fertig getesteten Code für dich, aber zumindest das generelle Vorgehen.

Es funktioniert mit der cl_salv_table Klasse im Grunde so, dass du eine weitere Spalte hast, die die Farbinformationen als Tabelle enthält enthält. Pro Zelle kann diese Farbtabelle einen Eintrag enthalten.

Die Struktur der Ausgabetabelle (hier zB für Tabelle vbak) sollte also so etwas sein wie:

TYPES: BEGIN OF s_ausgabe.
       INCLUDE TYPE vbak. " Beispiel-Sturktur von Tabelle VBAK
TYPES: t_color   TYPE lvc_t_scol,
       END OF s_ausgabe.
DATA: wa_ausgabe TYPE s_ausgabe,
      lt_ausgabe TYPE STANDARD TABLE OF s_ausgabe,
      lo_cols_tab TYPE REF TO cl_salv_columns_table.
lo_cols_tab = co_alv->get_columns( ). " co_alv sollte dein ALV-Objekt sein.

Die Struktur lvc_t_scol enhält dann einmal das Feld "fname", was der Spaltenname ist, der die eingefärbte Zelle enthält. Weiterhin hat die Struktur ein Feld "color", was wiederum eine Struktur vom Type "LVC_S_COLO" ist. Hier kann die eigentliche Farbe festgelegt werden.

Wenn du also die das Erstellungsdatum in der 4. Zeile einfärben willst, musst du vor dem Anzeigen in etwa so etwas machen:


DATA: lv_cnt TYPE i,
      lt_color TYPE lvc_t_scol, " Farbtabelle für Zeile
      wa_color TYPE lvc_s_scol. " Farbeintrag für Zelle
LOOP AT lt_ausgabe INTO wa_ausgabe.
  lv_cnt = lv_cnt + 1.
  CASE lv_cnt.
    WHEN 4. " Zeilennummer
      wa_color-fname = 'ERDAT'. " Spaltenname (falls INITIAL, dann die ganze Zeile)
      wa_color-color-col = '6'. " 6 sollte Rot sein
      wa_color-color-int = 0. " Intensified = 0
      wa_color-color-inv = 0. " Inverse = 0
      APPEND wa_color TO lt_color.
      CLEAR wa_color.
  ENDCASE.
  wa_ausgabe-t_color = lt_color.
  MODIFY lt_ausgabe FROM wa_ausgabe.
  CLEAR lt_color.
ENDLOOP.

Am Ende muss man den ALV-Spalten noch sagen, welche Spalte als Farbtabelle verwendet werden soll (also nicht "ausgegeben" werden soll).


lo_cols_tab->set_color_column( 'T_COLOR' ).

Wie gesagt, der Code ist nicht getestet, sollte aber eine Idee geben, wie es gehen könnte.

Wenn du deinen ChECK laufen lässt, dann LOOPst du bestimmt sowieso über die Datentabelle. Dabei könnte man die Einfärbung (LOOP-Schleife im obigen Coding) elegant mit einbauen.

LG

Felix

gulange
  • gulange
  • SAP Forum - User Thema Starter
vor 6 Jahre
Danke für die Antwort.

Werder es bei Gelegenheit erst ausprobieren können, da ich leider cl_gui_alv_grid und nicht cl_salv_table verwende.

Gruß

Guido