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.

Renglones múltiples en Reportes

Foro público de Xailer en español
Responder
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Hola Equipo Xailer:
Tengo varios campos, (Campo1, Campo2, Campo3...Campon) todos con una
longitud de 50 caracteres. El valor de los mismos no siempre ocupa los
50 caracteres.
Quiero imprimir una variable de la siguiente forma:
cVariable := Alltrim(Campo1) + Alltrim(Campo2) + Alltrim(Campo3) + .. +
Alltrim(CampoN)
Supongamos que Alltrim(cVariable) es 200.
¿Como puedo hacer para que me imprima el valor de la variable, en un
espacio de 50 caracteres, en 4 diferentes renglones?
Mil gracias y saludos
Pp Lu3o
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Renglones múltiples en Reportes

Mensaje por ignacio »

Pepe,
La forma más sencilla de hacerlo es simplemente poner:
COLUMN OF oReport ;
TITLE "Mis Campos" ;
DATA MemoLine( cVariable, 50, 1),;
DATA MemoLine( cVariable, 50, 2),;
DATA MemoLine( cVariable, 50, 3),;
DATA MemoLine( cVariable, 50, 4)
Este sistema tiene el inconveniente de que siempre se consumen los renglones
aunque estén en blanco.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje
news:[email=45057e34@news.xailer.com...]45057e34@news.xailer.com...[/email]
> Hola Equipo Xailer:
>
> Tengo varios campos, (Campo1, Campo2, Campo3...Campon) todos con una
> longitud de 50 caracteres. El valor de los mismos no siempre ocupa los 50
> caracteres.
>
> Quiero imprimir una variable de la siguiente forma:
>
> cVariable := Alltrim(Campo1) + Alltrim(Campo2) + Alltrim(Campo3) + .. +
> Alltrim(CampoN)
>
> Supongamos que Alltrim(cVariable) es 200.
>
> ¿Como puedo hacer para que me imprima el valor de la variable, en un
> espacio de 50 caracteres, en 4 diferentes renglones?
>
> Mil gracias y saludos
> Pp Lu3o
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Ignacio,
Mil gracias por tu respuesta.
Precisamente uso la variable para evitar los campos en blanco.
No hay forma de eliminarlos?
Intento hacer lo siguiente:
METHOD Reporte(lPreview) CLASS TRepxCli
...
...
Local bCodigo:= {|| ::ChecaExp()}
..
..
COLUMN OF oRep ;
DATA Eval(bCodigo) ;
PICTURE "" ;
TITLE "" ;
FONT 3 CHARSIZE 105
RUN REPORT oRep
METHOD ChecaExp() CLASS TRepxCli
Local cTotReng, cString
Local cExp:=" "
* Primero, obtenemos la cadena
cString := ::Cadena(::oDataSet) // Función que forma la variable
* Ahora calculamos el número de renglones a imprimir
cTotReng := Str(Int(Len(cString)/105)+.5, 1)
Do Case
Case cTotReng = "1"
cExp := "::Cadena(::oDataSet)"
Case cTotReng = "2"
cExp := "Substr(::Cadena(::oDataSet), 1, 105),
Substr(::Cadena(::oDataSet), 105, Len(::Cadena(::oDataSet))-105)"
...
...
EndCase
RETURN(cExp)
Pero al impimir la columna, me imprime el texto (Por ejemplo,
"::Cadena(::oDataSet)") y no el contenido. Como podrí­a corregir este
detalle?
Mil gracias por tu ayuda
Saludos, Pp Lu3o
Ignacio Ortiz de Zúñiga wrote:
> Pepe,
>
> La forma más sencilla de hacerlo es simplemente poner:
>
> COLUMN OF oReport ;
> TITLE "Mis Campos" ;
> DATA MemoLine( cVariable, 50, 1),;
> DATA MemoLine( cVariable, 50, 2),;
> DATA MemoLine( cVariable, 50, 3),;
> DATA MemoLine( cVariable, 50, 4)
>
> Este sistema tiene el inconveniente de que siempre se consumen los renglones
> aunque estén en blanco.
>
> Un saludo,
>
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Renglones múltiples en Reportes

