Einzelne Zellen im ALV-Grid farblich gestalten

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

Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
servus an alle,

kann mir vielleicht einer von euch sagen, wie eine einzelne Zelle in einem ALV-Grid farblich gestaltet werden kann?
Wie man eine Spalte markiert habe ich schon rausgefunden. Aber wie man eine einzelne Zelle bei einer entsprechenden Bedinung (z.B. rot markiert wird, oder die Schrift rot dargestellt wird) das habe ich noch nicht rausgefunden. Kann mir bitte einer weiter helfen?

Ciao honeyjam

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


Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,
kommt auch darauf an, welche Art von ALV du verwendest.
Ein Beispiel:
* prüfen wenn das Feld 'ZCHAR10' nicht blank ist dann Farbe setzen
loop at ztab into tab where zchar10 ne space.

wa_colfields-fname = 'ZCHAR10'.
wa_colfields-color-col = col_negative.
wa_colfields-color-int = 1.
wa_colfields-color-inv = 0.
append wa_colfields to tab-it_colfields.
modify ztab from tab transporting it_colfields.

endloop.
Gruß
Wolfgang

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Wolfgang,

vielen Dank für die schnelle Antwort.

Ich wollte gerne das ganze in ALV-OM (Object-Model) realisieren.
Wie ich z.B. die Sortierung einzelner Spalten, oder das Zebrastreifenmuster bekomme weiß ich.

Wo es noch nicht funktioniert ist, dass ich eine bestimmte Spalte mit einer anderen Farbe mir anzeigen lassen kann.
Und - wie ich nur eine bestimmte Zelle farblich anders anzeigen lassen kann (wenn eine bestimmte Situation zutriff).

Hier das Coding dazu - ich muss eine entsprechene Methode aufrufen, wie ich eine Spalte bzw. eine einzelne Zelle farblich ändern kann...



*&---------------------------------------------------------------------*
*& Include Z_SK_ALV_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module INIT_ALV_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_alv_0100 OUTPUT.
IF r_cont IS INITIAL.
CREATE OBJECT r_cont
EXPORTING
* parent =
container_name = 'CC'
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
OTHERS = 1
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


*TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
* list_display = IF_SALV_C_BOOL_SAP=>FALSE
r_container = r_cont
* container_name =
IMPORTING
r_salv_table = r_alv
CHANGING
t_table = it_sflight
.
* CATCH cx_salv_msg .
*ENDTRY.

r_columns = r_alv->get_columns( ).
CALL METHOD r_columns->set_optimize
* EXPORTING
* VALUE = IF_SALV_C_BOOL_SAP~TRUE
.
r_function = r_alv->get_functions( ).
CALL METHOD r_function->set_all.


farbe-col = 2.
farbe-int = 1.

*... Spalten sortieren
r_sorts = r_alv->get_sorts( ).
TRY.
CALL METHOD r_sorts->add_sort
EXPORTING
columnname = 'FLDATE'
position = 1.
CALL METHOD r_sorts->add_sort
EXPORTING
columnname = 'CARRID'
position = 2.
CATCH cx_root.
ENDTRY.

r_column ?= r_columns->get_column( columnname = 'PLANETYPE' ).
CALL METHOD r_column->set_color
EXPORTING
value = farbe.

CALL METHOD r_alv->get_display_settings
RECEIVING
value = r_settings.

CALL METHOD r_settings->set_striped_pattern
EXPORTING
value = 'X'.
.
CALL METHOD r_settings->set_list_header
EXPORTING
value = 'Flüge'.





*... Grafikspalte
r_column ?= r_columns->get_column( columnname = 'IKONE' ).
r_column->set_icon( ).
call method r_columns->set_column_position
exporting
columnname = 'IKONE'
position = 1.

*CALL METHOD r_columns->set_short_text
*exporting
* value = 'buchbar'
* .

*TRY.
CALL METHOD r_columns->set_count_column
EXPORTING
value = 'ZAEHLER'
.
* CATCH cx_salv_data_error .
*ENDTRY.

*TRY.
CALL METHOD r_columns->set_color_column
EXPORTING
value = 'IT_COLOR'.
.
* CATCH cx_salv_data_error .
*ENDTRY.

r_alv->display( ).

ENDIF.


