Foro de programación ABAP
SAP / ABAP => Programación ABAP => Mensaje iniciado por: abapito en 22 de Mayo de 2008, 09:46:48 am
-
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