Mensaje por jrcpoli »

Saludos:
Perdona pero si esto cString := ::Cadena(::oDataSet) // Función que
forma la variable
Llama a una función que se llama cadena y le pasas la variable de la
base de datos sobran los dos puntos.
cString := Cadena(::oDataSet)
Segundo si pones esto entre comillas cExp := "::Cadena(::oDataSet)" te
devuelve eso mismo que esta entre comillas.
Si me equivoco perdona.
José Ramón Castro.
Pepe Lutrillo escribió:
> Ignacio,
>
> Mil gracias por tu respuesta.
>
> Precisamente uso la variable para evitar los campos en blanco.
> No hay forma de eliminarlos?
>
> Intento hacer lo siguiente:
>
> METHOD Reporte(lPreview) CLASS TRepxCli
> ...
> ...
> Local bCodigo:= {|| ::ChecaExp()}
> ..
> ..
> COLUMN OF oRep ;
> DATA Eval(bCodigo) ;
> PICTURE "" ;
> TITLE "" ;
> FONT 3 CHARSIZE 105
>
> RUN REPORT oRep
>
> METHOD ChecaExp() CLASS TRepxCli
> Local cTotReng, cString
> Local cExp:=" "
> * Primero, obtenemos la cadena
> cString := ::Cadena(::oDataSet) // Función que forma la variable
> * Ahora calculamos el número de renglones a imprimir
> cTotReng := Str(Int(Len(cString)/105)+.5, 1)
> Do Case
> Case cTotReng = "1"
> cExp := "::Cadena(::oDataSet)"
> Case cTotReng = "2"
> cExp := "Substr(::Cadena(::oDataSet), 1, 105),
> Substr(::Cadena(::oDataSet), 105, Len(::Cadena(::oDataSet))-105)"
> ...
> ...
> EndCase
> RETURN(cExp)
>
> Pero al impimir la columna, me imprime el texto (Por ejemplo,
> "::Cadena(::oDataSet)") y no el contenido. Como podrí­a corregir este
> detalle?
>
> Mil gracias por tu ayuda
> Saludos, Pp Lu3o
>
>
> Ignacio Ortiz de Zúñiga wrote:
>> Pepe,
>>
>> La forma más sencilla de hacerlo es simplemente poner:
>>
>> COLUMN OF oReport ;
>> TITLE "Mis Campos" ;
>> DATA MemoLine( cVariable, 50, 1),;
>> DATA MemoLine( cVariable, 50, 2),;
>> DATA MemoLine( cVariable, 50, 3),;
>> DATA MemoLine( cVariable, 50, 4)
>>
>> Este sistema tiene el inconveniente de que siempre se consumen los
>> renglones aunque estén en blanco.
>>
>> Un saludo,
>>
José Ramón Castro.
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Jose Ramón,
Gracias por tu mensaje.
cString := ::Cadena(::oDataSet) llama a un método (y no a una función)
que forma el string en base al contenido de varios campos. El valor
resultante de String es correcto.
Lo que intento hacer obtener en "Eval(bCodigo)" es la expresión a
utilizar y no el valor de la cadena, basado en el número de renglones
que necesita cString para ser impresa.
Si la variable puede ser impresa en un renglón, la expresión es:
::Cadena(::oDataSet)
Si necesita 2 renglones:
Substr(::Cadena(::oDataSet), 1, 105), Substr(::Cadena(::oDataSet), 105,
Len(::Cadena(::oDataSet))-105)
Si necesita 3 renglones
Substr(::Cadena(::oDataSet), 1, 105), Substr(::Cadena(::oDataSet), 210,
Len(::Cadena(::oDataSet))-210)
etc..
Mi problema es que no encuentro como hacer para poner en DATA
<expresión> la expresión que da como salida el método ChecaExp()
Mil gracias y saludos,
Pp Lu3o
José Ramón Castro Polinio wrote:
> Saludos:
>
> Perdona pero si esto cString := ::Cadena(::oDataSet) // Función que
> forma la variable
>
> Llama a una función que se llama cadena y le pasas la variable de la
> base de datos sobran los dos puntos.
>
> cString := Cadena(::oDataSet)
>
> Segundo si pones esto entre comillas cExp := "::Cadena(::oDataSet)" te
> devuelve eso mismo que esta entre comillas.
>
> Si me equivoco perdona.
>
> José Ramón Castro.
>
> Pepe Lutrillo escribió:
>
>> Ignacio,
>>
>> Mil gracias por tu respuesta.
>>
>> Precisamente uso la variable para evitar los campos en blanco.
>> No hay forma de eliminarlos?
>>
>> Intento hacer lo siguiente:
>>
>> METHOD Reporte(lPreview) CLASS TRepxCli
>> ...
>> ...
>> Local bCodigo:= {|| ::ChecaExp()}
>> ..
>> ..
>> COLUMN OF oRep ;
>> DATA Eval(bCodigo) ;
>> PICTURE "" ;
>> TITLE "" ;
>> FONT 3 CHARSIZE 105
>>
>> RUN REPORT oRep
>>
>> METHOD ChecaExp() CLASS TRepxCli
>> Local cTotReng, cString
>> Local cExp:=" "
>> * Primero, obtenemos la cadena
>> cString := ::Cadena(::oDataSet) // Función que forma la variable
>> * Ahora calculamos el número de renglones a imprimir
>> cTotReng := Str(Int(Len(cString)/105)+.5, 1)
>> Do Case
>> Case cTotReng = "1"
>> cExp := "::Cadena(::oDataSet)"
>> Case cTotReng = "2"
>> cExp := "Substr(::Cadena(::oDataSet), 1, 105),
>> Substr(::Cadena(::oDataSet), 105, Len(::Cadena(::oDataSet))-105)"
>> ...
>> ...
>> EndCase
>> RETURN(cExp)
>>
>> Pero al impimir la columna, me imprime el texto (Por ejemplo,
>> "::Cadena(::oDataSet)") y no el contenido. Como podrí­a corregir este
>> detalle?
>>
>> Mil gracias por tu ayuda
>> Saludos, Pp Lu3o
>>
>>
>> Ignacio Ortiz de Zúñiga wrote:
>>
>>> Pepe,
>>>
>>> La forma más sencilla de hacerlo es simplemente poner:
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Mis Campos" ;
>>> DATA MemoLine( cVariable, 50, 1),;
>>> DATA MemoLine( cVariable, 50, 2),;
>>> DATA MemoLine( cVariable, 50, 3),;
>>> DATA MemoLine( cVariable, 50, 4)
>>>
>>> Este sistema tiene el inconveniente de que siempre se consumen los
>>> renglones aunque estén en blanco.
>>>
>>> Un saludo,
>>>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Renglones múltiples en Reportes

Mensaje por ignacio »

Pepe,
Me temo que no se puede hacer de la forma que quieres. No es tan fácil. La
forma de hacerlo sería la siguiente:
El truco consiste en añadir las líneas al report a tu antojo después de que
se haya imprimido la línea completamente. Sería algo así:
STATIC aPendiente := {}
........................
........................
COLUMN OF oReport ;
TITLE "Mis Campos" ;
DATA MiFuncion( Campo1, Campo2, ..., CampoN )
RUN REPORT oReport ON CHANGE PrintMemo( oReport )
FUNCTION MiFuncion( ... )
LOCAL cVariable := "", Param
LOCAL nLines, nFor
aPendiente := {}
FOR EACH Param IN HB_aParams()
cVariable += Alltrim( Param )
NEXT
nLines := MlCount( cVariable, 50 )
IF nLines > 1
FOR nFor := 2 TO nLines
Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) )
NEXT
ENDIF
RETURN MemoLine( cVariable, 50, 1 )
FUNCTION PrintMemo( oReport )
LOCAL cLine
FOR EACH cLine IN aPendiente
WITH OBJECT oREport
:StartLine()
:PrintAtCol( OrdinalDeLaColumna, cLine, nAlign, nFont, nColor )
:EndLine()
END WITH
NEXT
RETURN NIL
No obstante PrintAtCol() es un método que no existe en tu actual versión del
Report, pero antiguamente en FW en el generador de informes hecho por mi si
existía con el nombre oReport:Say()
Incluyo con este Email la clase con el nuevo método.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje
news:[email=4505af42@news.xailer.com...]4505af42@news.xailer.com...[/email]
> Jose Ramón,
>
> Gracias por tu mensaje.
> cString := ::Cadena(::oDataSet) llama a un método (y no a una función)
> que forma el string en base al contenido de varios campos. El valor
> resultante de String es correcto.
>
> Lo que intento hacer obtener en "Eval(bCodigo)" es la expresión a
> utilizar y no el valor de la cadena, basado en el número de renglones
> que necesita cString para ser impresa.
>
> Si la variable puede ser impresa en un renglón, la expresión es:
> ::Cadena(::oDataSet)
> Si necesita 2 renglones:
> Substr(::Cadena(::oDataSet), 1, 105), Substr(::Cadena(::oDataSet), 105,
> Len(::Cadena(::oDataSet))-105)
> Si necesita 3 renglones
> Substr(::Cadena(::oDataSet), 1, 105), Substr(::Cadena(::oDataSet), 210,
> Len(::Cadena(::oDataSet))-210)
> etc..
>
> Mi problema es que no encuentro como hacer para poner en DATA
> <expresión> la expresión que da como salida el método ChecaExp()
>
> Mil gracias y saludos,
> Pp Lu3o
>
>
>
> José Ramón Castro Polinio wrote:
>> Saludos:
>>
>> Perdona pero si esto cString := ::Cadena(::oDataSet) // Función que
>> forma la variable
>>
>> Llama a una función que se llama cadena y le pasas la variable de la
>> base de datos sobran los dos puntos.
>>
>> cString := Cadena(::oDataSet)
>>
>> Segundo si pones esto entre comillas cExp := "::Cadena(::oDataSet)" te
>> devuelve eso mismo que esta entre comillas.
>>
>> Si me equivoco perdona.
>>
>> José Ramón Castro.
>>
>> Pepe Lutrillo escribió:
>>
>>> Ignacio,
>>>
>>> Mil gracias por tu respuesta.
>>>
>>> Precisamente uso la variable para evitar los campos en blanco.
>>> No hay forma de eliminarlos?
>>>
>>> Intento hacer lo siguiente:
>>>
>>> METHOD Reporte(lPreview) CLASS TRepxCli
>>> ...
>>> ...
>>> Local bCodigo:= {|| ::ChecaExp()}
>>> ..
>>> ..
>>> COLUMN OF oRep ;
>>> DATA Eval(bCodigo) ;
>>> PICTURE "" ;
>>> TITLE "" ;
>>> FONT 3 CHARSIZE 105
>>>
>>> RUN REPORT oRep
>>>
>>> METHOD ChecaExp() CLASS TRepxCli
>>> Local cTotReng, cString
>>> Local cExp:=" "
>>> * Primero, obtenemos la cadena
>>> cString := ::Cadena(::oDataSet) // Función que forma la variable
>>> * Ahora calculamos el número de renglones a imprimir
>>> cTotReng := Str(Int(Len(cString)/105)+.5, 1)
>>> Do Case
>>> Case cTotReng = "1"
>>> cExp := "::Cadena(::oDataSet)"
>>> Case cTotReng = "2"
>>> cExp := "Substr(::Cadena(::oDataSet), 1, 105),
>>> Substr(::Cadena(::oDataSet), 105, Len(::Cadena(::oDataSet))-105)"
>>> ...
>>> ...
>>> EndCase
>>> RETURN(cExp)
>>>
>>> Pero al impimir la columna, me imprime el texto (Por ejemplo,
>>> "::Cadena(::oDataSet)") y no el contenido. Como podría corregir este
>>> detalle?
>>>
>>> Mil gracias por tu ayuda
>>> Saludos, Pp Lu3o
>>>
>>>
>>> Ignacio Ortiz de Zúñiga wrote:
>>>
>>>> Pepe,
>>>>
>>>> La forma más sencilla de hacerlo es simplemente poner:
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Mis Campos" ;
>>>> DATA MemoLine( cVariable, 50, 1),;
>>>> DATA MemoLine( cVariable, 50, 2),;
>>>> DATA MemoLine( cVariable, 50, 3),;
>>>> DATA MemoLine( cVariable, 50, 4)
>>>>
>>>> Este sistema tiene el inconveniente de que siempre se consumen los
>>>> renglones aunque estén en blanco.
>>>>
>>>> Un saludo,
>>>>


