[ABAP] SALV-Table: Spalte als Schlüsselspalte darstellen und fixieren

TRY.
* Spalte 'MATNR' als Schlüsselspalte definieren    
    DATA(o_coltab) = CAST cl_salv_column_table( o_alv->get_columns( )->get_column( 'MATNR' ) ).
    o_coltab->set_key( abap_true ).
* Schlüsselspalten fixieren
    o_alv->get_columns( )->set_key_fixation( abap_true ).
  
  CATCH cx_root INTO DATA(e_text).
    MESSAGE e_text->get_text( ) TYPE 'I'.
ENDTRY.

[ABAP] SALV-Table: Nullwerte verbergen

* Variante 1: Für eine Spalte des Gitters 
DATA(o_col) = CAST cl_salv_column( o_alv->get_columns( )->get_column( 'MATNR' ) ).
o_col->set_zero( abap_false ).

* Variante 2: Für alle Spalten des Gitters: Nullwerte anzeigen/verstecken
LOOP AT o_alv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
  <c>-r_column->set_zero( abap_false ).
ENDLOOP.

[ABAP] SALV-Table – Zeilen/Zellen farbig anzeigen

Variante 1 (Zeilen farbig anzeigen)

TYPES: BEGIN OF ty_s_sflight,
         fldate    TYPE s_date,
         planetype TYPE s_planetye,
         seatsmax  TYPE s_seatsmax,
         seatsocc  TYPE s_seatsocc,
         color     TYPE lvc_t_scol, " Farbspalte
       END OF ty_s_sflight.

TYPES: ty_it_sflight TYPE STANDARD TABLE OF ty_s_sflight WITH DEFAULT KEY.

START-OF-SELECTION.

  TRY.
      DATA(it_sflight) = VALUE ty_it_sflight( ).

      SELECT FROM sflight
        FIELDS
             fldate,
             planetype,
             seatsmax,
             seatsocc
        INTO CORRESPONDING FIELDS OF TABLE @it_sflight.

      DATA: o_alv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING r_salv_table = o_alv
                              CHANGING  t_table      = it_sflight ).

* Farben in der Tabellen-Spalte 'COLOR' setzen
      LOOP AT it_sflight ASSIGNING FIELD-SYMBOL(<f>).
* Wenn >= 370 belegte Plätze in der Economy Class
        IF <f>-seatsocc >= 370.
* dann in der Spalte COLOR für jede Tabellen-Zeile (Row) eine Farbtabelle einfügen
          <f>-color = VALUE #( ( color-col = col_positive  " grün
                                 color-int = 0
                                 color-inv = 0
                               )
                             ).
        ENDIF.
      ENDLOOP.

* Namen der Farbspalte setzen
      o_alv->get_columns( )->set_color_column( 'COLOR' ).

* Grid anzeigen
      o_alv->display( ).
    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.

Variante 2 (einzelne Zellen farbig anzeigen)

TYPES: BEGIN OF ty_s_sflight,
         fldate    TYPE s_date,
         planetype TYPE s_planetye,
         seatsmax  TYPE s_seatsmax,
         seatsocc  TYPE s_seatsocc,
         color     TYPE lvc_t_scol, " Farbspalte
       END OF ty_s_sflight.

TYPES: ty_it_sflight TYPE STANDARD TABLE OF ty_s_sflight WITH DEFAULT KEY.

START-OF-SELECTION.

  TRY.
      DATA(it_sflight) = VALUE ty_it_sflight( ).

      SELECT FROM sflight
        FIELDS
             fldate,
             planetype,
             seatsmax,
             seatsocc
        INTO CORRESPONDING FIELDS OF TABLE @it_sflight.

      DATA: o_alv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING r_salv_table = o_alv
                              CHANGING  t_table      = it_sflight ).

* Farben in der Tabellen-Spalte 'COLOR' setzen
      LOOP AT it_sflight ASSIGNING FIELD-SYMBOL(<f>).
* Wenn >= 370 belegte Plätze in der Economy Class
        IF <f>-seatsocc >= 370.
* dann in der Spalte COLOR für jede einzelne Zelle (Cell) der Spalte SEATSOCC eine Farbtabelle einfügen
          <f>-color = VALUE #( ( fname     = 'SEATSOCC'
                                 color-col = col_positive  " grün
                                 color-int = 0
                                 color-inv = 0
                               )
                             ).
        ENDIF.
      ENDLOOP.

* Namen der Farbspalte setzen
      o_alv->get_columns( )->set_color_column( 'COLOR' ).

* Grid anzeigen
      o_alv->display( ).
    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.

Links

[ABAP] SALV-Table – technische Namen der Spalten anzeigen

Variante 1 (kurz)

DATA: o_salv TYPE REF TO cl_salv_table.

...

LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
  <c>-r_column->set_short_text( |{ <c>-r_column->get_columnname( ) }| ).
  <c>-r_column->set_medium_text( |{ <c>-r_column->get_columnname( ) }| ).
  <c>-r_column->set_long_text( |{ <c>-r_column->get_columnname( ) }| ).
ENDLOOP.

Variante 2 (RTTS, RTTI)

DATA: o_alv TYPE REF TO cl_salv_table.

...

* Datendescriptor für Tabellenzeile (z.B.: Struct "ls_spfli") holen
DATA: o_struct TYPE REF TO cl_abap_structdescr.
o_struct ?= cl_abap_typedescr=>describe_by_data( ls_spfli ).

DATA: o_comp_tab TYPE abap_component_tab.
o_comp_tab = o_struct->get_components( ).

* Spalten der SALV-Table holen
DATA(lo_columns) = o_salv->get_columns( ).
DATA: lv_col TYPE REF TO cl_salv_column.
            
LOOP AT o_comp_tab INTO DATA(ls_comp).
  lv_col ?= lo_columns->get_column( |{ ls_comp-name }| ).

* Spaltennamen auf Structnamen ändern
  lv_col->set_short_text( | { ls_comp-name } | ).
  lv_col->set_medium_text( | { ls_comp-name } | ).
  lv_col->set_long_text( | { ls_comp-name } | ).
ENDLOOP.