Archivo
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
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