Attached files Report.rar (10.8 KB)Â
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Ignacio,
He adaptado mi código de acuerdo a tu respuesta. Sin embargo, obtengo el
siguiente error, aún cuando ya integré a mi proyecto el archivo
report.obj que posteaste:
PRINTMEMO(424)
Error BASE/1004 Message not found: TREPORT:PRINTATCOL
Arguments: ()
Mil gracias
Saludos, Pp Lu3o
Ignacio Ortiz de Zúñiga wrote:
> Pepe,
>
> Me temo que no se puede hacer de la forma que quieres. No es tan fácil. La
> forma de hacerlo serí­a la siguiente:
>
> El truco consiste en añadir las lí­neas al report a tu antojo después de que
> se haya imprimido la lí­nea completamente. Serí­a algo así­:
>
> STATIC aPendiente := {}
> .......................
> .......................
> COLUMN OF oReport ;
> TITLE "Mis Campos" ;
> DATA MiFuncion( Campo1, Campo2, ..., CampoN )
>
> RUN REPORT oReport ON CHANGE PrintMemo( oReport )
>
> FUNCTION MiFuncion( ... )
>
> LOCAL cVariable := "", Param
> LOCAL nLines, nFor
>
> aPendiente := {}
>
> FOR EACH Param IN HB_aParams()
> cVariable += Alltrim( Param )
> NEXT
>
> nLines := MlCount( cVariable, 50 )
>
> IF nLines > 1
> FOR nFor := 2 TO nLines
> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) )
> NEXT
> ENDIF
>
> RETURN MemoLine( cVariable, 50, 1 )
>
> FUNCTION PrintMemo( oReport )
>
> LOCAL cLine
>
> FOR EACH cLine IN aPendiente
> WITH OBJECT oREport
> :StartLine()
> :PrintAtCol( OrdinalDeLaColumna, cLine, nAlign, nFont, nColor )
> :EndLine()
> END WITH
> NEXT
>
> RETURN NIL
>
> No obstante PrintAtCol() es un método que no existe en tu actual versión del
> Report, pero antiguamente en FW en el generador de informes hecho por mi si
> existí­a con el nombre oReport:Say()
>
> Incluyo con este Email la clase con el nuevo método.
>
> Un saludo,
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Renglones múltiples en Reportes