ENDMODULE. " INIT_ALV_0100 OUTPUT

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

vielleicht bringt dich der Link weiter:

http://help-abap.blogspot.com/2008/10/s ... olors.html

Gruß Wolfgang

Folgende Benutzer bedankten sich beim Autor wreichelt für den Beitrag:
honeyjam


Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Wolfgang,
vielen Dank!
Dein Link hat mir weiter geholfen :-)

Ciao honeyjam

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
servus nochmal,

ich bin ein Schritt bei meinem Problem weiter gekommen :-)
Ich habe ein Ausgabe-Unterprogramm. Dort überprüfe ich, ob der Inhalt der Spalte "Diff" und "Reichw" bestimmte Bedinungen erfüllen.
Wenn die Bedinungen erfüllt werden sollen die entsprechenden Zellen der Spalte "Diff" oder "Reichw" farblich gekennzeichnet werden.
Er handelt die Bedingungen richtig ab. Das habe ich auch im Debugger gesehen.

Was er nicht macht, ist dass er die einzelnen Zellen farblich markiert.

Hat einer eine Idee, warum es nicht funktioniert (Das Problem muss eigentlich an dem Functionsbaustein REUSE_ALV_GRID_DISPLAY) liegen - anders kann ich mir das nicht erklären:

Hier das Coding für mein Unterprogramm und das Coding-Abschnitt für die Funktion CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

CODING - AUSGABE-UNTERPROGRAMM:

*&---------------------------------------------------------------------*
*& Form AUSGABE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LC_VA_REPID text
* -->P_LC_VA_STATUS text
* -->P_LC_VA_USERCOMM text
* -->P_LC_WA_LAYOUT text
* -->P_LC_TB_SORTINFO text
* -->P_LC_VA_SAVE text
* -->P_CV_WA_DISVARIANT text
* -->P_LC_TB_FIELDCAT text
* -->P_CR_TB_GESAMT_DESTROY text
*----------------------------------------------------------------------*
FORM ausgabe CHANGING p_lc_va_repid TYPE ty_va_repid
p_lc_va_status TYPE slis_formname
p_lc_va_usercomm TYPE slis_formname
p_lc_wa_layout TYPE slis_layout_alv
p_lc_tb_sortinfo TYPE slis_t_sortinfo_alv
p_lc_va_save TYPE ty_va_flag
p_cv_wa_disvariant TYPE ty_wa_disvariant
p_lc_tb_fieldcat TYPE slis_t_fieldcat_alv
p_cr_tb_gesamt_destroy TYPE ty_tb_gesamt_destroy.


DATA: ls_fieldcat LIKE LINE OF p_lc_tb_fieldcat
, col TYPE i
, wa_color TYPE lvc_s_scol
, lt_color TYPE lvc_t_scol

, wa_gesamt_destroy LIKE LINE OF p_cr_tb_gesamt_destroy.
.

TYPES: color TYPE slis_t_specialcol_alv.

FIELD-SYMBOLS: <l_ref> TYPE ANY
, <l_inh> TYPE ANY
, <l_ref_color> TYPE slis_t_specialcol_alv
, <l_gesamt_destroy> TYPE ty_wa_gesamt_destroy
.

LOOP AT p_cr_tb_gesamt_destroy ASSIGNING <l_gesamt_destroy>.
CLEAR: wa_color
, lt_color[]
.
zeile = zeile + 1.
CLEAR spalte.
LOOP AT p_lc_tb_fieldcat INTO ls_fieldcat.
spalte = spalte + 1.
ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <l_gesamt_destroy> TO <l_inh>.
IF ls_fieldcat-fieldname = 'DIFFE'.
IF <l_inh> < 0.
wa_color-fname = 'DIFFE'.
wa_color-color-col = 3.
APPEND wa_color TO <l_gesamt_destroy>-color.
CLEAR wa_color.
ENDIF.
IF <l_inh> = 0.
wa_color-fname = 'DIFFE'.
wa_color-color-col = 6.
APPEND wa_color TO <l_gesamt_destroy>-color.
CLEAR wa_color.
ENDIF.

