Reportes descuadrados VFP 9

861 views
Skip to first unread message

Angel Ferreira

unread,
Jul 7, 2011, 12:18:57 PM7/7/11
to Comunidad de Visual Foxpro en Español
Buenos dias a todos,

Amigos, despues de pasar largas horas desarrollando un Previewer
personalizado con las nuevas bondades del generador de reportes de
VFP9 y el ReportListener, me encuentro con la desagradable sorpresa
de que muchos de mis reportes en la vista previa se ven con ***** en
los campos numericos y algunas etiquetas de texto quedan incompletas :
(

Lamentablemente el reporte con el que estaba probando la construccion
del previewer salia bien y no me di cuenta del problema hasta que puse
en produccion la clase.

Leyendo me di cuenta que parece ser un problema en la forma que GDI +
presenta las etiquetas alineadas a la derecha.

http://www.portalfox.com/index.php?name=News&file=article&sid=2221&mode=nested&order=0&thold=0

Alguno de ustedes sabe como resolver este problema que no sea entrando
a cada uno de los reportes y alargando los objetos?

Se les agradece mucho la ayuda. Actualmente estoy desmontando la
version del Previewer para volver a la antigua...

Gracias a todos anticipadamente...

Saludos,
Angel Ferreira.

Mauricio Molinero,

unread,
Jul 7, 2011, 5:32:07 PM7/7/11
to Comunidad de Visual Foxpro en Español
Hola Angel!,

Desconozco la falla con gdi+, sino la encuentras vas a tener que
agrandar todos los reportes..

Porque no utilizas FoxyPreviewer ?

Saludos!

Mauricio R. Molinero,

Angel Ferreira

unread,
Jul 7, 2011, 7:27:12 PM7/7/11
to Comunidad de Visual Foxpro en Español
Hola Mauricio,

Gracias por responder...el tema de FoxyPreviewer es que cuando
comenzamos el desarrollo de nuestro propio Listener, no teniamos
conocimiento de esa maravillosa clase. Ya cuando estabamos en un 70%
aproximadamente del desarrollo de nuestra clase fue que nos enteramos
de su existencia. Decidimos a esas alturas, terminar la nuestra y
asi tener una interface visual mas consona con nuestra aplicacion.

De todas maneras creo que el mismo problema debe presentarse en
FoxyPreviewer porque usa la misma tecnologia.

Revisa este articulo para que veas mas profundo de lo que se trata:

http://www.portalfox.com/index.php?name=News&file=article&sid=2221&mode=nested&order=0&thold=0

Saludos,
Angel Ferreira.

Irlandes 1960

unread,
Jul 8, 2011, 11:43:37 AM7/8/11
to publice...@googlegroups.com
Hola Angel
A mi paso lo mismo, aunque solo lo note en campo numericos con formatos, tipico los importes 999,999.99 que me aparecen con estrellitas.
Lo que hago es que el generador del TIF copie el reporte y achique el fontsize en -1 de todos los campos con formato, ejecute ese formato modificado en lugar del original, y luego lo borre. esto me evita tener que modificar todos los formatos de impresion que encima x vista previa se ven fenomeno.
Te adjunto mi version retocada del mptifflistener, que cambia un poco en el arranque.
Suerte.

mptifflistener.rar

Angel Ferreira

unread,
Jul 9, 2011, 12:41:29 PM7/9/11
to Comunidad de Visual Foxpro en Español
Hola Irlandes 1960,

Un millon de gracias por tu respuesta y esa gran idea :)

En mi caso en particular, tomando tu idea, en vez de jugar con el
FontSize, jugue con el campo Width.

Me di cuenta que si un reporte tiene la especificacion de que se mide
el Pixeles ( Boton derecho en el reporte, Propiedades, Tab Ruler/
Grid, Units), cada pixel se almacena en el campo Width del reporte
con el valor de 104.167, es decir, 1 pixel de ancho para un objeto
es igual a tener el valor 104.167 grabado en el campo Width.
Adicionalmente los objetos que muestran numeros en los reportes en el
campo FILLCHAR se llenan con el valor "N".

