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.
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
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.
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
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?
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…
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.
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
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 );