Mensaje por zeasoftware »

Checa que OZ te envio un archivo adjunto.
o intenta modificando algo de lo que OZ te indicó:
>> IF nLines > 1
>> FOR nFor := 1 TO nLines
>> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) + Chr(13) + chr(10))
>> NEXT
>> ENDIF
>>
>> RETURN ( aPendiente )
>>
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com

http://www.paginasprodigy.com/zeasoft/
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje news:[email=4505d1b9@news.xailer.com...]4505d1b9@news.xailer.com...[/email]
> Ignacio,
>
>
> He adaptado mi código de acuerdo a tu respuesta. Sin embargo, obtengo el
> siguiente error, aún cuando ya integré a mi proyecto el archivo
> report.obj que posteaste:
>
> PRINTMEMO(424)
> Error BASE/1004 Message not found: TREPORT:PRINTATCOL
> Arguments: ()
>
> Mil gracias
> Saludos, Pp Lu3o
>
>
> Ignacio Ortiz de Zúñiga wrote:
>> Pepe,
>>
>> Me temo que no se puede hacer de la forma que quieres. No es tan fácil. La
>> forma de hacerlo serí­a la siguiente:
>>
>> El truco consiste en añadir las lí­neas al report a tu antojo después de que
>> se haya imprimido la lí­nea completamente. Serí­a algo así­:
>>
>> STATIC aPendiente := {}
>> .......................
>> .......................
>> COLUMN OF oReport ;
>> TITLE "Mis Campos" ;
>> DATA MiFuncion( Campo1, Campo2, ..., CampoN )
>>
>> RUN REPORT oReport ON CHANGE PrintMemo( oReport )
>>
>> FUNCTION MiFuncion( ... )
>>
>> LOCAL cVariable := "", Param
>> LOCAL nLines, nFor
>>
>> aPendiente := {}
>>
>> FOR EACH Param IN HB_aParams()
>> cVariable += Alltrim( Param )
>> NEXT
>>
>> nLines := MlCount( cVariable, 50 )
>>
>> IF nLines > 1
>> FOR nFor := 2 TO nLines
>> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) )
>> NEXT
>> ENDIF
>>
>> RETURN MemoLine( cVariable, 50, 1 )
>>
>> FUNCTION PrintMemo( oReport )
>>
>> LOCAL cLine
>>
>> FOR EACH cLine IN aPendiente
>> WITH OBJECT oREport
>> :StartLine()
>> :PrintAtCol( OrdinalDeLaColumna, cLine, nAlign, nFont, nColor )
>> :EndLine()
>> END WITH
>> NEXT
>>
>> RETURN NIL
>>
>> No obstante PrintAtCol() es un método que no existe en tu actual versión del
>> Report, pero antiguamente en FW en el generador de informes hecho por mi si
>> existí­a con el nombre oReport:Say()
>>
>> Incluyo con este Email la clase con el nuevo método.
>>
>> Un saludo,
--
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Ramón,
El archivo que me envió Ignacio lo incluí­ al proyecto. En el
"administrador de proyectos" me aparece el archivo "Report.obj" debajo
de "Otros".
Al parecer el problema está en la definición del método Printatcol
dentro del archivo report.obj, por lo que la modificación que sugieres,
marca exactamente el mismo error.
Mil gracias y saludos,
Pp Lu3o
Ramón Zea wrote:
> Checa que OZ te envio un archivo adjunto.
>
> o intenta modificando algo de lo que OZ te indicó:
>
> >> IF nLines > 1
> >> FOR nFor := *1* TO nLines
> >> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) *+
> Chr(13) + chr(10)*)
> >> NEXT
> >> ENDIF
> >>
> >> RETURN *( aPendiente )*
> >>
>
> Saludos.
> --
> Ramón Zea
> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>
> http://www.paginasprodigy.com/zeasoft/
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Renglones múltiples en Reportes