Si cambias la unidad de medida del reporte, el valor del objeto en el
campo Width sigue siendo el mismo, por ejemplo, si coloco un objeto
y le digo que tiene 1 pixel de ancho y luego cambio la unidad de
medida a Centimetros, me voy a dar cuenta que el objeto mide 0.02 cm
dentro del Generador de Reportes de Fox, pero lo mejor del caso es
que el valor que se almacena en el Width no es el 0.02 de los
centimetros, sino que sigue manteniendo el 104.167 de los Pixeles :),
Fox hace la conversion solo a nivel visual en el Genrador de
Reportes, pero sigue grabando el valor en la tabla en Pixeles. Esto
es un punto menos a controlar.

Lo anterior permite aumentar a 1 solo pixel cada objeto sin estar
pendiente en que unidad de medida fue construido el reporte. En mi
caso en particular lo que hice lo mismo que tu:

1. Copie el Reporte Original a un reporte Temporal
2. Abri el Reporte Temporal
3. Aumente en un Pixel el campo Width del Reporte --> UPDATE
MyReport SET Width = Width + 104.167 WHERE FillChar = "N" AND NOT
EMPTY( Picture )
4. Ejecuto el reporte con el Listener que sea
5. Borro el reporte temporal al salir

Lo mejor de esto, es que aumentar el campo WIDTH en un solo pixel no
es casi nada en el efecto visual del reporte, pero es el ancho
adicional que necesita un objeto en el reporte para evitar el
comportamiento del GDI+ y el ancho del campo crece hacia la
IZQUIERDA, es decir, no se descuadra la posicion del campo numerico
porque a nivel de la derecha queda igual.

Pruebalo Irlandes, solo tienes que cambiar en tu codigo, donde dice
FontSize por el campo Width y sumarle los 104.167 correspondientes al
Pixel y por favor nos comentas.

Saludos,
Angel Ferreira
>  mptifflistener.rar
> 1 KVerDescargar

Cesar VfpImaging

unread,
Jul 11, 2011, 8:32:48 AM7/11/11
to publice...@googlegroups.com
Hola Angel,
 
Si, te confirmo que eso se pasara tambien con FoxyPreviewer.
Mismo sin utilizar los ReportListeners, al problema aparece si tienes el comando SET REPORTBEHAVIOR 90.
 
No hay una solucion simples.
Lo que hice yo fue crear una funccion simples que agrando todos mis campos de mis reportes en 10 puntos. Mi PRG verifico todos los FRX de mi proyecto, y aumento en 10 puntos el campo "Width" de los campos con "OBJTYPE = 8" del FRX. y eso fue lo suficiente.
 
Otra cosa que puedes hacer es utilizar un ReportListener de Cathy Pountney (supongo yo) que hace una reduccion automatica del tamaño de la fuente para que pueda aparecer en tu reporte.
 
Pienso en implementar eso en Foxypreviewer en el futuro, pero eso va traer una pierda de performance. Como es un "problema" de VFP9 "por defecto" no se si es recomendable.
 
AHA !!!
Tuve una idea, que si es posible...
Es posible "agrandar" los campos automaticamente...
 
 
Intente otra cosa:
En el metodo "RENDER" de tu ReportListener, ponga lo siguiente:
 
LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage
 
DODEFAULT(tnFRXRecNo, tnLeft, tnTop, tnWidth + 10, tnHeight, ;
 tnObjectContinuationType, tcContentsToBeRendered, tiGDIPlusImage)
 
 
Como se queda ?
Asi es muy sensillo, y no teneras que hacer ningun cambio importante !
Aguardo tu respuesta.
 
Saludos
 
Cesar


 
2011/7/7 Angel Ferreira <ange...@gmail.com>

Jose Luis Alzabe

unread,
Jul 11, 2011, 10:57:05 AM7/11/11
to publice...@googlegroups.com
por favor necesito saber si me pueden ayudar con el boton de radio, como se usa y que hay que hacer para que funcione.- Es la primera vez que voy a usar esta herramienta.- Muchas gracias.- Saludos
--
Jose Luis Alzabe

Luis Mata

unread,
Jul 11, 2011, 12:10:39 PM7/11/11
to publice...@googlegroups.com
y Sigue.........Otro terco???????

Cesar VfpImaging

unread,
Jul 11, 2011, 4:56:41 PM7/11/11
to publice...@googlegroups.com
Angel,
 
Acabo de intentar con el cambio de tnWidth somente, pero asi no funciona.
Pero tengo buenas noticias, es posible hacer un cambio automatico. El truco esta en utilizar el emtodo "EvaluateContents" juntamente con el "Render".
En EvaluateContents, verifique si el Objecto.Text = "****"
Si positivo, puedes cambiar el valor para el que esta en TRANSFORM(Objecto.Value)
O entonces cambiar el FontSize, reduzindo el valor original.
 
Espero que le ayude.
Luego estara disponible una nueva propiedad en FoxyPreviewer que automatizara todo el proceso :-D
 
Saludos
 
Cesar
 
 


 
2011/7/11 Cesar VfpImaging <cch...@gmail.com>

Angel Ferreira

unread,
Jul 11, 2011, 10:42:36 PM7/11/11
to Comunidad de Visual Foxpro en Español
Hola Cesar,

En primer lugar, gracias por tu respuesta.

Justo ahora iba a comentar sobre la solucion de incrementar el Width.
Lo probe y en mi caso funciona solo para algunos reportes.

Voy a probar lo que dices de usar el Metodo EvaluateContents
juntamente con el Render y te aviso.

Saludos,
AF

On 11 jul, 16:56, Cesar VfpImaging <ccha...@gmail.com> wrote:
> Angel,
>
> Acabo de intentar con el cambio de tnWidth somente, pero asi no funciona.
> Pero tengo buenas noticias, es posible hacer un cambio automatico. El truco
> esta en utilizar el emtodo "EvaluateContents" juntamente con el "Render".
> En EvaluateContents, verifique si el Objecto.Text = "****"
> Si positivo, puedes cambiar el valor para el que esta en
> TRANSFORM(Objecto.Value)
> O entonces cambiar el FontSize, reduzindo el valor original.
>
> Espero que le ayude.
> Luego estara disponible una nueva propiedad en FoxyPreviewer que
> automatizara todo el proceso :-D
>
> Saludos
>
> Cesar
>
> 2011/7/11 Cesar VfpImaging <ccha...@gmail.com>
> > 2011/7/7 Angel Ferreira <angel...@gmail.com>
>
> >> Hola Mauricio,
>
> >> Gracias por responder...el tema de FoxyPreviewer es que cuando
> >> comenzamos el desarrollo de nuestro propio Listener,  no teniamos
> >> conocimiento de esa maravillosa clase.  Ya cuando estabamos en un 70%
> >> aproximadamente del desarrollo de nuestra clase fue que nos enteramos
> >> de su existencia.  Decidimos a esas alturas,  terminar la nuestra y
> >> asi tener una interface visual mas consona con nuestra aplicacion.
>
> >> De todas maneras creo que el mismo problema debe presentarse en
> >> FoxyPreviewer porque usa la misma tecnologia.
>
> >> Revisa este articulo para que veas mas profundo de lo que se trata:
>
> >>http://www.portalfox.com/index.php?name=News&file=article&sid=2221&mo...

Cesar VfpImaging

unread,
Jul 11, 2011, 11:02:52 PM7/11/11
to publice...@googlegroups.com
Muy bien :-)
Acabo de implemetar una nueva propiedad, "lExpandFields" en FoxyPreviewer.
Por Default esta en ".F."
Sila pones en .T., los campos aumentaran automaticamente, para permitir que todo el texto aparesca.
 
Ejemplo:
 
_Screen.oFoxyPreviewer.lExpandFields = .T.
REPORT FORM .... PREVIEW
 
 

 
2011/7/11 Cesar VfpImaging <cch...@gmail.com>

Angel Ferreira

unread,
Jul 12, 2011, 1:03:48 AM7/12/11
to Comunidad de Visual Foxpro en Español
Cesar,

Mira la implementacion de esta solucion tomando en cuenta lo que
comentaste, esto lo hago en el Metodo EvaluateContents:

LPARAMETERS nFRXRecno, oObjProperties

* -- Solucion al problema existente de los Asteriscos en campos
numericos

WITH oObjProperties
IF VARTYPE(.Value) == "N" AND SUBSTR(.Text,1,1)="*" && Si el tipo
de dato es numerico y el texto es un *
LOCAL iCurrSession
iCurrSession = SET("DataSession")
SET DATASESSION TO (THIS.FRXDataSession)
SELECT frx
GOTO nFRXRecno

