¿Como tener informes optimizados para la nube?


([N4] mittosoftware) #1

Hola a todos
Esto de los informes en 3er. plano, algo que hasta ahora resuelvo con v7 de forma satisfactoria.

Mi punto es, en informes complejos, que involucran muchas tablas, relaciones y cálculos, ¿como debería ser la forma correcta, para que todo el proceso y los joins se hagan en tercer plano, y solo se envíe el resultado al cliente final (el PDF resultante, por ejemplo)?

Porque tanto la ayuda del objeto informe, como del informe externo, dicen muy claramente: “No es posible imprimir informes (ni en impresora ni el pdf) desde procesos ejecutados en tercer plano.”

¿Cual es la forma entonces?, Porque siempre en Velneo insisten en optimizar para cloud (aunque hasta ahora dan una forma menos ‘life is hard’ que los chorrocientos sets y gets en las búsquedas, por ejemplo), pero no recuerdo haber visto la forma como se optimiza para cloud el objeto informe V7, o el objeto informe externo. ¿Existe ya algo del tema y no lo he encontrado?

Gracias de antemano por la info, saludos.
César


([N2] ramiro) #2

Buenas tardes:

Si el informe es complejo y en primer plano resulta lento, puedes usar una Tabla Auxiliar para “juntar” la información y preparar los datos a imprimir, realizando ese trabajo en 3P. La impresión se realizaría después, ya en 1P, desde esa Tabla Auxiliar (que ya tiene resueltos los datos que pudieran hacer lento el proceso).

Haciéndolo de forma adecuada no hay informe lento, puedo asegurarlo…

Saludos. Ramiro


([N4] mittosoftware) #3

Entonces, en un sistema con muchos informes complejos (un sistema standar del mundo empresarial), habría que crear muchas tablas auxiliares, ajenas al diseño original, solo para mejorar el rendimiento en la nube?

¿No sería posible que Velneo tenga un sistema mas rápido, tal que, todo el resultado lo ponga en un PDF, y asi, enviar ese PDF al cliente? Porque al menos en otros sistemas de report, no recuerdo que me pidan crear tablas auxiliares por cada reporte. No se si estoy entendiendo mal la solución.


([N3] pacosatu) #4

Hola cjribera.

Yo también creo que solo hay una solución y es la que se usa siempre en entornos Cliente/Servidor. El Cliente pide un Informe y éste se calcula integramente en el servidor o 3P. Ese resultado devolverá al cliente unos pocos o miles de registros que mostrará el Cliente en la pantalla del Usuario (el formato PDF, XML, HTML, JSON, … es lo de menos).

La diferencia y quizás un handicap en Velneo para los que venimos de otros entornos es que no podemos crear “Cursores en memoria” o “Tablas temporales” para guardar resultados intermedios (las cestas pueden valer). Por esa razón a veces es complejo o imposible llegar a obtener determinados Informes en una base de datos con relaciones permanentes e índices fijos.

Por esta razón tendremos que diseñar nuestras bases de datos pensando en los Informes que vamos a necesitar:

  • Establecer Índices que ya tengan aplicados determinados Filtros (Condiciones de Indexación)
  • Tener Actualizaciones que nos vayan creando los Agregados necesarios en nuestros Informes
  • Tener toda clase de punteros ya creados para que navegando por una tabla podamos acceder a todos los datos relacionados
  • Como propone Ramiro, tener disponibles Tablas temporales para recoger los resultados
  • Cualquier otra artimaña que solvente la imposibilidad de tener resultados intermedios de diferentes tablas

De todas formas, después de tantos años con Velneo, seguro que habrá cientos de soluciones.

Saludos
Paco Satué


([N2] ramiro) #5

Buenas:

Yo uso una sola tabla (siempre la misma) para estos asuntos. Puesto que esta en disco y es compartida, uno de sus campos es el usuario para independizar los datos de cada cual. Hay varios campos de texto libre que uso para las agrupaciones de informes y tambien muchos campos punteros a maestros que relleno segun me convenga.

Mira este articulo…

http://ramiroperezacebo.wix.com/programarte#!informe-n-tablas/chog

Saludos