ENDIF.
IF ls_fieldcat-fieldname = 'REICHWT'.
IF <l_inh> < 3.
wa_color-fname = 'REICHWT'.
wa_color-color-col = 6.
IF <l_inh> < 1.
wa_color-color-col = 3.
ENDIF.
APPEND wa_color TO <l_gesamt_destroy>-color.
CLEAR wa_color.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.

ENDFORM. " AUSGABE


___________________________________________________________________________________________________________________


CODING - CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lc_va_repid
i_callback_pf_status_set = lc_va_status
i_callback_user_command = lc_va_usercomm
is_layout = lc_wa_layout
it_fieldcat = lc_tb_fieldcat
it_sort = lc_tb_sortinfo
i_save = lc_va_save
is_variant = cv_wa_disvariant
TABLES
t_outtab = cr_tb_gesamt_destroy
EXCEPTIONS
program_error = 1
OTHERS = 2.

CHECK sy-subrc <> 0
OR sy-subrc = 0.


___________________________________________________________________________________________________________________


Ciao honeyjam
Zuletzt geändert von honeyjam am 21.02.2011 16:40, insgesamt 1-mal geändert.

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Hi ,

ohne mir das coding genau anzuschauen, fällt mir als erstes auf, das Du über die Tabelle "p_cr_tb_gesamt_sonata" loopst, im ALV aber
"cr_tb_gesamt_sonata" mitgibst. Kann es sein, das Deine Farbzuweisungen in der falschen Tabelle landen?.

ciao

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Prego,
nein - die Farbzuweisungen sind in der richtigen Farbtabelle.
Ciao

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Hast Du in der Layout-Struktur auch bekannt gegeben, welche Spalte die Farbinformationen enthält?

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von manage (ForumUser / 1 / 0 / 0 ) »
Ich habe eine eigene Z_ALV Klasse ->vererbt und zusätzliche Methoden eingebaut,
Setzen von Styles auf Zellen ebene, anschliessend die Anzeige aktuallisieren.

Ist zwar eine recht heftige Lösung, aber Du bist frei vom Standard ;-)
Ich musste wie man im Coding erkennt musste ich auch Zellen "Mergen" und 2 Header Zeilen implementieren.

METHOD z_set_style.
I_HDR_ROW TYPE I
I_RUNSTATUS TYPE CHAR3 Feld der Laenge 3 Bytes


INCLUDE <cl_alv_control>.

TYPES: BEGIN OF data_style,
col_pos TYPE lvc_colpos,
row_pos TYPE lvc_rowpos,
col_val TYPE lvc_value,
style TYPE lvc_style,
data_idx TYPE int4,
index TYPE int4,
mergevert TYPE int4,
END OF data_style.

*
DATA: lt_data_style TYPE TABLE OF data_style.
DATA: ls_data_style LIKE LINE OF lt_data_style.
DATA: lf_found TYPE c.
DATA: lf_row TYPE lvc_rowpos.
DATA: lf_style TYPE lvc_style.
*
DATA: lt_data TYPE lvc_t_data.
DATA: ls_data TYPE lvc_s_data.
DATA: ls_hdr TYPE lvc_s_data.
*

***************
* Init
CLEAR ls_data.
CLEAR lt_data_style.

* Vorlage
LOOP AT mt_data INTO ls_data.
***************
* Datenzeilen
IF ls_data-row_pos GT i_hdr_row AND
ls_data-col_pos GT 0.
* Merge von vertikalen und
* setzen von Farben
IF ls_data-col_pos EQ 1.
CASE i_runstatus.
WHEN 'MOD' OR 'CRT'.
IF lf_style = alv_style_color_normal.
lf_style = alv_style_color_inv_normal.
ELSE.
lf_style = alv_style_color_normal.
ENDIF.
WHEN OTHERS.
IF lf_style = alv_style_color_positive.
lf_style = alv_style_color_inv_positive.
ELSE.
lf_style = alv_style_color_positive.
ENDIF.
ENDCASE.
ENDIF.

IF ls_data-col_pos LE 2. " nur die ersten beiden zusammenfassen
CLEAR lf_found.
LOOP AT lt_data_style INTO ls_data_style
WHERE col_pos = ls_data-col_pos.
IF ls_data_style-col_val EQ ls_data-value.
lf_row = ls_data_style-row_pos + ls_data_style-mergevert + 1.
IF ls_data-row_pos = lf_row.
lf_found = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.

