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)Â