PDA

Ver la Versión Completa : Linea color ALV


Heran
05/09/07, 07:33:28
Hola, me han pedido colorear las lineas de un ALV dependiendo de una fecha. Si la fecha de cierre ya ha pasado en rojo y si esta por venir en verde.
Me pregunto si se podrá hacer. Y si se puede agradeceria alguna pista.

Gracias de antemano.

melerogalan
05/09/07, 08:02:56
Hola:
Primero te tienes que definir en la estructura que le pasas al ALV (en este ejempolo la llamaremos 'alv') un campo del tipo 'slis_t_specialcol_alv', es donde almacenaremos los colores del ALV, asi como los campos que queremos que nos ponga color(en este ejemplo lo llamaremos al campo 'color').
Yo te recomiendo que te hagas una subrutina y cada vez que rellenes un registro del alv la llames.

Subrutina(Esta echa para que ponga toda la linea de un color, si solo quieres unos determinados campos deberas de indicarlos en el campo 'fieldname' de la estrucutra 'slis_specialcol_alv' y añadir a la estrucutra donde tengas almacenado los colores en nuestro ejemplo alv-color, un registro por cada campo que metas):


form rellenar_colores.

* Cabecera de la tabla interna(alv-color) donde tenemos almacenados los colores
DATA local_color TYPE slis_specialcol_alv.

* Si la fecha es un valor le pones un color sino otro y asi lo que quiers, tambien lo puedes hacer con un case.
IF fecha EQ 'lo que sea 01'.
local_color-color-col = '1'.
ELSEIF fecha eq 'lo que sea 02'.
.
.
.
ENDIF.

* Es importante que añadas el registro a la tabla interna
APPEND local_color TO alv-color.
CLEAR local_color.

endform.

Espero que te sirva de ayuda. ;)

Heran
05/09/07, 12:54:25
He hecho todo tal y como dices, pero el ALV sigue igual.

darona
05/09/07, 15:14:28
En la tabla interna que muestras en el ALV debes crear un campo TYPE lvc_t_styl. En un campo definido de esta forma puedes modificar gran cantidad de características del mismo dándole valores a una serie de bits.

En la declaración del layout debes indicarle qué campo de la tabla interna marca el estilo de la línea a dibujar.
Ejemplo: it_layout1-stylefname = 'ASPECTO'.
Donde 'aspecto' es el nombre del campo de la tabla interna del tipo lvc_t...


Puedes crearte un form como el siguiente que pinte las celdas.

DATA: it_cells TYPE lvc_t_styl.
FORM pintar_celdas USING c TYPE tf605-coimeth.
DATA ls_cells1 TYPE lvc_s_styl.

REFRESH it_cells.
CLEAR: ls_cells1.

CASE c.
WHEN '11100'.
ls_cells1-style = '00000004'.
WHEN '11300'.
ls_cells1-style = '00000003'.
WHEN '11420'.
ls_cells1-style = '00000006'.
ENDCASE.
INSERT ls_cells1 INTO TABLE it_cells.
ENDFORM.

En este caso pinto las filas en función del método de consolidación.
Ya sólo queda pasarle los valores de la tabla it_cells al campo de nuestra tabla interna que se muestra en el ALV. Eso se hace de la siguiente manera:

LOOP AT ti_calculo.
PERFORM pintar_celdas USING ti_calculo-coimeth.
ti_calculo-aspecto[] = it_cells[].
MODIFY ti_calculo.
ENDLOOP.


Espero que te sirva de ayuda.

Saludo,
David.

melerogalan
07/09/07, 11:10:31
Le tienes que indicar en la estructura de la layout el nomrbe del campo donde ira almacenado el color, perdona por no decirtelo, :( .

it_layout-coltab_fieldname = 'COLOR'.

Espera que ahora te funcione.

Saludos :)