IF lf_found IS INITIAL.
APPEND ls_data TO lt_data.
CLEAR ls_data_style.
ls_data_style-data_idx = sy-tabix. " Daten Index
ls_data_style-col_pos = ls_data-col_pos.
ls_data_style-row_pos = ls_data-row_pos.
ls_data_style-col_val = ls_data-value.
ls_data_style-style = lf_style.
ls_data_style-mergevert = 0.
APPEND ls_data_style TO lt_data_style.
ls_data_style-index = sy-tabix. " aktueller Style
ELSE.
ls_data-style = ls_data_style-style.
ls_data-value = ''.
APPEND ls_data TO lt_data.
ADD 1 TO ls_data_style-mergevert. " Zähler hoch setzen
ENDIF.
* update Style.
MODIFY lt_data_style FROM ls_data_style INDEX ls_data_style-index.
ELSE.
* ZEBRA
IF ls_data-style EQ alv_style_color_normal OR
ls_data-style EQ alv_style_color_inv_normal OR
ls_data-style EQ alv_style_color_positive OR
ls_data-style EQ alv_style_color_inv_positive OR
ls_data-style IS INITIAL.
ls_data-style = lf_style.
ENDIF.
APPEND ls_data TO lt_data.
ENDIF.
* Headr
ELSE.
APPEND ls_data TO lt_data.
ENDIF.

ENDLOOP.
***************
* Übertagen der Merge-Werte
LOOP AT lt_data_style INTO ls_data_style
WHERE mergevert GT 0.
READ TABLE lt_data INTO ls_data INDEX ls_data_style-data_idx.
ls_data-mergevert = ls_data_style-mergevert.
ls_data-style = ls_data_style-style.
MODIFY lt_data FROM ls_data INDEX ls_data_style-data_idx.
ENDLOOP.
mt_data[] = lt_data[].

ENDMETHOD.

Daten aktuallisieren
method Z_DISPLAY.

* Jetzt noch übertragen der geänderten Daten
CALL METHOD me->set_data_table
CHANGING
data_table = mt_data[].
CALL METHOD set_auto_redraw
EXPORTING
enable = 1.


endmethod.

Re: Einzelne Zellen im ALV-Grid farblich gestalten

Beitrag von wolli (ForumUser / 80 / 3 / 1 ) »
Hallo "manage"!
Ich habe diese Z_ALV-Klasse ebenfalls implementiert.
Funkioniert auch bis auf ein Problem:
Wenn mehr als 150 Zeilen angezeigt werden sollen, hört der ALV einfach auf, die Daten werden nicht nachgelesen.
Die Ursache habe ich schon raus:
Im "ALV-Puffer" werden nur 1365 Zeilen für MT_DATA gespeichert.
Ich habe beispielsweise 160 Zeilen interne Tabelle * 9 Spalten = 1440 Zeilen in ALV->MT_DATA.
Beim Übergeben der internen Tabelle werden nur 1365 Zeilen in die MT_DATA geschrieben, sind also von meiner internen Tabelle 151 Zeilen und von Zeile 152 sind's 2/3. Die restlichen Spalten von Zeile 152 werden als "...0000000152" angezeigt.

Wie bringe ich jetzt den Z_ALV dazu, beim Scrollen die Daten nachzulesen, wie beim Standard-ALV?

LG Ramona

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3676
Views
ALV GRID einzelne Zellen ausblenden
von ek53 » 06.04.2017 15:41 • Verfasst in ABAP® für Anfänger
3
Antw.
1866
Views
ALV Grid - einzelne Zellen editierbar machen
von STDIN » 26.01.2021 09:19 • Verfasst in ABAP® für Anfänger
3
Antw.
2474
Views
Tooltip für einzelne Zellen
von MiG » 12.07.2005 09:49 • Verfasst in ABAP Objects®
5
Antw.
6381
Views
Im Table Control einzelne Zellen eingabebereit machen
von ring » 14.11.2007 17:10 • Verfasst in Dialogprogrammierung
8
Antw.
4115
Views
Zellen auf Alv grid farbig.
von Chrisp83 » 23.10.2007 11:48 • Verfasst in ABAP® für Anfänger

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.