Mensaje por zeasoftware »

con la correccion que te puse no nececita el report.obj, eliminalo y prueba
de nuevo.
Elimina la funcion PrintMemoLine
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje
news:[email=4506089a@news.xailer.com...]4506089a@news.xailer.com...[/email]
> Ramón,
>
> El archivo que me envió Ignacio lo incluí al proyecto. En el
> "administrador de proyectos" me aparece el archivo "Report.obj" debajo de
> "Otros".
>
> Al parecer el problema está en la definición del método Printatcol dentro
> del archivo report.obj, por lo que la modificación que sugieres, marca
> exactamente el mismo error.
>
> Mil gracias y saludos,
> Pp Lu3o
>
> Ramón Zea wrote:
>> Checa que OZ te envio un archivo adjunto.
>> o intenta modificando algo de lo que OZ te indicó:
>> >> IF nLines > 1
>> >> FOR nFor := *1* TO nLines
>> >> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) *+
>> Chr(13) + chr(10)*)
>> >> NEXT
>> >> ENDIF
>> >>
>> >> RETURN *( aPendiente )*
>> >>
>> Saludos.
>> --
>> Ramón Zea
>> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
>> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
>> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>> http://www.paginasprodigy.com/zeasoft/
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Renglones múltiples en Reportes

Mensaje por ignacio »

