martes, 3 de octubre de 2006

Informes html en Velneo

En el foro de Velneo se ven muchas consultas acerca de cómo hacer informes complejos que muestren información de varias tablas, incluyendo fotos, textos largos que se partan por páginas, saltos de página controlados y multitud de cosas que con un informe tradicional de Velneo no se pueden hacer o si se pueden hacer es a base de "astucias".

Bién, yo siempre comento en esos hilos "Y por qué no haces un informe html?"

Veamos un ejemplo práctico y sencillo.

Supongamos que en una aplicación de gestión de clubes de campo tenemos un menú formulario con un selector de fecha, un casillero de secciones ( spa, gimnasio, piscina, bodega, etc... ), un casillero de instalaciones ( relax room, sun bed room, hydrobath, tenis1, tenis2, padel1, padel2, etc... ), un casillero con las horas del día en periodos de media hora, y otro casillero para mostrar el plannig ( ocupación de cada recurso por hora del día ).





La información de este planning se guarda en una sola tabla PLANNING, por ejemplo.

Al usuario de la aplicación le encanta este menú lleno de controles sincronizados que le muestra el planning de ocupación de sus instalaciones.

Le gusta tanto que pide "Ahora lo quiero imprimir".

Cómo hacemos un informe como este? O recurrimos a "astucias", tablas temporales en memoria que rellenamos para el caso, etc, o hacemos un informe html.

En este caso vamos a poner un hermoso botón "Imprimir" en el menú.

El botón ejecuta un proceso sin origen y accesible web que añade retorno url la dirección fGetWebAplicacion() + INFORME-WEB.PRO

El proceso INFORME-WEB monta el informe html en base a componentes html.

En el proceso necesitamos varios componentes html, veamos cuales:

1.- Un componente1 para inicializar la página con el IMPRESCINDIBLE doctype, la apertura del html, la apertura del head, los metas, el cierre del head, la apertura del body, y el inicio de una tabla 100% de ancho y alto que contrendrá el resto de la página.

2.- Un componente2 que muestra la fecha del plannig.

3.- Un componente3 que muestra la instalación.

4.- Un componente4 que muestra un tramo horario ( de 08:00 a 08:30, por ejemplo ).

5.- Un componente5 que muestra la ocupación ( cliente, motivo de la visita o servicio a prestar y empleado que lo realizará, por ejemplo ).

6.- Un componente6 para saltar a la siguiente fila de la tabla general.

7.- Un componente7 que cierre la tabla, el body y el html por este orden.

Ahora el proceso lo que va a hacer es lo siguiente:

1.- Inicializar las variables locales pagina y tramo a "". Estas variables las utilizaremos para ir componiendo la página de la siguiente forma, la ejecución de un componente html la guardamos en el tramo, y la pagina es la pagina más el tramo.

2.- Iniciamos la página ejecutando el componente1.

3.- Ejecutamos el componente2 al que le pasamos el parámetro fecha_del_plannig.

4.- Cargamos la lista PLANNING, ordenamos por el campo INSTALACION, multipartimos la lista por INSTALACION y ejecutamos el componente3. Esto nos genera la fila encabezado de la tabla con las diferentes instalaciones.

5.- Ejecutamos el componente6 para pasar a la siguiente fila.

6.- Cargamos la lista PLANNING, ordenamos por TRAMO-HORARIO, multipartimos la lista por TRAMO-HORARIO, ejecutamos el componente4, seleccionamos ficha por posición 1, la leemos y guardamos la HORA, cargamos la lista PLANNING por el índice HORA resolviendola, ordenamos por INSTALACION, multipartimos por INSTALACION, ejecutamos el componente5 y luego el componente6.

Así hemos compuesto una fila con el tramo horario y luego la ocupación en ese tramo horario por cada una de las instalaciones de la cabecera de la tabla.

Esta fila se repite por cada tramo horario.

7.- Ejecutamos el componente7.

8.- Añadimos retorno texto la variable local pagina.





Y con esto ya tenemos un informe html que siempre se previsualiza antes de imprimir aunque se lanza desde proceso.


El informe html como página web que es, no tiene longitud, es tan larga como queramos, y los saltos de página los gestiona al imprimir el navegador, aunque podemos forzarlos mediante css.

Si tu cliente tiene una aplicación Velneo, tiene un navegador de aplicaciones y conjuntamente un navegador web para ver e imprimir estos informes.

La desventaja de este tipo de informes: se ejecutan en C/S, porque son web.

2 comentarios:

  1. Hola Domk, ¿cómo va eso?.

    Me parece una buena solución; incluso aunque no tengas una instalación C-S, puedes generar el informe en un archivo temporal y mostrarlo posteriormente.

    Pero el problema está a la hora de imprimir, ya que no tengo el control sobre el tamaño del papel, los márgenes, cabeceras y pies de página.

    Comentas que eso se puede hacer con css; pero yo no lo veo fácil.

    Un saludo y gracias por compartir.

    jtgarcia

    ResponderEliminar
  2. Para tener este control debes recurrir a css.

    He publicado una nueva anotación al respecto, seguro que la encuentras interesante.

    Un saludo,

    ResponderEliminar