Informe vReport Ideas

Buen día a tod@s,

Tengo la necesidad de diseñar un informe en apariencia sencillo, pero como que el día de hoy no se me da la solución.

En la imagen adjunta les muestro como debe quedar el informe.

Tengo “n” cantidad de oficina, el informe pretende presentar simplemente las ventas de cada oficina durante un mes determinado, para esto cada columna representa una oficina y en cada fila un día en particular.

El problema es que no encuentro la manera de en vReport poner varias columnas (1 por cada oficina) y que me muestre dicha información, para una sola oficina no hay problema, pero es indispensable ese formato, obvio con la suma total de ventas del mes de cada oficina al pie de página y un acumulado global de ventas totales al final.

Me es importante una solución o sus amables sugerencias, toda vez que posteriormente tengo otros reportes similares que diseñar, por ejemplo se tienen de 1 a n vehículos de transporte, y tambien se requiere un informe que por cada unidad presente sus ventas por día.

Cabe hacer mención que intenté hacerlo con tablas de referencias cruzadas, pero después de mucho probar encontré que no es la opción adecuada, amén de la escasa documentación y las horas perdidas probando como rellenar cada valor, resulta que los títulos de las filas no son dinámicos, bueno esa es mi experiencia, quizás alguien que las domine me pudiera orientar al respecto.

Quedo atento a sus amables sugerencias.

Saludos.

Martin.

image

Buenas Martin.

¿Y si le das la vuelta? En vez de pones las fechas en vertical, ese es el dato que nunca va variar. Lo podrías poner en horizontal y el detalle (oficinas) en horizontal.
Al hacer esto te permite que despreocuparte por el número de oficinas, ya que ira creciendo hacia abajo.

En algún momento arme algo parecido pero no con v reports si no con los informes comunes,lo que hacia era utilizar una tabla en memoria diseñada para ese informe y alimentaba las columnas con procesos y variables.

al final quedaba igual como una tabla de doble entrada

Gracias colegas, en el primer reporte no puedo voltearlo wikan, toda vez que es requerimiento del cliente, ya pagará futuras modificaciones, jajaja.
Para el segundo caso no expuesto aquí, pero un tanto más complejo si se le dio la vuelta al informe.

Como bien mencionas ereitmann, digamos que a la antigüita utilizando una tabla puente y proceso para alimentarla, queda bien y bastante rápido en ejecución.

No sé de donde saqué o llegué a pensar que vReport permitía hacer este tipo de informes sin recurrir a métodos o formas “antiguas” para lograr el objetivo, ojo, no digo que este mal, pero imaginé que habría algo más potente.

Bueno, de momento todo solucionado y sin problemas.

Saludos a la comunidad, que ya hacía un rato que no me aparecía por aquí.

Martin.

Tienes la variable @SKIP_NEXT de vReport que permite imprimir en columnas. El ejemplo de vReport de las etiquetas lo tienes en uso.
Pero tienes que tener fijo el número de oficinas y enviar los registro en orden de fechas. Creo que es lo más parecido a lo que necesitas.

Este caso es una tabla dinamica o referencias cruzadas, que en teoria segun la documentacion de vReports es posible hacerlo, pero en la practica es un misterio, creo que no es funcional,

saludos

Hola arturomiranda.

Yo también pienso que un tema tan sencillo como las tablas de referencias cruzadas se convierta en un verdadero drama con Velneo, debido a la “desidia” en la documentación de VReport.

No se puede decir “en la práctica es un misterio, creo que no es funcional” y se acabó el tema.

Propongo que entre todos hagamos un esfuerzo para que esta funcionalidad de VReport, que por otro lado debe ser una chorrada, sea una realidad. Ver ejemplo en https://www.nocisoft.com/downloads.html?file=files/nocisoft/ncreport_pdf/Cross_Table_Demo1.pdf.

Por favor Martín, ¿Puedes contarnos hasta dónde has llegado con las pruebas de VReport y las Tablas cruzadas?

Yo entiendo que el origen de datos debe estar previamente preparado con un mínimo de tres columnas: 1º- eje x o títulos de columnas, 2º- eje y o títulos de filas y 3º- datos en los puntos de cruce.

¿Dónde está el problema? Si no funciona que lo confirme Velneo y dejamos de perder horas de prueba y error.

Saludos
Paco Satué

Buen día Amigos, Paco y Arturo y todos los demás.

