Colores Para Mejorar Apariencia ALV
-
Upload
gabriel-alejandro-arcia-rivas -
Category
Documents
-
view
4 -
download
0
Transcript of Colores Para Mejorar Apariencia ALV
![Page 1: Colores Para Mejorar Apariencia ALV](https://reader036.fdocuments.co/reader036/viewer/2022080223/55cf970d550346d0338f7d56/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.co/reader036/viewer/2022080223/55cf970d550346d0338f7d56/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.co/reader036/viewer/2022080223/55cf970d550346d0338f7d56/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.co/reader036/viewer/2022080223/55cf970d550346d0338f7d56/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.co/reader036/viewer/2022080223/55cf970d550346d0338f7d56/html5/thumbnails/5.jpg)
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.