Hola, lo que quiera saber es si se puede colorear una celda o varias celdas independientes con colores.
No quiero colorear toda la columna, lo que necesito es colorear unas celdas determinadas que cumplen una condición.
Muchas gracias de antemano.
Te copio un resumen de como hacerlo.
BEGIN OF i_list,
campo1,
campo2,
campo3,
observaciones(40),
COLOR TYPE SLIS_T_SPECIALCOL_ALV, "estructura para el color
END OF i_list_pos.
*-- Luego pones lo siguiente antes de la función ALV.
layout-coltab_fieldname = 'COLOR'.
*-- Luego defines el color en particular a mostrar:
DATA: v_alv_color TYPE slis_specialcol_alv.
*-- Le damos Color al campo que queremos.
CLEAR: v_alv_color, v_alv_color[].
v_alv_color-fieldname = 'OBSERVACIONES'.
v_alv_color-color-col = 6.
v_alv_color-color-int = 0.
* v_alv_color-color-inv = '1'.
APPEND v_alv_color.
gt_pos-color[] = v_alv_color[].
Todo esto lo tengo probado para el alv jerarquico 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'.
Un saludo.
Un nuevo ejemplo para colorear celdas individualmente en un ALV_GRID...
REPORT zcolor_en_celdas.
* Type Pools *
TYPE-POOLS: slis.
* Tabla interna de prueba (se agrega el campo CELLCOLORS.
DATA: BEGIN OF r_alv,
vbeln TYPE vbeln,
posnr TYPE posnr,
cellcolors TYPE lvc_t_scol,
END OF r_alv.
DATA: i_alv LIKE TABLE OF r_alv.
DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
r_layout TYPE slis_layout_alv.
INITIALIZATION.
* TRAIGO ALGUNOS DATOS
REFRESH i_alv.
SELECT vbeln posnr
FROM vbap
INTO CORRESPONDING FIELDS OF TABLE i_alv
WHERE vbeln = '0005101265'.
SORT i_alv BY posnr.
* CARGO FIELDCAT.
REFRESH i_fieldcat.
PERFORM f_init_fieldcat TABLES i_fieldcat.
* LAYOUT, AGREGO COLORES DEPENDIENDO DE LA CELDA
CLEAR r_layout.
PERFORM f_init_layout CHANGING r_layout.
* ALV GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'F_USER_COMMAND_01'
is_layout = r_layout
it_fieldcat = i_fieldcat[]
TABLES
t_outtab = i_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
EXIT.
ENDIF.
*&---------------------------------------------------------------------*
*& Form f_init_fieldcat
*&---------------------------------------------------------------------*
FORM f_init_fieldcat TABLES ptc_fieldcat TYPE slis_t_fieldcat_alv.
* LOCAL WORKAREA AND VARIABLE
DATA: r_fieldcat TYPE slis_fieldcat_alv,
l_pos TYPE i VALUE 0.
CLEAR r_fieldcat.
l_pos = l_pos + 1.
r_fieldcat-col_pos = l_pos.
r_fieldcat-fieldname = 'VBELN'. "VBELN
r_fieldcat-tabname = 'I_ALV'.
r_fieldcat-seltext_l = 'VBELN'.
APPEND r_fieldcat TO ptc_fieldcat.
CLEAR r_fieldcat.
l_pos = l_pos + 1.
r_fieldcat-col_pos = l_pos.
r_fieldcat-fieldname = 'POSNR'. "POSNR
r_fieldcat-tabname = 'I_ALV'.
r_fieldcat-seltext_l = 'POSNR'.
APPEND r_fieldcat TO ptc_fieldcat.
ENDFORM. " f_init_fieldcat
*&---------------------------------------------------------------------*
*& Form f_init_layout
*&---------------------------------------------------------------------*
FORM f_init_layout CHANGING playout TYPE slis_layout_alv.
* Variables
DATA l_color TYPE lvc_s_scol.
* Field-Symbols
FIELD-SYMBOLS <fs_report> LIKE LINE OF i_alv.
* ASIGNAMOS EL CAMPO CELLCOLORS AL LAYOUT
playout-coltab_fieldname = 'CELLCOLORS'.
UNASSIGN <fs_report>.
LOOP AT i_alv ASSIGNING <fs_report>.
CASE <fs_report>-posnr.
WHEN '000011'.
l_color-fname = 'POSNR' .
l_color-color-col = '6'. "ROJO
l_color-color-int = '1'. "INTENSIDAD
l_color-color-inv = '0'. "INVERSO
APPEND l_color TO <fs_report>-cellcolors.
WHEN '000013'.
l_color-fname = 'POSNR' .
l_color-color-col = '3'. "AMARILLO
l_color-color-int = '1'.
l_color-color-inv = '0'.
APPEND l_color TO <fs_report>-cellcolors.
WHEN OTHERS.
l_color-fname = 'POSNR' .
l_color-color-col = '1'. "AZUL
l_color-color-int = '1'.
l_color-color-inv = '0'.
APPEND l_color TO <fs_report>-cellcolors.
ENDCASE.
ENDLOOP.
ENDFORM. " f_init_layout