Antes que nada una disculpa por la tardanza en responder, pero han sido en verdad 5 días de prueba y error, prueba y error, prueba y error y prueba y error, y después de en ratos casi patear mi laptop, o golpear mi monitor, o azotar el teclado, y digo casi porque en realidad no lo hice, soy mula, no tarado.

Bueno, pues resulta que a fin de cuentas SI FUNCIONAN las “malditas” tablas de referencias cruzadas, pero aún a esta hora me siento un poco como el burro que tocó la flauta, todavía no descifro por completo como funcionan al 100%, pero les anexo algunos pantallazos, de el reporte por medio tradicional, luego de algunas pruebas con tablas de referencias cruzadas y por último el resultado final que es lo que buscaba.

Tocaré escuetamente la documentación, que con mucha pena y después de revisar su correspondiente versión en inglés por parte de NOCISOFT, veo que lo que tenemos en Velneo no es más que una fusilata traducida sin más ni menos. Hasta aqui esa parte.

Bueno, ahora lo interesante, ojo, todo es mi experiencia y espero les sirva y ahorre mucho dolor de cabeza.

  1. Partimos de una lista en un procesos, manejador de evento, etc. no hay necesidad de ordenar, agrupar ni nada, con que pasemos la lista es suficiente, de alguna manera al generar la referencia cruzada todo se agrupa bien.
  2. Definimos el origen de datos en vReport como normalmente lo hacemos, igual, nada, ningun tipo de agrupamiento en especial, no es necesario.
  3. En el detalle del reporte insertamos la tabla de referencia cruzada y con doble click tenemos la pantalla de configuración con tres pestañas, Propiedades de tabla, Propiedades de celda y Tabla eje.
  4. En la primer pestaña, Propiedades de tabla seleccionamos el ID del origen de tabla, el cual es uno de los que hayamos definido como origen de datos del informe, en mis cientos de pruebas las dos siguientes líneas no son funcionales para ABSOLUTAMENTE NADA, no observé ningún comportamiento o digamos que sí había algún comportamiento errático más bien al poner algún dato en la fila de Origen del título de la columna, en cuyo caso deben poner el nombre del campo precedido del # y todo en mayúsculas. Las columnas ocultas no sé para que demónios sean, pongas o no pongas nada el comportamiento es el mismo, lo pongas con # o sin él.
  5. La parte de configuración de tamaños y espacios, tamaños de sección y Mostrar partes de tabla SI SON FUNCIONALES y hacen bien su trabajo.
  6. Brinquemos la siguiente pestaña y pasemos a la última, que es la que realmente hace funcionar el mamotreto. La pestaña en cuestión es la de Tabla Eje.
  7. Forzosamente se debe configurar los datos de esta pestaña, de lo contrario nunca, jamás esperen que funcione su reporte.
  8. Omitamos de momento el primer check “Crear tabla pivote” y expliquemos que pretendo lograr en principio.
  9. Tengo una tabla que guarda los cierres de caja de oficinas foráneas, tres de esos datos son los que necesito para generar mi informe, la fecha, la taquilla y el saldo final. Requiero el nombre de la taquilla u oficina como título de las columnas y la fecha como título de las filas, con eso en mente pasamos ahora si a la configuración de la tabla.
  10. Función agregada: Acumulado
    Crear tabla eje: #TAQUILLA.NAME
    Origen de columnas: #FECHA
    Origen de los valores: #TOTAL_CIERRE
    NOTA, en esta última celda podemos poner expresiones, sumas, restas, divisiones o multiplicaciones, no probé otros tipos pero estos son funcionales.
    Ordenar automáticamente los datos de la cabecera: Si, marcar el check.
  11. Con esta configuración en mente ya tendríamos un reporte funcional, pero aqui las columnas serían las fechas y los nombres de las oficinas serían las filas, aquí aplicamos entonces el marcar el primer check, Crear tabla pivote y con eso las fechas pasan a ser filas y los nombres de taquillas columnas.
  12. Ahora pasemos a la pestaña de enmedio, Propiedades de celda.
    Aqui configuraremos los tipos de datos y valores que contendra cada celda, desde las cabeceras superiores, las laterales, hasta las sumatorias laterales o inferiores, colores, bordes, etc.
  13. Antes que nada configuro primero el tipo de dato que llevarán las celdas de cruce, en primer plano hay que seleccionar el tipo de dato, sea texto, numérico, fecha, etc. SI NO CONFIGURAMOS BIEN ESTE TIPO en las celdas se mostraran cosas raras o no se mostrará nada de plano, las pestañas de Fondo y Bordes las omito porque es obvio su funcionamiento, es meramente dar formatos, y nos vamos a la pestaña Número.
  14. En este caso si en la primer pestaña seleccionamos número, obligatoriamente debemos darle formato en esta, de lo contrario aparecerá sin ningún tipo de formato.
  15. De igual forma hay que seleccionar el tipo de dato y su posible formato en las celdas de Cabecera de columna y Cabecera de la fila, el no seleccionar el tipo de dato adecuado ocasionará o que no aparezca nada o que aparezcan cosas raras (nombres de variables, de campos, etc.)en nuestro caso la cabecera de la columna es texto y la cabecera de fila es tipo fecha.
  16. Esto es importante porque son estos datos obtenidos de la BD V7.
  17. Ya puedes generar tu reporte.
  18. En este caso, si quitamos el check de pivote habrá que cambiar los tipos de datos en las cabeceras de columnna y fila, recordemos que estamos quitando el giro o pivote y las fechas ahora seran columnas y los nombres filas, si no hacemos esto no aparecerá el título de las cabeceras.

