In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

FR extraño comportamiento en Datasets

FastReport for Xailer & [x]Harbour (English/Spanish)
Responder
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

FR extraño comportamiento en Datasets

Mensaje por bingen »

Buenas Ignacio, cuando enviamos un dataset a FR, bien con AddDataSet o directamente cargandolo en un objeto FR (lo puedes ver en vuestro ejemplo C:\Xailer\Samples\FastReport\MemDataSet.prg) el Dataset asignado lo pones en un Masterdata y perfecto, pero para muchas cosas viene bien simplemente poner campos sobre la propia hoja de FR o en otra banda que no sea un MasterData, como la del título.

Así lo hemos hecho hasta ahora e iba bien, pero ahora resulta que a pesar de estar el Dataset original por ejemplo, en el registro 5 de 20, cuando lo pasamos al FR y pedimos que nos ponga un campo sin el Masterdata siempre sale el campo del último registro y no del registro en el que está el dataset original y claro nos causa muchos quebraderos de cabeza.

Imagina que el FR es un diploma del alumno seleccionado, que es un FR3 con simples campos sobre el papel que tiene un fondo de diploma, pues ahora el último alumno es al que sale en todos los diplomas.

Se puede hacer algo, he intentado incluso sobrecargar el AddDataSet pero no hay manera.

Muchas gracias.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: FR extraño comportamiento en Datasets

Mensaje por ignacio »

Buenas tardes Bingen,

Los datasets alimentan a FR y una vez alimentado se produce una casi absoluta desconexión entre el dataset original de Xailer y el dataset de FR. Es FR el que luego y según como se haya incorporada el dataset en el informe hará la navegación a través del mismo. Es decir, FR tiene que saber como navegar a través del dataset que no está en el MasterData. Supongo que a lo mejor por scripting y con los eventos de FR podrías modificar la posición del cursor del segundo dataset o incuso aún más sencillo establecer una relación entre ambas tablas. Si se te complica, lo más sencillo es que utilices funciones o variables.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: FR extraño comportamiento en Datasets

Mensaje por bingen »

Hola Ignacio, buenos días, sigo pegándome con esto.

Creo que lo que me dices es impracticable, resulta que el odataset que contiene FR si que está en el registro que tiene que estar, es decir que si el FRDataSet que yo alimento está en el registro 6 de 20 y pruebo los eventos
::OnAfterLoad:={|o| Logdebug(o:aDataSets[1]:oDataSet:RecNo())}
::OnBeforePrint:={|o| Logdebug(o:aDataSets[1]:oDataSet:RecNo())}
todo el rato incluso antes de imprmir cada línea del MasterData me dice que estoy en el recno() = 6 pero si pongo un campo como te decía fuera del masterdataset, por ejemplo en la banda del título que se ejecuta antes del masterdataset, ese campo siempre tiene el valor del útimo registro del dataset, el 20 ¿?¿?¿?¿?¿?¿?

O sea que no puedo hacer nada para que el oDataSet se resitue por que ya lo está, raro no? Antes no pasaba y no se desde cuando está pasando por que me he dado cuanta con la última versión.

Con variables podría hacerlo pero me va a tocar retocar docenas de FR3 y meter muchas líneas de código.

Si se te ocurre otra cosa me comentas por favor.

Gracias.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: FR extraño comportamiento en Datasets

Mensaje por ignacio »

bingen escribió:Hola Ignacio, buenos días, sigo pegándome con esto.
... resulta que el odataset que contiene FR si que está en el registro que tiene que estar ...
La pregunta correcta a hacerse es: ¿Cómo se recorre el dataset secundario por FR mientras se recorre el dataset principal también por FR? Por lo que intuyo, pretendes añadir un dataset que es completamente tonto, en el sentido de que no tiene ni idea de como moverse y por lo tanto no se mueve y está siempre parada en el mismo registro.
bingen escribió:O sea que no puedo hacer nada para que el oDataSet se resitue por que ya lo está, raro no?
Lo que es raro es que el dataset sepa lo que pretendes hacer tu con él por ciencia infusa. O es master-data o es una dataset que tiene una relación con el master-data.
bingen escribió:Antes no pasaba y no se desde cuando está pasando por que me he dado cuanta con la última versión.
Permíteme que lo dude y más aún cuando desde la última versión sólo se han hecho unos simples retoques.

Voy a intentar explicar como funciona FR, ya no sólo con Xailer, sino también con Delphi, .NET y cualquier otro entorno de desarrollo (te adelanto que lo que hacía Sergey no me importa demasiado, lo siento ;-)):

Toda la información de cualquier dataset los recibe FR en el momento que se cargan sus datos con la instrucción oFRDataset:Load(). Esta operación se hace en bloque, antes de que se realice ningún tipo de impresión. Todos los datos se almacenan en un dataset de memoria que el propio FR gestiona. Por lo tanto, es absolutamente normal que el recno() de tu Dataset de Xailer esté en Eof().

¿Cómo se consigue que la posición de un dataset cambie con el movimiento de otro dataset? A través de una relación. Así de fácil. Es decir, cuando se construye el listado, los datasets están en principio completamente cargados y es responsabilidad de FR establecer la navegación de los datasets secundarios cuando se mueve el principal. Y está absolutamente contraindicado el cambiar manualmente la posición de su cursor, por motivos obvios.

El único mecanismo que existe de sincronización entre FR y Xailer es en sentido contrario al que tu demandas. Y es que cuando FR navega por SUSdatasets existe la posibilidad (que consume recursos) de que tus datasets de Xailer actualicen su posición. Y dicha propiedad se llama: TFastReport:lSynchroData. Pero el hecho de que tu te muevas por tus dataset de Xailer a FR no le afecta lo más mínimo. Y esto es así desde la versión 0.01. Lo siento.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder