PIENSO-PIENSO: Trabajar con Facturas (Excel y PDF) - Continuacion.

En el post Pienso-Pienso: Trabajar con Facturas.(SOLUCIONES) comentaba como podia resolverse el problema de hacer un trabajar con sobre una tabla, pero filtrando por otra, sin repetir renglones en la grilla. 

Esto es relativamente fácil de lograr y la solución es general y se aplica a todos los patrones WW que conozco. 

Hablando específicamente del pattern WorkWithPlus, no es tan sencillo de lograr que se respeten los filtros en los programas que generar Excel y PDF y mantener el programa enganchado a la instancia. 

Lo que quiero lograr, es que se el reporte PDF y la planilla excel pueda generarse con los renglones que tengo filtrados en mi grilla del trabajar con . Ademas debería poder agregar filtros nuevos y columnas a la instancia y que los programas se regeneren sin tener que hacer volver a tocarlos. De esta forma, es la que permite sacar mayor provecho de los patterns y donde se ve la verdadera ventaja de utilizarlos. 

Para la generación de Excel, desde el soporte de WorkwithPlus, me pasaron la siguiente solución (es un poco rebuscada, pero funciona). 

El problema fundamental es que si bien el pattern hoy tiene pensado lugares para introducir código del usuario, no hay ningún lugar que permita no grabar determinados registros o influir en las condiciones del for each, pues el código generado es de la forma


Como se ve, puedo poner código antes y después del for each y dentro de las rutinas, pero si modifico algo del código dentro del for each, el mismo va a ser pasado por arriba, si llego a modificar la instancia, cosa que me haría perder mis cambios. 

La mejor solución que encontramos fue la siguiente:
Cuando hay un registro que por el filtro sobre la segunda tabla no debe ser mostrado, el mismo se graba en la fila 2 de la planilla que siempre se graba vacía y al terminar, se limpia dicha fila.

En la rutina BeforeWriteLine poner el código:

y en 


Para terminar, hay que borrar todo el contenido de la linea 2, que fue la que usamos para grabar todos los registros que estaban en la tabla principal, pero que no eran filtrados por el filtro de la segunda tabla. 

En la rutina CloseDocument hay que poner el código:


Con esas tres sencillas modificaciones, logramos que la planilla generada tenga los registros filtrados y va a seguir funcionando si algun dia le agregamos filtros o le agregamos/quitamos alguna columna a lo que queremos mostrar en la grilla. 

Generación de PDF
Con la generación del PDF no tenemos tanta suerte, porque no hay forma de imprimir algo sin que salga en el reporte en algún lado. La opción que hoy tenemos es generar el programa, modificarlo y salvarlo cambiado y luego invocarlo como un programa no generado por patterns. 

Sugerencia para próximas versiones
Las próximas versiones deberían contar con alguna solución para estos problemas que no parecen tan raros, al menos a mi se me han presentado muchas veces. 

Mi sugerencia es que generen código de la forma:


De esa forma, se podría modificar la rutina WriteLine y agregar ahí el código necesario, sin tener que hacer otro tipo de maniobra extraña.  En caso de no usar data selector, habría que agregar un USING para que tomara los atributos correctos. 
Esta solución también serviría para la generación de PDF 


Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.