Esto es todo.

Si no quieres hacer pivote, simple, cambiamos esto:

Crear tabla eje: #TAQUILLA.NAME
Origen de columnas: #FECHA
Origen de los valores: #TOTAL_CIERRE

por esto

Crear tabla eje: #FECHA
Origen de columnas: #TAQUILLA.NAME
Origen de los valores: #TOTAL_CIERRE

Ojo, mi error al principio era o consistía en que el check al inicio de la pestaña Tabla eje (Crear tabla pivote), me hacía pensar que solo en caso de seleccionarlo requería llenar los siguientes datos, pero no es así, SIEMPRE HAY QUE COMPLETAR esa información dado que es la base para el cruce de referencias.

Y por último me pasó que duré dos días en que no podía lograr que me aparecieran los títulos de cabecera de las columnas, probé de todo, metiendo datos del tipo #campo, $D{campo}, $F{campo}, campo, %campo, %1campo, y otras que inventé por ahi pero nada, hastá que viendo algunos ejemplos de reportes en la página de NOCISOFT observé que extrañamente ponia los títulos de fechas de manera perpendicular, o vamos, con una altura exagerada, a las mil le cambie el ángulo y vualá, como por arte de magia o brujería aparecio el título que deseaba, después lo regresé a 0 grados y ya siguio apareciendo.

Otro pequeño detalle es que en ocasiones algo que no se que es no le gusta al vClient y si cambias el pivote sin reconfigurar los tipos de datos de las cabeceras de filas y columnas el vClient rompe sin más ni más, de que lo hace aunque vuelva a reconfigurar el reporte a su estado original, el vClient sigue rompiendo, y me pongo a cambiar pequeños parámetros de otras cosas hasta que deja de romper, digo por si les pasa.

Como esto ya fue mucho choro me guardo los comentarios acerca de la documentación al respecto, que como siempre, ya no pido ejemplos, ya con que me pongan qué se pone en cada caso o expliquen el funcionamiento de cada cosa me ahorarrian tiempo.

Saludos a todos y cualquier duda, seguimos probando.

1 me gusta

Hola Martín.

Muchas gracias por el esfuerzo de documentación que has hecho.
Voy a intentar reproducirlo y te cuento.

Sí, es cierto, la documentación de vReport es una burda traducción del manual de NOCISOFT/QT, y lo peor de todo es que QT tampoco destaca por documentar bien sus productos.

Saludos
Paco Satué

Hola Martín.

He preparado un ejemplo muy sencillo para terminar de ver las Tablas cruzadas con vReport.
Mi experiencia:

  • Como dicen en España, “la primera en la frente”, vClient rompe siempre cuando la opción “Crear tabla pivote” (pestaña Table eje) está desactivada. Gracias a Martín estaba avisado de antemano y el cabreo se ha reducido bastante.
  • Si activamos la opción “Ordenar automáticamente datos de la cabecera” (pestaña Table eje) los resultados de agregación son erróneos. El cabreo vuelve a subir un poco. He optado por Ordenar el campo FECHA desde Velneo.
  • No sé cómo formatear las Fechas, siempre aparecen como yyyy-MM-dd. Para solucionarlo paso las fechas a String (dd/MM/yyyy) mediante un campo fórmula #FECHA_TXT). El cabreo vuelve a subir un poco más.
  • Parece ser que la Tabla cruzada ocupa ella sola la sección de Detalle, por lo tanto, para añadir un título a la tabla he usado un Agrupamiento con Encabezamiento. La fórmula de agrupamiento la he dejado en blanco.

