Ir al contenido

Colorear celda de ALV

Respuestas
2
Visitas
23
Iniciado por
abapito
Fecha
22 May 2008, 09:46
Tema anterior - Siguiente tema

abapito

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.


Nuria

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.

oscar

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