Hola,
Estoy atascado en un tema de macros. Pretendo hacer un listado automatizado
de un dbbrowse. Es decir, hacer un report de las columnas y filas visibles
de un dbbrowse.
El bucle donde defino las columnas del report es este:
FOR EACH oCol IN ::odbBrowse1:aCols
IF !oCol:lVisible
LOOP
ENDIF
aData := {}
cMacro := "{ || oMemDataSet1:"+oCol:oDataField:cName+" }"
cMacro := &cMacro.
AADD(aData , cMacro)
WITH OBJECT oReport:AddColumn()
:aData := aData
:aTitle := { &("{ || ["+oCol:cHeader +"] }") }
:Create()
END
NEXT
Y en ejecución me da error de que no existe oMemDataSet1 justo en la linea
donde creo la macro. Todo debe venir por el tema de 'detached locals'. Debo
andar espeso hoy (o más bien, hoy estoy más espeso que otros días)... no
consigo dar con el 'punto exacto'. Si alguien puede darme luz sobre esto...
quedo agradecido. Os dejo el proyecto.
Saludos,
Jósé Luis Capel
Attached files pruebas6.zip (12.3 KB)Â
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.
OT: tReport y macros
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
OT: tReport y macros
oMemDataSet1 es parametro?
por que no veo los "::", osea, ::oMemDataSet1?
otro problema es que oSelf esta definida local y he notado que en las macros
no se pueden usar,
yo lo resolvi:
MemVar oSSelf := oSelf
cMacro := "{ || oSSelf:oMemDataSet1:"+oCol:oDataField:cName+" }"
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
por que no veo los "::", osea, ::oMemDataSet1?
otro problema es que oSelf esta definida local y he notado que en las macros
no se pueden usar,
yo lo resolvi:
MemVar oSSelf := oSelf
cMacro := "{ || oSSelf:oMemDataSet1:"+oCol:oDataField:cName+" }"
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
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/
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
OT: tReport y macros
al parecer estas haciendoun report estandar para los browse, cualquier cosa,
yo ya lo tengo hecho, en lo que pueda ayudar.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
yo ya lo tengo hecho, en lo que pueda ayudar.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
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/
OT: tReport y macros
Ramón,
> al parecer estas haciendoun report estandar para los browse, cualquier
> cosa, yo ya lo tengo hecho, en lo que pueda ayudar.
Gracias por tu ofrecimiento. Estoy haciendo precisamente un report del
browse. Mi interés es crear una función que genere el report de forma
automática según las columnas y filas del dataset mostrado en el tdbrowse.
En este caso concreto es un tMemDataset. Si tienes algo 'para mirar' te
quedo agradecido.
Saludos,
José Luis Capel
> al parecer estas haciendoun report estandar para los browse, cualquier
> cosa, yo ya lo tengo hecho, en lo que pueda ayudar.
Gracias por tu ofrecimiento. Estoy haciendo precisamente un report del
browse. Mi interés es crear una función que genere el report de forma
automática según las columnas y filas del dataset mostrado en el tdbrowse.
En este caso concreto es un tMemDataset. Si tienes algo 'para mirar' te
quedo agradecido.
Saludos,
José Luis Capel
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
OT: tReport y macros
pues a mi parecer la unica diferencia seria el (tMem) DataSet.
este es el codigo que ocupo para hacer mi reporte:
METHOD BtnBmp2Click( oSender ) CLASS ZBrowse2Printer
Local oReport
Local nCol
Local oCol
Local nCurrCol
Local nRecNo
Local nNumDatas, nData, aDatas
Local oPicCopyR
MemVar oSelf
MemVar aCols
oSender:lEnabled := .f.
oSelf := SELF
aCols := {}
::oDataSet:SaveState( .t. )
::oDataSet:GoTop()
WITH OBJECT oReport := TReport():New( self )
:oTitle := TRptLine():Create( oReport, ;
{ {|| alltrim(AppData:EMPRESA_Nombre) }, ;
{|| alltrim(::oEdit1:value) } }, ;
taCENTER, "t" )
:oHeader := TRptLine():Create( oReport, ;
{ {|| DtoStr( Date(), "dd-mmm-yyyy" ) + " " + Time() } }, ;
, "h" )
:oFooter := TRptLine():Create( oReport, ;
{ {|| "Pag.: " + lTrim( Str( oReport:nPage ) ) } }, ;
taCENTER, "f" )
:aFonts := { ::oFont1, ::oFont2 }
:lPreview := ::oPreliminar:lChecked
//:oDevice := <oPrinter>
:cJobName := ::oDataSet:Alias()
:Create()
END
For nCol := 1 To Len(::oDBBrowse1:aCols)
oCol := ::oDBBrowse1:aCols[nCol]
If ( !oCol:lVisible )
Loop
End
aAdd(aCols, {Nil, oCol})
nCurrCol := Len(aCols)
WITH OBJECT aCols[nCurrCol][1] := oReport:AddColumn()
:aTitle := { &("{|| '" + oCol:cHeader + "' }") }
:aData := { &("{|| oSelf:oDataSet:" + oCol:oDataField:cName + " }") }
:nAlignment := oCol:nAlignment
Do Case
//este tipo yo lo defino en runtime
Case oCol:oDataField:cType == "G"
nNumDatas := NumToken( &("oSelf:oDataSet:" + ;
oCol:oDataField:cName), ;
Chr(13) + Chr(10) )
:aData := {}
For nData := 1 To nNumDatas
aAdd(:aData, &( "{|| Token(oSelf:oDataSet:" + ;
oCol:oDataField:cName + ;
", Chr(13) + Chr(10), " + ;
nToc(nData) + ") }" ) )
Next
:nCharSize := Len( Eval(:aData[1]) )
Case oCol:oDataField:cType == "C"
:nCharSize := Len( Eval(:aData[1]) )
Case oCol:oDataField:cType == "N"
:nCharSize := Len(oCol:cPicture)
:nAlignment := taRIGHT
Case oCol:oDataField:cType == "D"
:nCharSize := 16
Case oCol:oDataField:cType == "L"
:nCharSize := 2
End Case
:nCharSize := Max(:nCharSize, Len(oCol:cHeader))
If ( !Empty(oCol:cPicture) )
:aPicture := { oCol:cPicture }
:cTotalPict := :aPicture[ 1 ]
End
:nDataFont := 2
:nTitleFont := 1
:nTotalFont := 1
If ( :lTotal := !Empty(oCol:cFooter) )
oReport:OnEndPage := &("{|oRep| aCols[" + NtoC(nCurrCol) + ;
"][1]:nTotal := zVal(aCols[" + NtoC(nCurrCol) + ;
"][2]:cFooter) }")
End
:Create()
END WITH
Next
WITH OBJECT oReport
:bWhile := {|oSender| !::oDataSet:EoF()}
:Run()
END
::oDataSet:RestoreState( .t. )
Return ( Nil )
creo que estamos para ayudarnos todos, espero te sirva.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje news:[email=45211c07@news.xailer.com...]45211c07@news.xailer.com...[/email]
> Ramón,
>
>
>> al parecer estas haciendoun report estandar para los browse, cualquier
>> cosa, yo ya lo tengo hecho, en lo que pueda ayudar.
>
> Gracias por tu ofrecimiento. Estoy haciendo precisamente un report del
> browse. Mi interés es crear una función que genere el report de forma
> automática según las columnas y filas del dataset mostrado en el tdbrowse.
> En este caso concreto es un tMemDataset. Si tienes algo 'para mirar' te
> quedo agradecido.
>
> Saludos,
> José Luis Capel
>
>
--
este es el codigo que ocupo para hacer mi reporte:
METHOD BtnBmp2Click( oSender ) CLASS ZBrowse2Printer
Local oReport
Local nCol
Local oCol
Local nCurrCol
Local nRecNo
Local nNumDatas, nData, aDatas
Local oPicCopyR
MemVar oSelf
MemVar aCols
oSender:lEnabled := .f.
oSelf := SELF
aCols := {}
::oDataSet:SaveState( .t. )
::oDataSet:GoTop()
WITH OBJECT oReport := TReport():New( self )
:oTitle := TRptLine():Create( oReport, ;
{ {|| alltrim(AppData:EMPRESA_Nombre) }, ;
{|| alltrim(::oEdit1:value) } }, ;
taCENTER, "t" )
:oHeader := TRptLine():Create( oReport, ;
{ {|| DtoStr( Date(), "dd-mmm-yyyy" ) + " " + Time() } }, ;
, "h" )
:oFooter := TRptLine():Create( oReport, ;
{ {|| "Pag.: " + lTrim( Str( oReport:nPage ) ) } }, ;
taCENTER, "f" )
:aFonts := { ::oFont1, ::oFont2 }
:lPreview := ::oPreliminar:lChecked
//:oDevice := <oPrinter>
:cJobName := ::oDataSet:Alias()
:Create()
END
For nCol := 1 To Len(::oDBBrowse1:aCols)
oCol := ::oDBBrowse1:aCols[nCol]
If ( !oCol:lVisible )
Loop
End
aAdd(aCols, {Nil, oCol})
nCurrCol := Len(aCols)
WITH OBJECT aCols[nCurrCol][1] := oReport:AddColumn()
:aTitle := { &("{|| '" + oCol:cHeader + "' }") }
:aData := { &("{|| oSelf:oDataSet:" + oCol:oDataField:cName + " }") }
:nAlignment := oCol:nAlignment
Do Case
//este tipo yo lo defino en runtime
Case oCol:oDataField:cType == "G"
nNumDatas := NumToken( &("oSelf:oDataSet:" + ;
oCol:oDataField:cName), ;
Chr(13) + Chr(10) )
:aData := {}
For nData := 1 To nNumDatas
aAdd(:aData, &( "{|| Token(oSelf:oDataSet:" + ;
oCol:oDataField:cName + ;
", Chr(13) + Chr(10), " + ;
nToc(nData) + ") }" ) )
Next
:nCharSize := Len( Eval(:aData[1]) )
Case oCol:oDataField:cType == "C"
:nCharSize := Len( Eval(:aData[1]) )
Case oCol:oDataField:cType == "N"
:nCharSize := Len(oCol:cPicture)
:nAlignment := taRIGHT
Case oCol:oDataField:cType == "D"
:nCharSize := 16
Case oCol:oDataField:cType == "L"
:nCharSize := 2
End Case
:nCharSize := Max(:nCharSize, Len(oCol:cHeader))
If ( !Empty(oCol:cPicture) )
:aPicture := { oCol:cPicture }
:cTotalPict := :aPicture[ 1 ]
End
:nDataFont := 2
:nTitleFont := 1
:nTotalFont := 1
If ( :lTotal := !Empty(oCol:cFooter) )
oReport:OnEndPage := &("{|oRep| aCols[" + NtoC(nCurrCol) + ;
"][1]:nTotal := zVal(aCols[" + NtoC(nCurrCol) + ;
"][2]:cFooter) }")
End
:Create()
END WITH
Next
WITH OBJECT oReport
:bWhile := {|oSender| !::oDataSet:EoF()}
:Run()
END
::oDataSet:RestoreState( .t. )
Return ( Nil )
creo que estamos para ayudarnos todos, espero te sirva.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje news:[email=45211c07@news.xailer.com...]45211c07@news.xailer.com...[/email]
> Ramón,
>
>
>> al parecer estas haciendoun report estandar para los browse, cualquier
>> cosa, yo ya lo tengo hecho, en lo que pueda ayudar.
>
> Gracias por tu ofrecimiento. Estoy haciendo precisamente un report del
> browse. Mi interés es crear una función que genere el report de forma
> automática según las columnas y filas del dataset mostrado en el tdbrowse.
> En este caso concreto es un tMemDataset. Si tienes algo 'para mirar' te
> quedo agradecido.
>
> Saludos,
> José Luis Capel
>
>
--
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/