Clase TListados y problema con Column - Data
Publicado: Mar Ago 21, 2007 11:31 am
Bueno, poquito a poco me voy atreviendo con las tripas de la Clase TReport.
Mi idea es generar en una linea la instrucción de impresión para poderla
escribir en el propio control button.
TListado():New("Titulo de
Listado",::oDataSet,{"Header1","Header2"},{"Campo1","Campo2 ")
Casi, casi, como desperezándose en esta mañana de agosto, se va despertando
la clase al igual que mi entusiasmo xaileriano.
No obstante, me he encallado en un tema que no consigo resolver. En un bucle
FOR..NEXT donde creo las sentencias COLUMN
for x=1 to len(aCabeceras)
COLUMN OF ::oReport TITLE aCabeceras[x] ;
DATA ::oDataSet:FieldGetByName(aCampos[x]) ;
CHARSIZE 40 ;
FONT 2
next x
Por lo visto, al generar el codeblock en el método FieldGetByName incluye el
parámetro "x" en vez de su valor, pues me peta la instrucción si no pongo el
literal 1,2,...
Gracias por vuestra ayuda
Karl
CLASS TListado
DATA oFont1, oFont2, oReport, oDataset, Titulo
METHOD New( cTitulo, oDataSet, aCabeceras, aCampos ) CONSTRUCTOR
ENDCLASS
METHOD New( cTitulo, oDataSet, aCabeceras, aCampos ) CLASS TListado
LOCAL x
if cTitulo<>NIL
::Titulo:=cTitulo
endif
if oDataSet<>NIL
::oDataSet:=oDataSet
endif
With Object ::oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object ::oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
REPORT ::oReport ;
TITLE ::Titulo ;
FOOTER "EMPRESA - "+DtoC( Date() ) + " " + ;
padr(Time(),5)+" Hoja " + ;
lTrim( Str( ::oReport:nPage ) ) ;
PREVIEW FONT ::oFont1, ::oFont2
::oReport:oFooter:aFonts[1]:=2
::oDataSet:Gotop()
::oReport:bWhile := {|| !::oDataSet:Eof() }
::oReport:bSkip := {|| ::oDataSet:Skip() }
for x=1 to len(aCabeceras)
COLUMN OF ::oReport TITLE aCabeceras[x] ;
DATA ::oDataSet:FieldGetByName(aCampos[x]) ;
CHARSIZE 40 ;
FONT 2
next x
RUN REPORT ::oReport
::oFont1:Destroy()
::oFont2:Destroy()
RETU Self
Mi idea es generar en una linea la instrucción de impresión para poderla
escribir en el propio control button.
TListado():New("Titulo de
Listado",::oDataSet,{"Header1","Header2"},{"Campo1","Campo2 ")
Casi, casi, como desperezándose en esta mañana de agosto, se va despertando
la clase al igual que mi entusiasmo xaileriano.
No obstante, me he encallado en un tema que no consigo resolver. En un bucle
FOR..NEXT donde creo las sentencias COLUMN
for x=1 to len(aCabeceras)
COLUMN OF ::oReport TITLE aCabeceras[x] ;
DATA ::oDataSet:FieldGetByName(aCampos[x]) ;
CHARSIZE 40 ;
FONT 2
next x
Por lo visto, al generar el codeblock en el método FieldGetByName incluye el
parámetro "x" en vez de su valor, pues me peta la instrucción si no pongo el
literal 1,2,...
Gracias por vuestra ayuda
Karl
CLASS TListado
DATA oFont1, oFont2, oReport, oDataset, Titulo
METHOD New( cTitulo, oDataSet, aCabeceras, aCampos ) CONSTRUCTOR
ENDCLASS
METHOD New( cTitulo, oDataSet, aCabeceras, aCampos ) CLASS TListado
LOCAL x
if cTitulo<>NIL
::Titulo:=cTitulo
endif
if oDataSet<>NIL
::oDataSet:=oDataSet
endif
With Object ::oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object ::oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
REPORT ::oReport ;
TITLE ::Titulo ;
FOOTER "EMPRESA - "+DtoC( Date() ) + " " + ;
padr(Time(),5)+" Hoja " + ;
lTrim( Str( ::oReport:nPage ) ) ;
PREVIEW FONT ::oFont1, ::oFont2
::oReport:oFooter:aFonts[1]:=2
::oDataSet:Gotop()
::oReport:bWhile := {|| !::oDataSet:Eof() }
::oReport:bSkip := {|| ::oDataSet:Skip() }
for x=1 to len(aCabeceras)
COLUMN OF ::oReport TITLE aCabeceras[x] ;
DATA ::oDataSet:FieldGetByName(aCampos[x]) ;
CHARSIZE 40 ;
FONT 2
next x
RUN REPORT ::oReport
::oFont1:Destroy()
::oFont2:Destroy()
RETU Self