Ramón,
Eso no funciona me temo.
Un saludo.
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=4505db3b@news.xailer.com...]4505db3b@news.xailer.com...[/email]
Checa que OZ te envio un archivo adjunto.
o intenta modificando algo de lo que OZ te indicó:
>> IF nLines > 1
>> FOR nFor := 1 TO nLines
>> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) + Chr(13) + chr(10))
>> NEXT
>> ENDIF
>>
>> RETURN ( aPendiente )
>>
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com

http://www.paginasprodigy.com/zeasoft/
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje news:[email=4505d1b9@news.xailer.com...]4505d1b9@news.xailer.com...[/email]
> Ignacio,
>
>
> He adaptado mi código de acuerdo a tu respuesta. Sin embargo, obtengo el
> siguiente error, aún cuando ya integré a mi proyecto el archivo
> report.obj que posteaste:
>
> PRINTMEMO(424)
> Error BASE/1004 Message not found: TREPORT:PRINTATCOL
> Arguments: ()
>
> Mil gracias
> Saludos, Pp Lu3o
>
>
> Ignacio Ortiz de Zúñiga wrote:
>> Pepe,
>>
>> Me temo que no se puede hacer de la forma que quieres. No es tan fácil. La
>> forma de hacerlo serí­a la siguiente:
>>
>> El truco consiste en añadir las lí­neas al report a tu antojo después de que
>> se haya imprimido la lí­nea completamente. Serí­a algo así­:
>>
>> STATIC aPendiente := {}
>> .......................
>> .......................
>> COLUMN OF oReport ;
>> TITLE "Mis Campos" ;
>> DATA MiFuncion( Campo1, Campo2, ..., CampoN )
>>
>> RUN REPORT oReport ON CHANGE PrintMemo( oReport )
>>
>> FUNCTION MiFuncion( ... )
>>
>> LOCAL cVariable := "", Param
>> LOCAL nLines, nFor
>>
>> aPendiente := {}
>>
>> FOR EACH Param IN HB_aParams()
>> cVariable += Alltrim( Param )
>> NEXT
>>
>> nLines := MlCount( cVariable, 50 )
>>
>> IF nLines > 1
>> FOR nFor := 2 TO nLines
>> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) )
>> NEXT
>> ENDIF
>>
>> RETURN MemoLine( cVariable, 50, 1 )
>>
>> FUNCTION PrintMemo( oReport )
>>
>> LOCAL cLine
>>
>> FOR EACH cLine IN aPendiente
>> WITH OBJECT oREport
>> :StartLine()
>> :PrintAtCol( OrdinalDeLaColumna, cLine, nAlign, nFont, nColor )
>> :EndLine()
>> END WITH
>> NEXT
>>
>> RETURN NIL
>>
>> No obstante PrintAtCol() es un método que no existe en tu actual versión del
>> Report, pero antiguamente en FW en el generador de informes hecho por mi si
>> existí­a con el nombre oReport:Say()
>>
>> Incluyo con este Email la clase con el nuevo método.
>>
>> Un saludo,
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Renglones múltiples en Reportes

Mensaje por ignacio »