* -- Se vuelve a transformar el valor y se eliminan las Comillas
Dobles ( " )
.Text = SPACE(1) + STRTRAN( TRANSFORM( .Value , frx.Picture ),
["], [] )
.Reload = .T.
ENDIF
ENDWITH

DODEFAULT( nFRXRecno, oObjProperties )


El unico detalle es que baja el performance de la emision del Reporte.

Saludos,
AF



On 11 jul, 23:02, Cesar VfpImaging <ccha...@gmail.com> wrote:
> Muy bien :-)
> Acabo de implemetar una nueva propiedad, "lExpandFields" en FoxyPreviewer.
> Por Default esta en ".F."
> Sila pones en .T., los campos aumentaran automaticamente, para permitir que
> todo el texto aparesca.
>
> Ejemplo:
>
> DO FOXYPREVIEWER.APP
> _Screen.oFoxyPreviewer.lExpandFields = .T.
> REPORT FORM .... PREVIEW
>
> 2011/7/11 Cesar VfpImaging <ccha...@gmail.com>
>
>
>
>
>
>
>
> > Angel,
>
> > Acabo de intentar con el cambio de tnWidth somente, pero asi no funciona.
> > Pero tengo buenas noticias, es posible hacer un cambio automatico. El truco
> > esta en utilizar el emtodo "EvaluateContents" juntamente con el "Render".
> > En EvaluateContents, verifique si el Objecto.Text = "****"
> > Si positivo, puedes cambiar el valor para el que esta en
> > TRANSFORM(Objecto.Value)
> > O entonces cambiar el FontSize, reduzindo el valor original.
>
> > Espero que le ayude.
> > Luego estara disponible una nueva propiedad en FoxyPreviewer que
> > automatizara todo el proceso :-D
>
> > Saludos
>
> > Cesar
>
> > 2011/7/11 Cesar VfpImaging <ccha...@gmail.com>
> >> 2011/7/7 Angel Ferreira <angel...@gmail.com>
>
> >>> Hola Mauricio,
>
> >>> Gracias por responder...el tema de FoxyPreviewer es que cuando
> >>> comenzamos el desarrollo de nuestro propio Listener,  no teniamos
> >>> conocimiento de esa maravillosa clase.  Ya cuando estabamos en un 70%
> >>> aproximadamente del desarrollo de nuestra clase fue que nos enteramos
> >>> de su existencia.  Decidimos a esas alturas,  terminar la nuestra y
> >>> asi tener una interface visual mas consona con nuestra aplicacion.
>
> >>> De todas maneras creo que el mismo problema debe presentarse en
> >>> FoxyPreviewer porque usa la misma tecnologia.
>
> >>> Revisa este articulo para que veas mas profundo de lo que se trata:
>
> >>>http://www.portalfox.com/index.php?name=News&file=article&sid=2221&mo...

Cesar VfpImaging

unread,
Jul 12, 2011, 2:52:42 AM7/12/11
to publice...@googlegroups.com
Perfecto.

>>El unico detalle es que baja el performance de la emision del Reporte.
Desafortunadamente, no hay lo que hacer. el metodo EvaluateContents torna todo el proceso muy mas lento. El el caso de FoxyPreviewer, esta es la razon que mantuve la nueva propiedad como no default.
Despues de los reportes de SP2, el metodo CallEvaluateContents paso a no ser llamado automaticamnete, y la propiedad ""CallEvaluateContents" paso a no ser mas default. Por eso, tenemos que cambiar el valor desta propiedad en el metodo "BeforeBand", si utilizamos los ReportListeners de SP2.
 
Mirando tu ejemplo, supongo que estas utilizando la clase base ReportListener, cierto ?
 
 
Personalmente, yo no voy utilizar la nueva propiedad en mis aplicativos. Como ya te cuente, he aumentado el tamano del Width de los campos de mis FRX y listo.
 
He creado la propiedad porque la gente que utiliza FoxyPreviewer insisten que eso es un bug de la herramienta, etc. Bien, ahora tienen una nueva opcion :-D.
 
Una pregunta: Por que colocaste el SPACE(1) al inicio de la nueva string ? Hay una razon en especial ?
 
Saludos
 
Cesar

 
2011/7/12 Angel Ferreira <ange...@gmail.com>

Angel Ferreira

unread,
Jul 12, 2011, 8:29:54 AM7/12/11
to Comunidad de Visual Foxpro en Español
Hola Cesar,

La razon del Space(1), es porque TRANSFORM( .Value , frx.Picture ) ,
retorna:

" 435.90 " incluyendo las comillas dobles ( " ) y al
eliminarlas con la funcion STR(), se rueda el texto un espacio hacia
la Izquierda....

Un Abrazo!!!!!

Saludos,
AF

On 12 jul, 02:52, Cesar VfpImaging <ccha...@gmail.com> wrote:
> Perfecto.
>
> >>El unico detalle es que baja el performance de la emision del Reporte.
>
> Desafortunadamente, no hay lo que hacer. el metodo EvaluateContents torna
> todo el proceso muy mas lento. El el caso de FoxyPreviewer, esta es la razon
> que mantuve la nueva propiedad como no default.
> Despues de los reportes de SP2, el metodo CallEvaluateContents paso a no ser
> llamado automaticamnete, y la propiedad ""CallEvaluateContents" paso a no
> ser mas default. Por eso, tenemos que cambiar el valor desta propiedad en el
> metodo "BeforeBand", si utilizamos los ReportListeners de SP2.
>
> Mirando tu ejemplo, supongo que estas utilizando la clase base
> ReportListener, cierto ?
>
> Personalmente, yo no voy utilizar la nueva propiedad en mis aplicativos.
> Como ya te cuente, he aumentado el tamano del Width de los campos de mis FRX
> y listo.
>
> He creado la propiedad porque la gente que utiliza FoxyPreviewer insisten
> que eso es un bug de la herramienta, etc. Bien, ahora tienen una nueva
> opcion :-D.
>
> Una pregunta: Por que colocaste el SPACE(1) al inicio de la nueva string ?
> Hay una razon en especial ?
>
> Saludos
>
> Cesar
>
> 2011/7/12 Angel Ferreira <angel...@gmail.com>

Angel Ferreira

unread,
Jul 12, 2011, 8:40:06 AM7/12/11
to Comunidad de Visual Foxpro en Español
Si Cesar,

La version que usamos es la base del Listener de VFP.

Codigo que ejecuto antes de Emitir el informe:

*
------------------------------------------------------------------------------------------------------------------------------------------------------------
* Se debe realizar este cambio en el reporte para evitar el
truncamiento de los campos Numericos
* Esta solucion fue dada en portalfox por el usuario "Irlandes 1960" y
apoyada por Samir y Cesar en Foxite
* Lo que hacemos es abrir el reporte como una tabla y aumentar el
campo With a un pixel mas
*
-------------------------------------------------------------------------------------------------------------------------------------------------------------
LOCAL lcSaf
lcSaf = SET("Safety")
SET SAFETY OFF

cFormato1 = "MiReporte"

COPY FILE ( cFormato1 + ".frx" ) TO ( cFormato1 + "1.frx" )
COPY FILE ( cFormato1 + ".frt" ) TO ( cFormato1 + "1.frt" )

USE ("MiReporte.frx") IN 0 ALIAS ReporteTemp
UPDATE ReporteTemp SET Width = Width + 100 WHERE FillChar="N"
USE IN ReporteTemp

*
--------------------------------------------------------------------------
* Se emite el reporte y se vuelve a colocar el printer por defecto
*
--------------------------------------------------------------------------
REPORT FORM (cFormato1) OBJECT oRL NOWAIT NOCONSOLE NODIALOG
SET PRINTER TO DEFAULT

*
------------------------------------------------------------------------------
* Se borra el reporte temporal
*
------------------------------------------------------------------------------
DELETE FILE ( cFormato1 + ".*" )
SET SAFETY &lcSaf.

Saludos,
AF

Angel Ferreira

unread,
Jul 12, 2011, 8:46:27 AM7/12/11
to Comunidad de Visual Foxpro en Español
Cesar una pregunta....

Como haces tu para relizar la busqueda de Texto en los Reportes ?

Saludos!!!!

Cesar VfpImaging

unread,
Jul 12, 2011, 9:05:00 AM7/12/11
to Comunidad de Visual Foxpro en Español
Gracias !
> > > > >>> > Mauricio R. Molinero,- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Cesar VfpImaging

unread,
Jul 12, 2011, 11:40:57 AM7/12/11
to publice...@googlegroups.com
Hola Angel,
 
>>Como haces tu para relizar la busqueda de Texto en los Reportes ?
Esto es realmente complicado. Te sugiro que mires en los fuentes de Foxypreviewer. Mi punto de partida fue un articulo de Doug Hennig.
 
Alla el utiliza un visualizador nuevo para muestrar los reportes. En Foxypreviewer el desafio fue utilizar el Previsualizador original, y eso realmente me tomo mucho tiempo.
 
Saludos
 
Cesar


 
2011/7/12 Angel Ferreira <ange...@gmail.com>
Reply all
Reply to author
Forward
0 new messages