# vReport - orden en los informes

**URL:** <https://foros.velneo.com/t/vreport-orden-en-los-informes/7497>\
**Category:** Velneo\
**Created:** [29 Octubre, 2014 06:52 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497 "2014-10-29T06:52:23Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [28 Enero, 2016 10:32 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/41 "2016-01-28T10:32:15Z")

</div>

Eres un crack, funciona perfectamente.  
Muchas gracias!

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [28 Enero, 2016 10:49 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/42 "2016-01-28T10:49:47Z")

</div>

Yo solo he hecho un retoque, Jorge Velasco fue el que tuvo la idea original.

Pero si habiendo un problema, que ordena siempre de manera ascende.  
`sortArray .push(true);`

Quizás con un pequeño cambio y usando alguna marca en el agrupamiento. Además de poner el campo añadimos de manera manual, (0/1, asc/des), algúna marca si podríamos ordenar los campos según indica la documentación. Aunque…creo que no me funciono en su momento por ejemplo ordenar por cliente.nombre ascendente y fecha descendente.

Si saco un hueco lo pruebo a ver.

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [28 Enero, 2016 10:53 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/43 "2016-01-28T10:53:24Z")

</div>

Estaré pendiente de tus pruebas. Este tema me interesa mucho.  
Gracias Wikan

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [31 Enero, 2016 17:51 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/44 "2016-01-31T17:51:39Z")

</div>

Buenos después de un día de pruebas, creo que definitivamente el sort no hace caso al ascendente y descendente.  
Te pongo el cambio el que le he hecho para definir, en teoría, si la agrupación es ascendente o descendente.

```auto
var informeDfn = theRoot.varToString("INF_DEF" );
var regex = /(?:groupExp="\w*\.\#)(\w*(?:\.\w*)*)(?:\-(DES))*/gi
var myArray;
var sort = "";
var orden;

while ((myArray = regex.exec(informeDfn)) !== null){
	sort = myArray[1].replace("#", "");
	sortArray.push(sort);
	orden = (myArray[2] === "DES") ? true : false;
	sortArray.push(orden);
}
// Quitamos la marca de orden
informeDfn = informeDfn.replace(/(groupExp="\w*\.\#\w*(?:\.\w*)*)(\-DES)*/gi, "$1");
theRoot.setVar("INF_DEF", informeDfn);

if(sortArray.length)
	list.sort.apply(this,sortArray);

```

Lo explico:

- En el agrupamiento en el vReport se añade el campo normal.
- Si queremos que el agrupamiento se ordene de manera descendente, añadir detrás el campo -DES
- Lógicamente dará error pero somo los mejores y lo ignoramos.

Cambios del código:  
Al recibir el la definición del informe, de entrada vienen incorrecta cuando queremos que sea descendente. Por lo que he tenido que añadir el replace del final para poder modificar la definición para que deje el agrupamiento igual que si no lo tuviera.

Aún así, aunque en el debug me indica que el sort es true, por lo tanto descendente, me lo sigue haciendo ascendente. Ya en su momento probé con dos campos uno false y otro true y no hacía caso ninguno. Yo creo que hay un bug pero espero que lo puedan probar y verificar.

---

<div class="post-metadata">

**Author:** ![tic-software](https://avatars.discourse-cdn.com/v4/letter/t/c4cdca/32.png) [@tic-software](https://foros.velneo.com/u/tic-software)\
**Post date:** [1 Febrero, 2016 11:41 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/45 "2016-02-01T11:41:27Z")

</div>

Gracias por tu aporte wikan, a ver si lo puedo probar!

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 12:36 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/46 "2016-02-01T12:36:16Z")

</div>

Gracias Wikan, Lo prueba y te paso comentarios

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 13:04 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/47 "2016-02-01T13:04:23Z")

</div>

Buenas, si por favor.  
Sobre todo la ordenación uno ascendente y otro descendente. A mi por lo pronto no me funciona. Incluso si alguien lo prueba directamente mejor que mejor.

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 13:46 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/48 "2016-02-01T13:46:15Z")

</div>

Hola Wikan,  
Hay algo que falla, no devuelve ningún registro. Las variable no dene estar bien definidas

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 14:33 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/49 "2016-02-01T14:33:01Z")

</div>

Ten en cuenta que ahora entra y sale la definición del informe.

```auto
var informeDfn = theRoot.varToString("INF_DEF" );
...
theRoot.setVar("INF_DEF", informeDfn);

```

Tienes que capturas la variable INF\_DEF en el proceso para luego para pasarlo de nuevo al proceso que hace las salidas

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 14:46 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/50 "2016-02-01T14:46:14Z")

</div>

Hola Wikan,  
El código debe estar incompleto. Falta definir la variable sortArray, y da error en “list”

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 14:54 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/51 "2016-02-01T14:54:51Z")

</div>

Paso código final:

