vReport - orden en los informes

Buenos días,
En la ayuda de vReport pone:
“Para que el agrupamiento sea efectivo, la lista que alimenta el informe ha de pasarse ordenada por el campo del agrupamiento.”
Esto es un problema, ya que desde una rejilla de, por ejemplo “Facturas”, que las tenemos ordenadas por fecha, de mayor menor, queremos imprimir un informe desde vReport. El cliente, como es normal, selecciona uno de los informes. En este caso Facturas agrupadas por Cliente; el informe que presenta vReport sale ordenado por fecha, y NO manteniendo el orden de agrupación. Ahora quiero sacar un informe de Facturas agrupadas por Ejercicio, Tipo de Factura y Cliente. La cosa se complica mas para el usuario.
Como le digo a mis Clientes que cada vez que generen un informe tengan que estar ordenando la rejilla. Y en el caso de varias agrupaciones, que le digo al Cliente, cuando él mismo ni sabe que tipo de ordenación tiene que hacer.
Hay alguna solución al respecto?
Muchas gracias
Oscar B.

Hola Oscar.

Una cosa es la Lista que alimenta la Rejilla y otra la Lista que alimenta el Informe.

Cuando el Usuario selecciona un Informe tienes que hacer lo siguiente:

  • Procesar la Lista asociada a la Rejilla
  • Ordenar por el campo o campos que definen los agrupamientos (ver Ordenar Lista)
  • Ejecutar el Informe

Esto tiene una pega, que tocas el orden establecido por el Usuario en la Rejilla y esto no debes hacerlo.

Otra opción para no tocar el orden de la Rejilla:

  • Procesar la Lista asociada a la Rejilla
  • Añade la Lista a una Cesta local
  • Ordena la Lista de la Cesta por el campo o campos que definen los agrupamientos
  • Ejecuta el Informe

Conclusión: eres tú y no el usuario el que debe ordenar la Lista antes de ejecutar el Informe.

Velneo ha optimizado la ordenación de Listas en vClient, así que con listas pequeñas no es necesario recurrir a la creación de Índices para este cometido.

Saludos
Paco Satué

Buenas.

Que vReport te ordene por los agrupamientos que montes en el informe es fácil de resolver con vJavascript.

Yo tengo un proceso vJavascript (primera imagen) donde busco la etiqueta “groupExp=” dentro de la variable donde está definido en xml el informe. Esta etiqueta es la que indica los agrupamientos que tienes en tu informe. Una vez tengo el identificador del campo a ordenar, ordeno con la instrucción “list.sort”.

Después en el proceso velneo que decide por donde va a salir el informe ( impresora, pdf, etc) lo primero que hago es llamar al proceso javascript anterior con origen y salida la lista de la tabla que estoy imprimiendo para que me ordene la lista a devolver.

Así me da igual el orden que tenga la rejilla que estoy viendo que me ordenará por los distintos agrupamientos que tenga en el informe.

Un saludo.

image

image

Velasco, una pregunta.

Yo tengo hecho algo parecido, pero en lugar de buscar en el xml (que me parece mejor opción), me cree unos campos de ordenación en la tabla de informes, el problema me viene cuando hay más de un campo de ordenación.

Por lo que he probado list.sort no funciona con varios campos de ordenación, tampoco funciona el parámetro que indica si es descendente el orden.

Este problema me lo ha confirmado soporte, dicen que lo han incluido en bugman. Lleva reportado 2 versiones y aun no saben cuando lo resolverán. El fallo es que la función sort sólo funciona el primer parámetro, del resto no hace ni caso.

¿Tú has podido ordenar con sort por 2 campos, por ejemplo CLIENTE y FECHA ?

Hola Jorge,
Estoy probando la solución que das (muy buena opción), pero no me funciona. He repasado el proceso vJavascript, y veo que el final de la matriz que delimita el campo del grupo es el símbolo “}”. En esta última versión de vReport (no se si en las demás), la secuencia del fichero xml que nos genera es: groupExp=“DMTOS.#ENT”, siendo “las comillas” el campo de delimitación final.
Como le ponemos las comillas en el proceso de vJavascript?
Saludos, Luis

