lunedì 30 aprile 2018

ALV colorare singole celle.

Recentemente ho avuto la necessità di dover evidenziare, con un colore di sfondo rosso, alcune celle di un report ALV già esistente.

La gestione dei colori nelle singole celle viene trattata in modo specifico con la programmazione ad oggetti delle liste ALV.

Nel mio caso si trattava però di una lista ALV con programmazione classica ma, tutto sommato, anche in questo caso è risultato essere abbastanza semplice.

Questi i passi da seguire:

Aggiungere, nella definizione della tabella di output, il seguente campo:

         cell_colour TYPE lvc_t_scol, "Cell color

LVC_T_SCOL è la definizione di una tabella


che ha questa struttura:


FNAME è la variabile che deve contenere il nome del campo della cella dove si vuole gestire la colorazione.

LVC_S_COLO è una struttura che contiene i seguenti campi:


questo l'utilizzo dei campi:

COL : selezione del colore da utilizzare (1-7)
INT : intensità (0 = normale ; 1 = intenso)
INV : inverso (sfondo)

prima di appendere alla tabella di output il record si devono impostare i valori di gestione del colore.

Per esempio: nel caso di una riga dove voglio avere una cella con lo sfondo rosso e la cella con il codice materiale il cui colore carattere voglio sia rosso, questo è il codice da utilizzare:

    ls_cellcolour-fname = 'CK_IP'.
    ls_cellcolour-color-col = '6'.              "rosso
    ls_cellcolour-color-int = '1'.              "intenso
    ls_cellcolour-color-inv = '0'.              "colore sfondo
    APPEND ls_cellcolour TO tb_out-cell_colour.

    ls_cellcolour-fname = 'MATNR'.
    ls_cellcolour-color-col = '6'.              "rosso
    ls_cellcolour-color-int = '0'.              "intenso
    ls_cellcolour-color-inv = '1'.              "colore carattere
    APPEND ls_cellcolour TO tb_out-cell_colour.

prima di effettuare la chiamata per la visualizzazione della tabella ALV si deve impostare il nome del campo per la gestione della formattazione colori:

  i_layout-coltab_fieldname = 'CELL_COLOUR'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = report_id
      i_callback_user_command = 'F01_EVENT_USER_COMMAND'
      it_fieldcat             = t_fcat
      is_layout               = i_layout
      i_grid_title            = i_grid_title
      i_save                  = 'A'
    TABLES
      t_outtab                = tb_out
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

esempio di come viene:


Cercando meglio sul web ho trovato anche questo post dove c'è un ABAP per visualizzare la griglia con tutte le combinazione colori, questo il link ALV color palette - example based on class CL_SALV_TABLE

questa la griglia con le combinazioni:


Stranamente ci sono alcune combinazioni che, anche se differenti nell'attributo INV, risultano perfettamente uguali:


...non ho capito come mai.

Nessun commento:

Posta un commento