Pepe,
Es muy extraño. Compruebo que el método existe. Parece como si fuese un
error del linker que utiliza el módulo de la librería en vez del OBJ. O
sustituyes el módulo REPORT.OBJ en Xailer.lib o bien te esperas a la nueva
revisión que saldrá en breve.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje
news:[email=4505d1b9@news.xailer.com...]4505d1b9@news.xailer.com...[/email]
> Ignacio,
>
>
> He adaptado mi código de acuerdo a tu respuesta. Sin embargo, obtengo el
> siguiente error, aún cuando ya integré a mi proyecto el archivo report.obj
> que posteaste:
>
> PRINTMEMO(424)
> Error BASE/1004 Message not found: TREPORT:PRINTATCOL
> Arguments: ()
>
> Mil gracias
> Saludos, Pp Lu3o
>
>
> Ignacio Ortiz de Zúñiga wrote:
>> Pepe,
>>
>> Me temo que no se puede hacer de la forma que quieres. No es tan fácil.
>> La forma de hacerlo sería la siguiente:
>>
>> El truco consiste en añadir las líneas al report a tu antojo después de
>> que se haya imprimido la línea completamente. Sería algo así:
>>
>> STATIC aPendiente := {}
>> .......................
>> .......................
>> COLUMN OF oReport ;
>> TITLE "Mis Campos" ;
>> DATA MiFuncion( Campo1, Campo2, ..., CampoN )
>>
>> RUN REPORT oReport ON CHANGE PrintMemo( oReport )
>>
>> FUNCTION MiFuncion( ... )
>>
>> LOCAL cVariable := "", Param
>> LOCAL nLines, nFor
>>
>> aPendiente := {}
>>
>> FOR EACH Param IN HB_aParams()
>> cVariable += Alltrim( Param )
>> NEXT
>>
>> nLines := MlCount( cVariable, 50 )
>>
>> IF nLines > 1
>> FOR nFor := 2 TO nLines
>> Aadd( aPendiente, MemoLine( cVariable, 50, nFor ) )
>> NEXT
>> ENDIF
>>
>> RETURN MemoLine( cVariable, 50, 1 )
>>
>> FUNCTION PrintMemo( oReport )
>>
>> LOCAL cLine
>>
>> FOR EACH cLine IN aPendiente
>> WITH OBJECT oREport
>> :StartLine()
>> :PrintAtCol( OrdinalDeLaColumna, cLine, nAlign, nFont,
>> nColor )
>> :EndLine()
>> END WITH
>> NEXT
>>
>> RETURN NIL
>>
>> No obstante PrintAtCol() es un método que no existe en tu actual versión
>> del Report, pero antiguamente en FW en el generador de informes hecho por
>> mi si existía con el nombre oReport:Say()
>>
>> Incluyo con este Email la clase con el nuevo método.
>>
>> Un saludo,
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Ignacio,
Gracias por tu respuesta.
Que programa/utilerí­a puedo utilizar para incorporar el REPORT.OBJ en
Xailer.lib?
Mil gracias,
Saludos, Pp Lu3o
Ignacio Ortiz de Zúñiga wrote:
> Pepe,
>
> Es muy extraño. Compruebo que el método existe. Parece como si fuese un
> error del linker que utiliza el módulo de la librerí­a en vez del OBJ. O
> sustituyes el módulo REPORT.OBJ en Xailer.lib o bien te esperas a la nueva
> revisión que saldrá en breve.
>
> Un saludo,
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Renglones múltiples en Reportes

Mensaje por ignacio »

Pepe,
tlib.exe del propio Borland C++.
TLIB XAILER.LIB -+ REPORT.OBJ
Saludos
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Pepe Lutrillo" <pepelutrillo@hotmail.com> escribió en el mensaje
news:[email=4506bda4@news.xailer.com...]4506bda4@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por tu respuesta.
> Que programa/utilería puedo utilizar para incorporar el REPORT.OBJ en
> Xailer.lib?
>
> Mil gracias,
> Saludos, Pp Lu3o
>
> Ignacio Ortiz de Zúñiga wrote:
>> Pepe,
>>
>> Es muy extraño. Compruebo que el método existe. Parece como si fuese un
>> error del linker que utiliza el módulo de la librería en vez del OBJ. O
>> sustituyes el módulo REPORT.OBJ en Xailer.lib o bien te esperas a la
>> nueva revisión que saldrá en breve.
>>
>> Un saludo,
>>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Pepe Lutrillo
Mensajes: 45
Registrado: Lun Ago 15, 2005 7:58 pm

Renglones múltiples en Reportes

Mensaje por Pepe Lutrillo »

Ignacio,
Hice el cambio en el archivo xailer.lib. Ahora funciona perfectamente.
Como parte de de lista de deseos: una cláusula MULTIPLE en COLUMN of
oRep, para imprimir varios renglones en una sola columna.
Mil gracias
Saludos, Pp Lu3o
Ignacio Ortiz de Zúñiga wrote:
> Pepe,
>
> tlib.exe del propio Borland C++.
>
> TLIB XAILER.LIB -+ REPORT.OBJ
>
> Saludos
>
Responder