```auto
var list = theRegisterListIn;
var informeDfn = theRoot.varToString("INF_DEF" );
var regex = /(?:groupExp="\w*\.\#)(\w*(?:\.\w*)*)(?:\-(DES))*/gi
var myArray = [];
var sort = "";
var sortArray = [];
var orden;

while ((myArray = regex.exec(informeDfn)) !== null){
	sort = myArray[1].replace("#", "");
	sortArray.push(sort);
	orden = (myArray[2] === "DES") ? true : false;
	sortArray.push(orden);
}
// Quitamos la marca de orden
informeDfn = informeDfn.replace(/(groupExp="\w*\.\#\w*(?:\.\w*)*)(\-DES)*/gi, "$1");
theRoot.setVar("INF_DEF", informeDfn);

if(sortArray.length){
	list.sort.apply(this,sortArray);
}
theRegisterListOut.append( list );

```

Tengo un informe con dos agrupaciones. La segunda no la ordena nunca.  
La terminación “-DES” para el orden no funciona. Se come muchos registros sin ordenar y no agrupa bien los registros.

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 16:17 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/52 "2016-02-01T16:17:59Z")

</div>

En el mismo proceso que llamas a este script, que le pasas la variable INF\_DEF con la definición del informe, estás haciendo después de dispararlo un get para obtener nuevamente INF\_DEF y pasarlo al proceso final que gestiona las salidas?

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 17:01 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/53 "2016-02-01T17:01:06Z")

</div>

Si (adjunto imagen)  
Tengo un informe agrupado por “AGENTE” y dentro de cada agente tiene la agrupación de “CLIENTE”.  
Los Agentes bien, pero los clientes de cada agente los presenta por el orden de la lista, es decir, por fecha. Dentro de cada agente existen muchas agrupaciones de un mismo Cliente.  
A ti te funciona?

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/e/e507c9c3a3a6e43f8fe9d46a6ea47614cbb01cbc.png)

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 17:19 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/54 "2016-02-01T17:19:23Z")

</div>

Es decir, tienes…agrupación de AGENTE y CLIENTE definida en el vReport.

Y en el debug, ves que se crea bien el array para enviar a la función sort?

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 17:32 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/55 "2016-02-01T17:32:46Z")

</div>

No puedo poner ningún punto de interrupción en el proceso, cada vez que lo intento se cuelga vDevelop

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 17:40 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/56 "2016-02-01T17:40:22Z")

</div>

?¿?¿?  
Yo lo pongo sin ningún problema, en que versión estás trabajando. No sé, luego lo pruebo. Vuelve al código anterior si te funciona, aunque sea siempre en orden ascendente.

Disculpa

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 18:02 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/57 "2016-02-01T18:02:51Z")

</div>

Luis, ahora no recuerdo de memoria. El get debajo justo del disparar te devuelve bien la definición del informe o tiene que estar a la misma altura que el disparar objecto??

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [1 Febrero, 2016 18:29 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/58 "2016-02-01T18:29:11Z")

</div>

Hola Wikan,  
Te devuelve el valor correcto de las dos formas.  
Estoy en la última versión de vDevelop.  
Con el código anterior, la primera agrupación me la ordena bien, pero la segunda (CLIENTE), no la ordena bien, salen varias agrupaciones del mismo cliente  
Tela!

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [1 Febrero, 2016 18:39 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/59 "2016-02-01T18:39:11Z")

</div>

Lo malo es que no te va el debug, me gustaría ver si la definición de informe que sale te ha quitado bien el -DES.  
De todas formas, con la segunda opción. Si no le pones el indicador -DES debería salirte el informe aunque sea siempre de manera ascendente

Es decir la sección groupExp=“CAMPO.CAMPO.CAMPO-DES” debe salir del proceso groupExp=“CAMPO.CAMPO.CAMPO”  
Y si no le pones el indicador, debe ordenar por ambos campos, en teoría.

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [1 Febrero, 2016 18:49 UTC](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497/60 "2016-02-01T18:49:34Z")

</div>

Hola Manuel, Luis.

No entiendo muy bien el sentido de este código. Si la función sort() del API no ordena por más de un campo, es inútil ordenar por más de una agrupación.  
La función sort() es un desastre y debería Velneo hacer algo urgente al respecto.

¿ No sería más sencillo ordenar previamente la Lista con comandos nativos de Velneo que sí permiten ordenar por n-campos y en cualquier sentido ?  
Si queremos personalizar el código, en el API también tenemos funciones para ordenar las Listas, a excepción de la función sort() claro.

En cuanto en dónde poner el Get variable local …, en este caso debe ir en el subproceso de Disparar objeto porque tenemos una Salida asignada al proceso con theRegisterListOut.append(list).

Saludos  
Paco Satué

[Página anterior](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497.md?page=2)

[Página siguiente](https://foros.velneo.com/t/vreport-orden-en-los-informes/7497.md?page=4)
