Colores Para Mejorar Apariencia ALV

5
Colores en ALV Introducción A veces toca colorear las filas o columnas de un listado ALV. Casi todo el mundo tiene su propio template para estas cosas, pero es difícil acordarse de la codificación de los colores o en qué campos concretos se tenían que colocar dentro de la definición. Hoy pegamos repaso y acompañamos además con una bonita macro para no volver a olvidarse jamás. Asumo que ya has hecho alguna y que los nombres de las cosas te suenan familiares. La codificación de color Las ALV, y no sé si el resto de lugares de R/3, codifican el color con un código char(4) con la siguiente estructura: Cxyz Donde C es siempre “C”, x€[0,7] es el código de color, y es INTENSIFIED, z es INVERSE. Siempre cumpliendo y,z €[0,1] pero sabiendo que cuando y = 1, da igual lo que valga z. En este gráfico horrible podemos ver como se ven: Observación maliciosa: no sé quien dejó establecido que los colores corporativos siempre son alguna combinación de azules tenues. Obsérvese que en R/3 de 8 (ocho) colores básicos disponibles, 3 (tres) son azules. Color en líneas

Transcript of Colores Para Mejorar Apariencia ALV

Page 1: Colores Para Mejorar Apariencia ALV

Colores en ALV

IntroducciónA veces toca colorear las filas o columnas de un listado ALV. Casi todo el mundo

tiene su propio template para estas cosas, pero es difícil acordarse de la

codificación de los colores o en qué campos concretos se tenían que colocar

dentro de la definición. Hoy pegamos repaso y acompañamos además con una

bonita macro para no volver a olvidarse jamás. Asumo que ya has hecho alguna y

que los nombres de las cosas te suenan familiares.

La codificación de colorLas ALV, y no sé si el resto de lugares de R/3, codifican el color con un código

char(4) con la siguiente estructura:

Cxyz

Donde C es siempre “C”, x€[0,7] es el código de color, y es INTENSIFIED, z es

INVERSE. Siempre cumpliendo y,z €[0,1] pero sabiendo que cuando y = 1, da

igual lo que valga z. En este gráfico horrible podemos ver como se ven:

 

Observación maliciosa: no sé quien dejó establecido que los colores corporativos siempre son alguna combinación de azules tenues. Obsérvese que en R/3 de 8 (ocho) colores básicos disponibles, 3 (tres) son azules.

Color en líneas

Para darle color a una línea tenemos que definir un campo char(4) en nuestra tabla

interna que contenga, para cada fila, su código de color como el que ya hemos

visto.

Posteriormente, antes de llamar a la ALV tenemos que especificar cuál el campo

de color en la definición de layout. Para eso nada como un ejemplo de código:

Page 2: Colores Para Mejorar Apariencia ALV

data: begin of it_tablita occurs 0,

caja(1),

semaforo(1),

gjahr like bkpf-gjahr,

blart like bkpf-blart,

budat like bkpf-budat,

belnr like bkpf-belnr,

dmbtr like bseg-dmbtr,

waers like bkpf-waers,

COLORCILLO(4),

end of it_tablita.

loop at it_tablita.

it_tablita_colorcillo = 'C211'. "por ejemplo

modify it_tablita.

endloop.

*[...continuamos hasta la definición de ALV...]

is_layout-info_fieldname = 'COLORCILLO'. "literales en mayúsculas, SIEMPRE!

Color en columnas

Es más rápido pues se define en el catálogo de campos, clave emphasize. Por

ejemplo:

it_fieldcat-emphasize = 'C600'.

Color en celdas

Esto SÍ es un rollo. Tenemos que meter un campo en nuestra tabla interna, como

en el caso del color en filas. Pero ahora ese campo contendrá una tabla del

tipo lvc_t_scol. Esta tabla debe contener información sobre el campo (o campos)

que debe colorear y el color que le (les) corresponde. Y por último, especificarlo en

el layout:

*Añadimos la tabla CT como campo de la tabla interna

data: begin of it_tablita occurs 0,

caja(1),

semaforo(1),

gjahr like bkpf-gjahr,

blart like bkpf-blart,

Page 3: Colores Para Mejorar Apariencia ALV

budat like bkpf-budat,

belnr like bkpf-belnr,

dmbtr like bseg-dmbtr,

waers like bkpf-waers,

COLORCILLO(4),

CT type lvc_t_scol,

end of it_tablita.

*cs es la estructura de la tabla de colores

Data: cs type lvc_s_scol,

*cta es la tabla donde meteremos cs y luego se la pasamos a CT

cta type lvc_t_scol.

*cargamos el valor. suponemos un loop

LOOP AT IT_TABLITA WHERE BLART NE SPACE.

refresh cta.

clear cs.

* coloreamos BLART, pero podríamos hacer con los otros

cs-fname = 'BLART'.

cs-color-col = 4.

cs-color-int = 0.

cs-color-inv = 0.

cs-nokeycol = 'X'.

append cs to cta.

append lines of cta to it_tablita-ct.

clear cs.

modify it_tablita transporting ct.

endloop.

*[...continuamos hasta la definición de ALV...]

*lo decimos en el layout

is_layout-coltab_fieldname = 'CT'.

¿Y cómo me acuerdo?De todos modos, como soy muy majo, os invito a una macro para no tener que

acordarse de los códigos de color. El abap siguiente se explica solo:

Page 4: Colores Para Mejorar Apariencia ALV

DEFINE vc_color.

* MACRO para convertir color humano en código color Cxyz

* creado por alberto viñuela miranda en 2008, http://cranf.com

* uso: vc_color campo ´texto_en_español´

* en EMPHASIZE o en el campo COLOR usamos char(4)

* con la forma Cxyz, x€[0,7]; y,z€[0,1] / y+z<2

* valores de x:

* 0 COL_BACKGROUND fondo (gris)

* 1 COL_HEADING azul oscuro

* 2 COL_NORMAL azul claro

* 3 COL_TOTAL amarillo

* 4 COL_KEY azul

* 5 COL_POSITIVE verde

* 6 COL_NEGATIVE rojo

* 7 COL_GROUP naranja

* valores de y: 0 = normal, 1 = intenso

* valores de z: 0 = xy afecta fondo, 1 = x invertido

* OJO: ls_fieldcat-key = 'X' invalida lo anterior

&1 = 'C000'. "gris fondo por definición

find 'azul' in &2 ignoring case.

if sy-subrc = 0.

&1+1(1) = '4'.

find 'claro' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '2'. endif.

find 'oscuro' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '1'. endif.

endif.

find 'amar' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '3'. endif.

find 'verd' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '5'. endif.

find 'rojo' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '6'. endif.

find 'nara' in &2 ignoring case.

if sy-subrc = 0. &1+1(1) = '7'. endif.

find 'ntens' in &2 ignoring case.

if sy-subrc = 0. &1+2(2) = '10'. endif.

find 'nver' in &2 ignoring case.

if sy-subrc = 0. &1+2(2) = '01'. endif.

Page 5: Colores Para Mejorar Apariencia ALV

END-OF-DEFINITION.

Y he aquí unos ejemplos:

vc_color it_fieldcat-emphasize 'azul oscuro'.

vc_color it_fieldcat-emphasize 'azul claro intenso'.

vc_color it_fieldcat-emphasize 'naranja invertido'.

Shameless self-promotionSi necesitas colores para cualquier otra cosa que no sea R/3, recomiendo color

synthAxis.