Para el ejercicio vamos a usar la siguiente tabla:
TABLAS_CRUZADAS (#LOCAL alfa, #PRODUCTO alfa, #VENDEDOR alfa, #FECHA fecha, #VENTA numérico)
En esta tabla tenemos el histórico de Ventas de determinados Productos vendidos por los Vendedores en los Locales de la Empresa para una fecha concreta, ver imagen adjunta.

Nuestro objetivo es que a partir de esta simple tabla, poder cruzar datos de manera automática con vReport.

Montamos el informe vReport (ver imagen adjunta). Definimos el origen de datos TABLA_CRUZADA con la tabla de Velneo.
Añadimos 6 secciones de Detalle con un Agrupamiento cada una. El origen de datos de cada Detalle es el mismo, TABLA_CRUZADA. En cada detalle insertamos una Tabla cruzada y hacemos doble click para editarla.

  • La pestaña “Propiedades de tabla” se queda tal cual. Solo ajustar Anchos de columna y Ancho de columna de cabecera.
  • En la pestaña “Propiedades de celda” establecemos el aspecto visual de las distintas celdas.
  • En la pestaña “Table eje”, como dice Martín está la clave. Rellenar siempre los 4 campos:
    Función agregada - normalmente será Acumulado. Queremos sumar las Ventas.
    Crear tabla eje - no sé qué demonios significa “tabla eje” pero aquí vamos a poner el campo que alimenta los encabezados de las columnas o eje X, por ejemplo #LOCAL.
    Origen de columnas - aquí ponemos el campo que alimenta los encabezados de las filas o eje Y, por ejemplo #PRODUCTO.
    Origen de valores - aquí ponemos el campo cuyos valores queremos agregar y mostrar en los puntos de cruce.

Recordad que la opción “Crear tabla pivote” siempre activa y “Ordenar automáticamente datos de la cabecera” siempre desactivada.

Con esto ya está todo, ver resultado en pdf adjunto.
Así, a partir de una simple tabla de histórico de Ventas podemos generar múltiples agregados en tablas cruzadas, simplemente cambiando “Crear tabla eje” y “Origen de columnas”.

Falta solucionar el tema de Ordenar los encabezados, tanto del eje X como del Y.

Saludos y gracias de nuevo Martín, ¡tema aclarado y bastante menos cabreo!.
Paco Satué

image

tc1_ejemplos.pdf (64 KB)

1 me gusta

Muy buen ejemplo Paco,

Hacer mención que a mí si me funciona el ordenamiento por fechas cuando le paso la lista desordenada.

Y siguiendo un poco con este tema de vReport, al investigar en la web de NOCISOFT observo que (y para corroborarlo me lo bajé para probarlo a mi ordenador) difiere un poco de la versión que tenemos en V7.

A saber y así rápidamente la versión de NOCISOFT permite probar “directo” desde el editor de informes los diseños y resultados, imagino que aquí hay cierto lio con la conexión a V7 y por eso desactivaron dicha opción.

En el mismo tenor observo que permite crear datos de prueba, cosa que en V7 no podemos hacer, igual al anterior, debe haber cierto lio con V7 por lo que realmente ni sufro ni me acongojo por estos dos puntos.

Lo que si me gustaría es que ya habilitaran o actualizaran nuestra versión para poder desde la previsualización de informe generar o guardar directo a PDF o SVG, lo cual me evitaría tener que andar instalando impresoras PDF en los clientes, vamos, los nativos ya lo hacen a PDF.

Tambien noté que el generador de expresiones de NOCISOFT es sustituido obviamente por el editor de fórmulas de V7, peeeeeeeero, desde nuestro editor de fórmulas V7 es imposible accesar a los valores propios de variables creadas en el informe, variables usadas para sumar agrupamientos, sacar medias, etc. ya tuve mis primeros cabreos por ese tema y creo que si resulta necesario, si no indispensable el poder usar esas variables propias del vReport en el editor de fórmulas de Velneo.

También observé que existe otro objeto que se llama visor de tablas (anexo imagen), que es una rejilla tal cual y que no tenemos disponible en la versión actual, haber si consideran agregarla en alguna próxima versión.

Pues nada, saludos a todos y gracias Paco por tus observaciones.

Martin.

Muchas gracias por compartir vuestros avances, esto supondrá un mundo para los que prueben esto después.

muchas gracias por la retroalimentacion, se agradece mucho el esfuerzo

saludos

Hola aztecmexico, quiero solicitarte por favor, si me puedes explicar como lograr lo que hiciste con este informe pero sin tabla cruzada ya que no utiliza vReport.

Lo que quiero hacer se parece mucho a lo que lograste aquí, tengo Almacenes, con divisiones de almacén y partes, quisiera mostrar en una rejilla o un informe todas las divisiones de almacén de forma horizontal (como tienes las oficinas) y las partes quisiera que estén de forma vertical(como tienes las fechas) y mostrar las existencias de cada parte para cada división de almacén.

Espero haberme explicado bien

Mil Gracias

Roberto Sanz (Dominicano)

Buen día Roberto,

Para hacer los acumulados creo una tabla que solo contiene los datos que me interesan, a saber:

  • Id,
  • Almacen (ID o nombre, por si quieres lanzas el reporte que te genere agrupamientos por este campo, si antes de generar el reporte seleccionas un almacén en particular no seria necesario el campo, bueno, si lo es, para que saques el nombre del almacen en el reporte).
  • Por cada División (Nombre de la división) deberás crear un campo con ese nombre para que sepas en qué columna lo debes alimentar y guardar ahí la existencia.
    Parte, igual, ID o nombre por si deseas las filas ordenadas alfabéticamente.

El número de divisiones debe ser un número fijo, toda vez que vas a definir tantas columnas como divisiones tengas, no puede ser un dato variable porque las columnas no pueden ser dinámicas como las filas, esto es, el reporte puede crecer en filas, no en columnas.

De igual manera supongo que las divisiones de almacenes son las mismas para todos, si fuera el caso que no es así tendrías que crear un reporte personalizado para cada almacén.

Pues lo demás es ya un tanto más sencillo, cargas una lista o realizas una búsqueda que vaya recorriendo cada registro donde almacenes las partes y su existencia, a partir de ahi verificas si ese registro ya existe en tu tabla en memoria (un índice por almacen, y parte) si ya existe registro previo sumas la existencia, si no creas un nuevo registro en tabla en memoria.

Aqui es importante como te decia antes, que sepas de antemano los nombres de las divisiones de cada almacén, porque la existencia de cada parte la vas a guardar en el campo que se corresponda con la división.

Una vez finalizado cargas una lista de la tabla en memoria, lo ordenas por almacen y nombre o número de parte y lanzas el reporte que ya con esa lista debe generar la salida que deseas.

Ojo, en el reporte definirar como etiqueta el nombre de cada división (columna) y en el detalla empatas cada campo de división con su correspondiente cabecera.

Creo que sería todo.

Este tipo de reportes, en apariencia sencillos en realidad son un dolor de cabeza, porque si te cambian o agregan elementos que conforman las columnas tienes que reprogramarlos para adicionar dicha información. Pero a veces no hay de otra, si así lo quiere el cliente pues así se hace.

Una vez viendo que si funcionan las tablas de referencias cruzadas te das cuenta de su potencia, porque en lugar de crear tablas en memoria, y generar procesos o eventos para alimentarlas y posteriormente lanzar el reporte a la manera tradicional, todo se reduce a que la tabla base contenga los campos mínimos necesarios que requieres y en el evento que lanzas el reporte solo requieres practicamente el cargar lista, ordenarlo y lanzarlo, no más. Si puedes usar vReport creo que te ahorraras mucho tiempo de desarrollo de este tipo de reportes con otra ventaja, estos pueden crecer tanto horizontal como verticalmente al mismo tiempo y sin que tengas que reprogramar nada.

Espero haberme explicado bien, si no es así buscame por skype y con gusto te apoyo. mi usuario es aztecmexico.

Saludos.

Hola, estoy tratando de hacer una tabla de referencias cruzadas en los informes personalizados, el tema en cuestión es como crearla o configurarla para que no realice ninguna función agregada, ya que los datos del cruce son texto.
Estoy haciendo algo muy similar a un horario de clases, en las cabeceras de la columna van los días y en la cabecera de las filas la hora, eso me sale bien pero como el origen de los valores es un texto (serian las materias o clases) como siempre figura una función agregada escribe un numero o es cero o 1.
La pregunta es como evitar las funciones agregadas para que solo salga en el cruce de valores el contenido del campo texto que lo alimenta