vReport - orden en los informes

Ahora mismo con esto

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 + '"' );
theRegisterListOut.append( list );

Según la documentación, a ver si entre todos la descrifamos:
void sort( String szIdCompuestoCampo, Boolean bDescendente, …. )

Ordena la lista de registros por los campos indicados. Se puede ordenador por múltiples campos separados por comas.

Parámetros:
– szIdCompuestoCampo: String que contiene el identificador del campo de la tabla o de sus enlazadas.
– bDescendente: Booleano para indicar orden descendente, por defecto es false (por defecto Ascendente).
list.sort( '"' + sort + '"' ); Le paso una string con los campos separados por coma…perooooooo nada.

Este método ordena bien.

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 );

El problema está en como se comporta vReport.
Por ejemplo, si queremos sacar un listado de facturas agrupada por cliente y ordenadas por fecha.
Este método no nos sirve, ya que si en el vReport tenemos
detalle: facturas
agrupamiento 1: cliente.name
agrupamiento 2: fecha

vReport
devolverá una agrupamiento por cada cliente-fecha

Entonces para un listado así, facturas agrupada por cliente y ordenadas por fecha. Si ordenamos la rejilla por fecha ascendente o descendente el informe nos saldrá perfecto.
Agrupadas por cliente ( las ordenamos con el script ) y el segundo orden ya viene por la lista entrante.

Si tuvieramos que añadir más ordenes…viene lo complicado, habría que mandar la lista en ese orden y el script lo ordena para agrupar.

Muchas gracias Manuel,
Lo he probado y funciona bien, en algunos casos tengo la primera agrupación por #ENT.NOMBRE y me lo ordena perfectamente, pero en otras las agrupaciones están bien pero el orden de la tabla #ENT.NOMBRE no es el correcto.
Seguiré probando.
Gracias

@Palomo tienes dos agrupaciones en ese informe que no te funciona?

#Manuel, No solo tengo una. Lo repaso y te comento

Hola,
De vuelta sobre los informes vReport.
Alguien ha podido solucionar la ordenación de las agrupaciones en vReport?
Es un tema preocupante. Los clientes hacen informes poniendo varias agrupaciones y nunca devuelve bien los resultados. Lo que no les puedo decir es que antes ordenen la rejilla según los criterios de ordenación de vReport (es de locos), mas cuando se trata de muchos registros,
Alguien lo ha podido solucionar?
Saludos.

Hasta que funcione el método sort de la clase vRegisterList, yo no encuentro una solución “elegante”.

En mi caso para los informes con agrupaciones les paso un proceso previo que ordena la lista adecuadamente y se lo pasa al informe, tengo una personalización en la que guardo los campos de ordenación en el report y un js ordena la lista, pero claro, sólo funciona con un campo de ordenación… un año después sort sigue sin funcionar, eso sí la documentación no advierte de que no funciona.

http://velneo.es/info_v7_717_es/velneo_vdevelop_v7/scripts/clases/core/vregisterlist/#sort

Por tanto, hice otra personalización en la que puedo ejecutar un preproceso a la lista de entrada del informe, en los informes de más de un campo de ordenación hago un proceso que ordena (por tanto me toca crear los procesos de ordenación para cada informe --> el usuario final no puede crear informes a su gusto porque tengo que crearle las ordenaciones como procesos).

Cuando sort funcione, ya no hará falta ésto, y el proceso previo lo usaré sólo para lo que pensé usarlo, rellenar tablas temporales que usa el report, etc…

Si a alguien se le ocurre alguna forma de hacerlo más estándar se agradecería :wink:

Hola a todos,

volvemos al clásico ejemplo de problemática que tendría que dar resuelta Velneo, porque si no de que tipo de plataforma integral de desarrollo de aplicaciones estamos hablando? ¿De una que necesita superusuarios para hacer cosas del día a día como un informe ordenado o agrupado?

¿Cuanto tiempo llevamos sufriendo y observando en el foro estos mismos problemas con VReport?

¿Es mas facíl que nuestros usuarios aprendan javascript para ordenarse un informe o que velneo de una solución integral a los informes de una vez por todas?

Saludos,
Santiago.

Buenas Tardes.

He estado mirando y en la documentacion de vRegisterList, dice:

La función sort está sobrecargada pudiendo llevar varios pares de parámetros campo y bDescendente.

Lo he probado funciona de la siguiente forma:

list.sort(“NAME”, false, “ID”, false);

Un saludo,

Ya funciona con más de un campo?

La verdad que no lo he probado con la última versión, con la anterior te aseguro que no funcionaba, ordenaba sólo por el primero, y el descendente no funcionaba en ningún caso.

a ver si lo puedo probar, porque haría que me sean las cosas más fáciles…

No soy capaz de ordenar por más de un campo en la 7.16, se puede en la 7.17?

La pregunta es, ¿a que versión de Velneo hay que esperar para tener un editor de informes decente, documentado he integrado en la plataforma?

Quizá en 2019 con la V7.36??

Luis, precisamente hoy he estado retocando ese mismo script. Pero no he podido de terminar de hacer las pruebas.

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

while ((myArray = regex.exec(theRoot.varToString("INF_DEF" ))) !== null){
	sort = myArray[1].replace("#", "");
	myArray.push(sort);
        myArray.push(true);
}
if(myArray.length){
    list.sort.apply(this,myArray);
}
theRegisterListOut.append( list );

Te lo escribo de memoria por que ahora no lo tengo delante, disculpa si tiene algún error.
Prueba de esta manera y me comentas.

Gracias Wikan, lo pruebo esta mañana y te digo algo

Hola Wikan, el código me devuelve un error (adjunto imagen)

upps perdón
var myArray = [];

Lo escribi de memoria, disculpa.

Hola Wikan,
No funciona, NO devuelve ningún registro
A tí te funciona?

En principio si, tienes que tenerlo en un proceso que reciba la lista del informe y devuelve la lista del informe.

El único que cambio que tiene con respecto al anterior es sobre todo la llamada a la función del Velneo.

Si quieres hazle un debug y en expresiones pon myArray para que veas que toma los valores correctos. Debe coger los campos definidos en los agrupamientos del vReport

Hola Wika,
Te paso el error que me presenta (adjunto imagen)
Gracias

Prueba con este, de toda formas si no te funciona ya no complico más y cuando tenga el código delante te lo pongo. Ahora no lo tengo y te lo estoy poniendo de cabeza.

Disculpa de nueva

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

while ((myArray = regex.exec(theRoot.varToString("INF_DEF" ))) !== null){
	sort = myArray[1].replace("#", "");
	sortArray .push(sort);
        sortArray .push(true);
}
if(sortArray .length){
    list.sort.apply(this,sortArray );
}
theRegisterListOut.append( list );