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.
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
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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
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
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Renglones múltiples en Reportes
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
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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,
>
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,
>
Renglones múltiples en Reportes
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,
>>
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.
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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,
>>>
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,
>>>
- ignacio
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Renglones múltiples en Reportes
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)Â
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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,
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,
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
Renglones múltiples en Reportes
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,
--
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,
--
Ramón Zea
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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/
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/
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
Renglones múltiples en Reportes
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/
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/
Ramón Zea
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
- ignacio
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Renglones múltiples en Reportes
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,
--
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
- ignacio
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Renglones múltiples en Reportes
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,
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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,
>
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
- Site Admin
- Mensajes: 9440
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Renglones múltiples en Reportes
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,
>>
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 45
- Registrado: Lun Ago 15, 2005 7:58 pm
Renglones múltiples en Reportes
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
>
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
>