Hola, a mi me pasa lo mismo, he probado la aportación de Jorge, pero no funciona, debe ser lo que comenta Overall. He probado de poner las comillas en vJavascript, pero no lo consigo.
He probado: indexOf(""")
No funciona, alguien sabe como se ponen las comillas dentro de unas comillas?
Oscar B.

Para poner comillas usa, ‘"’

Hola Wikan,
Pongo las comillas como indicas ( indexOf(‘”‘)), pero no funcionan.
He puesto:
indexOf(‘”‘)
indexOf(’”’)
indexOf(“\”")
Ya no se que hacer.
Alguien sabe como poner " dentro de unas comillas, para poder que funcione la siguiente instrucción:
var pos_fin = matriz[x-1].indexOf("}"); -----> hay que sustituir } por "
Gracias
Oscar B.

Prueba con \c para cada doble comilla.

Buenas

En las versiones anteriores del vReport cerraba el campo de agrupamiento con “}” y funcionaba perfectamente. Eso ahora ha cambiado si lo haces usando la fórmula. También se puede hacer a mano como antiguamente $D{#NAME}

El problema que hay también con el nuevo vReport es que el campo puede ser de varios orígenes por lo que el sort tampoco lo interpretará bien.

Con lo fácil que era solucionarlo ya se ha complicado en esta nueva versión.

Voy a hacer pruebas y os comentaré

Un saludo

Buenos días, ayer estuve haciendo pruebas y me decante por usar expresiones regulares.
Por ahora lo tengo en este punto pero tengo que dejarlo para seguir con otra cosa urgente, si alguien quiere seguirlo desde aqui.


var list = theRegisterListIn;
//var matriz = theRoot.varToString("INF_DEF" ).split("groupExp=");

var regex = /(?:groupExp=")(?:\w+\.)?(\#\w+)/gi
//var matriz = (/(?:groupExp=")(?:\w+\.)?(\#\w+)/gi).exec(theRoot.varToString("INF_DEF" ));
var myArray;
var sort = "";

while ((myArray = regex.exec(theRoot.varToString("INF_DEF" ))) !== null){
	(sort != "" )? sort+="," : sort;
	sort += myArray[1];	
}
alert(sort);
list.sort( sort );
theRegisterListOut.append( list );

Lo explico, la idea es generar una cadena (sort) para luego pasarla a list.sort, en la última prueba le pase una cadena tal cual y tampoco me la ordena.
La expresión regular aparentemente funciona perfecto tanto 1 o n agrupamientos o en el formato #CAMPO o Origen.#CAMPO

La verdad que me encuentro con funciones de javascript que fallan, en VFile ya he encontrado dos.

Hola Manuel,
Gracias por la aportación.
Lo he probado, pero no ordena la lista por las agrupaciones creadas en vReport.
Aso sí, La alerta devuelve las agrupaciones correctamente.
Te funciona?, hay que hacer algo mas?
Gracias.

@Palomo,
no me ordena, estoy igual. Me devuelve bien la supuesta cadena de ordenación pero no hay manera que lo ordene. Incluso hice la prueba de poner la cadena a fuego y tampoco. Así que ya creo que es un problema propio de Velneo que directamente la función sort no funciona.
Y ahí si que no podemos hacer mucho más la verdad, por lo queda ahí el código para cuando se arregle.

Gracias Manuel,
Alguien ha reportado el posible bug sobre la función “sort”?

Otro tema relacionado con el script que has hecho. Si tengo una agrupación que quiero ordenar sobre uno de los campos de una tabla maestra (ejem. #ENT.NAME), como lo contemplas?
Gracias

@Palomo, tienes razón
modifica la expresión regular por está /(?:groupExp=")(?:\w+.)?(#\w+(.\w+))/gi
Es decir, añadimos al final del último grupo (.\w+) que podrían venir 0 o más .CAMPO

Perfecto, así entre todo afinamos bien la expresión.

Según lei en este mismo tema ya esta reportado, pero hace dos versiones y no se ha solucionado.

Hola.

Tranquilos, me parece que pronto van a necesitar esta función en alguna pantalla de la aplicación vERP.
Se darán cuenta del fiasco y lo tendremos solucionado en un mes.

Saludos
Paco Satué

Yo lo reporté hace unos meses, no lo han solucionado aún, dicen que está en desarrollo.

Les dije que advirtieran en la documentación que no funcionaba:

http://velneo.es/info_v7_715_es/velneo_vdevelop_v7/scripts/clases/vregisterlist/

Para que nadie se tirará como yo HORAS probando sin saber que pasa.

No lo han hecho, sigue en la documentación como que funciona correctamente.

@Manuel, ahora todo OK. Ahora les toca a Velneo solucionar este punto. vReport sin esta pequeña-gran solución es un incordio.
Saludos

Buenas, volvi a pelearme con este tema.
Parece que he conseguido que por fin!!! ordene, aunque por un solo campo por el momento

var list = theRegisterListIn;
var regex = /(?:groupExp=")(?:\w+\.)?(\#\w+(\.\w+)*)/gi
var myArray;
var sort = "";

while ((myArray = regex.exec(theRoot.varToString("INF_DEF" ))) !== null){
	(sort != "" )? sort+=";" : sort;
	sort += myArray[1].replace("#", "");
	alert(sort);
}
list.sort( sort ); // No funciona con varios campos y la documentación...
theRegisterListOut.append( list );