Archivo

Posts Tagged ‘color’

Color en celda de ALV GRID

Caso: Se desea ponerle color a una celda de un ALV.

Solución: Para pintar una celda, podemos utilizar, en el fieldcat del ALV la estructura lvc_t_scol, por ejemplo (sólo pongo lo importante):

TYPES: BEGIN OF ty_alv.
TYPES: name1      TYPE name1,
       cellcolors TYPE lvc_t_scol,
TYPES: END OF ty_alv.
TYPES: tty_alv TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv TYPE ty_alv OCCURS 0 WITH HEADER LINE,
      gs_alv TYPE LINE OF tty_alv.

FORM layout_alv USING    ls_layout TYPE slis_layout_alv.

  DATA l_color               TYPE lvc_s_scol.

  ls_layout-zebra             = ‘X’.
  ls_layout-colwidth_optimize = ‘X’.

  FIELD-SYMBOLS <fs_report>  LIKE LINE OF gt_alv.
  ls_layout-coltab_fieldname  = ‘CELLCOLORS’.

  UNASSIGN <fs_report>.
  LOOP AT GT_alv ASSIGNING <fs_report>.
    CASE <fs_report>-name1.
      WHEN ‘PEDRO’.
        l_color-fname = ‘NAME1’ .
        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 ‘JUAN’.
        l_color-fname = ‘NAME1’ .

        l_color-color-col = ‘3’. «AMARILLO
        l_color-color-int = ‘1’.
        l_color-color-inv = ‘0’.
        APPEND l_color TO <fs_report>-CELLCOLORS.
    ENDCASE.
  ENDLOOP.
ENDFORM.                    » layout_alv

Anuncio publicitario
Categorías: ABAP/4 Etiquetas: ,

Color en columna de ALV

Caso: Se desea ponerle color a una columna de un ALV.

Solución: Para pintar una columna, podemos utilizar, en el fieldcat del ALV el campo EMPHASIZE, por ejemplo:

lw_fieldcat-emphasize = ‘C500’.

En el siguiente programa podemos listar las distintas posibilidades de color que hay.

REPORT  zprueba_color_alv.
 
TYPE-POOLS: slis.
 
* Tabla interna de prueba (se agrega el campo CELLCOLORS.
TYPES: BEGIN OF tty_salida,
        cod_color             TYPE char4,
        cellcolors            TYPE lvc_t_scol,
      END OF   tty_salida.
 
TYPES: ty_salida   TYPE STANDARD TABLE OF tty_salida.
 
DATA:  t_salida       TYPE ty_salida,
       wa_salida      TYPE LINE OF ty_salida,
       i_fieldcat     TYPE slis_t_fieldcat_alv,
       r_layout       TYPE slis_layout_alv,
       lv_color       TYPE numc1,
       lv_intensidad  TYPE numc2,
       lv_contador    TYPE numc3,
       lv_i           TYPE c,
       lv_j           TYPE c,
       lv_k           TYPE c.
 
INITIALIZATION.
* Agrego los códigos de color
  lv_color      = '1'.
  WHILE ( lv_color <= 7 ).
    lv_intensidad = '00'.
    WHILE ( lv_intensidad < 20 ).
      CONCATENATE 'C' lv_color lv_intensidad INTO wa_salida-cod_color.
      APPEND wa_salida TO t_salida.
      ADD 1 TO lv_intensidad.
 
    ENDWHILE.
    ADD 1 TO lv_color.
  ENDWHILE.
 
* 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                = t_salida
    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.
 
  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     = 'COD_COLOR'.
  r_fieldcat-tabname       = 'T_SALIDA'.
  r_fieldcat-seltext_l     = 'Material'.
  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 t_salida.
 
* ASIGNAMOS EL CAMPO CELLCOLORS AL LAYOUT
  playout-coltab_fieldname  = 'CELLCOLORS'.
 
  UNASSIGN <fs_report>.
 
  LOOP AT t_salida ASSIGNING <fs_report>.
    lv_i = <fs_report>-cod_color+1(1).
    lv_j = <fs_report>-cod_color+2(1).
    lv_k = <fs_report>-cod_color+3(1).
 
    l_color-fname     = 'COD_COLOR' .
    l_color-color-col = lv_i. "COLOR
    l_color-color-int = lv_j. "INTENSIDAD
    l_color-color-inv = lv_k. "INVERSO
    APPEND l_color TO <fs_report>-cellcolors.
 
  ENDLOOP.
ENDFORM.                    " f_init_layout