Página 1 de 1

oReport:NewPage()

Publicado: Mar Dic 26, 2006 12:46 pm
por jose.luis
Hola,
En el evento onpostend de un report lanzo un NewPage. Sin embargo no
consigo el salto de página. El código es algo parecido a esto:
static function MiOnPostEnd( or ) // or -> objeto oReport
IF oR:LinesLeft() <= 9
or:oDevice:oCanvas:Textout(500,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la siguiente
página")
oR:NewPage()
ENDIF
.....
....
RETURN NIL
El texto "Totales en la siguiente página" aparece en el listado, sin
embargo... todo lo que se imprime después de esta manera:
or:NewLine()
or:oDevice:oCanvas:Textout(650, oR:oDevice:oCanvas:PixelsToMapMode(
0,
oR:nRow)[2]," ************************************************************ ***** ")
or:NewLine()
or:oDevice:oCanvas:Textout( 650,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Clientes Frecuencia S
:")
Sale a continuación (en la misma página), sin conseguir hacer el salto de
linea.
¿Por donde puedo mirar para hacer correctamente el salto de página?
Saludos y gracias,
José Luis Capel

oReport:NewPage()

Publicado: Mar Dic 26, 2006 1:21 pm
por ignacio
José Luis,
Compruebo que no se permite llamar al método EndPage() desde el evento
OnPostEnd() ya que dicho evento se ejecuta precisamente dentro del método
EndPage(). Internamente NewPage() llama al método EndPage().
Simplemente sustituye la llamadad a NewPage() por lo siguiente:
WITH OBJECT oReport:oDevice
:EndPage()
:StartPage()
END WITH
Modificaré el método para que haga lo mismo.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45910b68@news.xailer.com...]45910b68@news.xailer.com...[/email]
> Hola,
>
> En el evento onpostend de un report lanzo un NewPage. Sin embargo no
> consigo el salto de página. El código es algo parecido a esto:
>
> static function MiOnPostEnd( or ) // or -> objeto oReport
>
> IF oR:LinesLeft() <= 9
> or:oDevice:oCanvas:Textout(500,
> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la
> siguiente página")
> oR:NewPage()
> ENDIF
>
> ....
> ...
> RETURN NIL
>
> El texto "Totales en la siguiente página" aparece en el listado, sin
> embargo... todo lo que se imprime después de esta manera:
>
> or:NewLine()
> or:oDevice:oCanvas:Textout(650,
> oR:oDevice:oCanvas:PixelsToMapMode( 0,
> oR:nRow)[2]," ************************************************************ ***** ")
> or:NewLine()
> or:oDevice:oCanvas:Textout( 650,
> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Clientes Frecuencia S
> :")
>
>
> Sale a continuación (en la misma página), sin conseguir hacer el salto de
> linea.
>
> ¿Por donde puedo mirar para hacer correctamente el salto de página?
>
> Saludos y gracias,
> José Luis Capel
>
>
>

oReport:NewPage()

Publicado: Mar Dic 26, 2006 4:38 pm
por jose.luis
Ignacio,
Mírate, por favor, los dos listados que te acompaño en formato PFD.
El primero ("Listado_clientes_ruta.PDF") está generado con este código
oRp:bPostEnd := { | a | PieListado( a ) }
....
....
Static Function PieListado( oR )
IF oR:LinesLeft() <= 9
or:oDevice:oCanvas:Textout(500,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la siguiente
página")
or:NewPage()
ENDIF
or:NewLine()
or:oDevice:oCanvas:Textout(650, oR:oDevice:oCanvas:PixelsToMapMode(
0,
oR:nRow)[2]," ************************************************************ ***** ")
.....
.....
.....
El primero ("Listado_clientes_ruta2.PDF") está generado con este código
oRp:bPostEnd := { | a | PieListado( a ) }
....
....
Static Function PieListado( oR )
IF oR:LinesLeft() <= 9
or:oDevice:oCanvas:Textout(500,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la siguiente
página")
oR:oDevice:EndPage()
or:oDevice:StartPage()
ENDIF
or:NewLine()
or:oDevice:oCanvas:Textout(650, oR:oDevice:oCanvas:PixelsToMapMode(
0,
oR:nRow)[2]," ************************************************************ ***** ")
.....
.....
.....
Parece ser que algo no acabo de hacer bien.
Saludos,
José Luis Capel
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:459113d2$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
> Compruebo que no se permite llamar al método EndPage() desde el evento
> OnPostEnd() ya que dicho evento se ejecuta precisamente dentro del método
> EndPage(). Internamente NewPage() llama al método EndPage().
>
> Simplemente sustituye la llamadad a NewPage() por lo siguiente:
>
> WITH OBJECT oReport:oDevice
> :EndPage()
> :StartPage()
> END WITH
>
> Modificaré el método para que haga lo mismo.
>
> Saludos,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=45910b68@news.xailer.com...]45910b68@news.xailer.com...[/email]
>> Hola,
>>
>> En el evento onpostend de un report lanzo un NewPage. Sin embargo no
>> consigo el salto de página. El código es algo parecido a esto:
>>
>> static function MiOnPostEnd( or ) // or -> objeto oReport
>>
>> IF oR:LinesLeft() <= 9
>> or:oDevice:oCanvas:Textout(500,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la
>> siguiente página")
>> oR:NewPage()
>> ENDIF
>>
>> ....
>> ...
>> RETURN NIL
>>
>> El texto "Totales en la siguiente página" aparece en el listado, sin
>> embargo... todo lo que se imprime después de esta manera:
>>
>> or:NewLine()
>> or:oDevice:oCanvas:Textout(650,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0,
>> oR:nRow)[2]," ************************************************************ ***** ")
>> or:NewLine()
>> or:oDevice:oCanvas:Textout( 650,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Clientes Frecuencia S
>> :")
>>
>>
>> Sale a continuación (en la misma página), sin conseguir hacer el salto de
>> linea.
>>
>> ¿Por donde puedo mirar para hacer correctamente el salto de página?
>>
>> Saludos y gracias,
>> José Luis Capel
>>
>>
>>
>
>


Attached files Listado_Clientes_Ruta.pdf (9.6 KB)Â Listado_Clientes_Ruta2.pdf (12.4 KB)Â

oReport:NewPage()

Publicado: Mar Dic 26, 2006 4:41 pm
por jose.luis
Ignacio,
Mírate, por favor, los dos listados que te acompaño en formato PFD.
El primero ("Listado_clientes_ruta.PDF") está generado con este código
oRp:bPostEnd := { | a | PieListado( a ) }
....
....
Static Function PieListado( oR )
IF oR:LinesLeft() <= 9
or:oDevice:oCanvas:Textout(500,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la siguiente
página")
or:NewPage()
ENDIF
or:NewLine()
or:oDevice:oCanvas:Textout(650, oR:oDevice:oCanvas:PixelsToMapMode(
0,
oR:nRow)[2]," ************************************************************ ***** ")
.....
.....
.....
El primero ("Listado_clientes_ruta2.PDF") está generado con este código
oRp:bPostEnd := { | a | PieListado( a ) }
....
....
Static Function PieListado( oR )
IF oR:LinesLeft() <= 9
or:oDevice:oCanvas:Textout(500,
oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la siguiente
página")
oR:oDevice:EndPage()
or:oDevice:StartPage()
ENDIF
or:NewLine()
or:oDevice:oCanvas:Textout(650, oR:oDevice:oCanvas:PixelsToMapMode(
0,
oR:nRow)[2]," ************************************************************ ***** ")
.....
.....
.....
Parece ser que algo no acabo de hacer bien.
Saludos,
José Luis Capel
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:459113d2$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
> Compruebo que no se permite llamar al método EndPage() desde el evento
> OnPostEnd() ya que dicho evento se ejecuta precisamente dentro del método
> EndPage(). Internamente NewPage() llama al método EndPage().
>
> Simplemente sustituye la llamadad a NewPage() por lo siguiente:
>
> WITH OBJECT oReport:oDevice
> :EndPage()
> :StartPage()
> END WITH
>
> Modificaré el método para que haga lo mismo.
>
> Saludos,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=45910b68@news.xailer.com...]45910b68@news.xailer.com...[/email]
>> Hola,
>>
>> En el evento onpostend de un report lanzo un NewPage. Sin embargo no
>> consigo el salto de página. El código es algo parecido a esto:
>>
>> static function MiOnPostEnd( or ) // or -> objeto oReport
>>
>> IF oR:LinesLeft() <= 9
>> or:oDevice:oCanvas:Textout(500,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Totales en la
>> siguiente página")
>> oR:NewPage()
>> ENDIF
>>
>> ....
>> ...
>> RETURN NIL
>>
>> El texto "Totales en la siguiente página" aparece en el listado, sin
>> embargo... todo lo que se imprime después de esta manera:
>>
>> or:NewLine()
>> or:oDevice:oCanvas:Textout(650,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0,
>> oR:nRow)[2]," ************************************************************ ***** ")
>> or:NewLine()
>> or:oDevice:oCanvas:Textout( 650,
>> oR:oDevice:oCanvas:PixelsToMapMode( 0, oR:nRow)[2],"Clientes Frecuencia S
>> :")
>>
>>
>> Sale a continuación (en la misma página), sin conseguir hacer el salto de
>> linea.
>>
>> ¿Por donde puedo mirar para hacer correctamente el salto de página?
>>
>> Saludos y gracias,
>> José Luis Capel
>>
>>
>>
>
>


Attached files Listado_Clientes_Ruta.pdf (9.6 KB)Â Listado_Clientes_Ruta2.pdf (12.4 KB)Â

oReport:NewPage()

Publicado: Mar Dic 26, 2006 7:22 pm
por ignacio
José Luis,
Cuando tu saltas de pagina manualmente con el Device las posiciones que te
devuelve el objeto Report de fila ya no son válidas. Como estabas al final
del listado supuse que ibas a imprimir en la nueva página directamente, es
decir, sin utilizar para nada el objeto TReport. Obviamente cuando se salta
de página manualmente a través del Device no se imprime ningún tipo de
cabecera o títulos del listado, que tampoco sé si es lo que deseas.
La propiedad oReport:nRow indica la fila de impresión dentro de la zona de
datos, pero no tiene nada que ver con la zona de impresión del footer. La
forma de hacer la impresión correctamente sería de esta forma:
WITH OBJECT oReport
:StartLine()
: PrintAtCol( 1, "lo que sea" )
:EndLine()
:StartLine()
: PrintAtCol( 1, "lo que sea" )
:EndLine()
:StartLine()
: PrintAtCol( 1, "lo que sea" )
:EndLine()
ED WITH
StartLine() básicamente comprueba que le cabe la linea que se va a imprimir
y sino hace un salto de página, volviendo a imprimir cabecera, título, y
cabeceras de columnas.
He modificado la clase para que tengas distintas formas de hacer el salto de
página desde OnPostEnd:
1) Imprimiendose cabecera, titulos, etc de la página y colocandose la
propiead oRep:nRow en la primera fila de datos:
oReport:NewPage()
2) Simplemente creando una nueva página completamente en blanco:
With Object oReport:oDevice:
:StartPage()
:EndPage()
End with
Ten en cuenta que en este caso oReport:nRow apunta a un sitio inválido, es
responsabilidad tuya imprimir donde realmente desees.
Un saludo


Attached files Report.rar (11 KB)Â