Reportes (salida por impresora)
Permiten imprimir informacin contenida en una tabla o en un conjunto de tablas. La informacin puede presentarse directamente o resumirse formando grupos. Tambin pueden agregarse encabezados y/o resmenes al final de pgina.
Seminario de Lenguajes Opcin Delphi Curso 2007 1
Quick Reports (QR) Esquema General
Todo informe QR debe contar con un componente QuickRep que es el que gestiona los elementos generales actuando como una plantilla. Sobre el componente QuickRep se insertan uno o ms componentes QRBand con los que se establecern las diferentes secciones del informe: cabeceras, cuerpo, pie de pgina, etc.
Seminario de Lenguajes Opcin Delphi Curso 2007 2
Quick Reports (QR) Esquema General
Cada componente QRBand acta como un contenedor donde pueden insertarse componentes QRDBText, QRMemo, QRLabel con los que se especificarn los datos que aparecern en el informe. QRSysData : permite insertar da, hora, nro,de pginas, etc. Los datos que aparezcan en un informe pueden ser agrupados por un campo utilizando un componente QRGroup.
Seminario de Lenguajes Opcin Delphi Curso 2007 3
QuickRep
QuickRep Propiedades Dataset ReportTitle
Es la componente bsica del reporte
Seminario de Lenguajes Opcin Delphi Curso 2007
QuickRep. Propiedades
DataSet
Indica al reporte de dnde debe obtener los
datos. Puede ser Table o Query. Imprimir un rengln por cada registro.
ReportTitle
Contiene el ttulo del reporte
Seminario de Lenguajes Opcin Delphi Curso 2007 5
Con doble click sobre la componente QuickRep se accede al editor de opciones
Seminario de Lenguajes Opcin Delphi Curso 2007
QRBand
QRBand Permite indicar las secciones del informe. Por ejemplo: ttulos, cuerpo, pie de pgina, etc.
Seminario de Lenguajes Opcin Delphi Curso 2007 7
Bandas
El reporte est organizado en bandas. Cada banda posee una frecuencia de impresin distinta.
Seminario de Lenguajes Opcin Delphi Curso 2007
Ejemplo [Link]
Reporte Sencillo
Se desea obtener un listado de la agenda ordenada alfabticamente. Utilizar la tabla [Link]
Seminario de Lenguajes Opcin Delphi Curso 2007
Partes del Reporte
Seccin de Ttulos Aparece slo al comienzo de la 1er. Hoja
Seminario de Lenguajes Opcin Delphi Curso 2007
10
Partes del Reporte
Encabezado de columna Aparece en todas las pginas permitiendo conocer el ttulos de las columnas.
Seminario de Lenguajes Opcin Delphi Curso 2007
11
Partes del Reporte
Listado Para mostrar esta informacin bastar con indicar el formato de una nica fila el cual ser aplicado al reporte completo.
Seminario de Lenguajes Opcin Delphi Curso 2007
12
Partes del Reporte
Pie de pgina Aparece al final de cada pgina. Puede utilizarse para imprimir informacin de resumen o, como en ese caso, el nmero de pgina actual.
Seminario de Lenguajes Opcin Delphi Curso 2007 13
Ejemplo [Link]
Sobre una aplicacin Nueva agregar un mdulo de datos
Seminario de Lenguajes Opcin Delphi Curso 2007
14
a) Reporte Sencillo
Agregar adems un nuevo Formulario al que llamaremos FListadoSencillo. Sobre FListadoSencillo pegar:
Un componente QuickRep (el formulario se
convierte en la hoja de impresin). Modificar las propiedades:
DataSet
para que seale a la [Link] (del mdulo de datos) ReportTitle asignndole Agenda.
tabla
Seminario de Lenguajes Opcin Delphi Curso 2007
15
Luego de agregar el componente QuickRep el formulario se ver as
Propiedades DataSet = [Link] ReportTitle = Agenda
Seminario de Lenguajes Opcin Delphi Curso 2007
16
Bandas
Agregar 4 componentes QRBand. Propiedad BandType: Representa a cada una de las secciones del reporte :
rbTitle rbColumHeader RbDetail rbPageFooter
(hay otras)
Seminario de Lenguajes Opcin Delphi Curso 2007 17
Luego de agregar las cuatro bandas el formulario se ver as:
BandType = rbTitle BandType = rbColumnHeader BandType = rbDetail BandType = rbPageFooter
Seminario de Lenguajes Opcin Delphi Curso 2007
18
Componente QRSysData
QRSysData
Permite imprimir el ttulo del reporte, el nmero de pgina, la fecha,etc. Modifique la propiedad Data para indicar qu mostrar. Si desea agregar un texto anterior puede indicarlo en la propiedad Text.
Seminario de Lenguajes Opcin Delphi Curso 2007 19
BANDA 1: Ttulos
Insertar dentro de esta banda dos componentes de tipo QRSysData:
Fecha del informe: propiedad Data=qrsDate. Ttulo del Reporte Data=qrsReportTitle para que muestre el ttulo. Alignment=taCenter AlignToBand=TRUE Para verlo ms grande, cambie el tipo de letra (propiedad Font)
Seminario de Lenguajes Opcin Delphi Curso 2007
20
Agregar en la 1er. banda dos componentes QRSysData
Propiedades Data=qrsReportTitle Alignment=taCenter AlignToBand=TRUE
Propiedad Data=qrsDate
Seminario de Lenguajes Opcin Delphi Curso 2007
21
Componente QRLabel
QRLabel
Permite imprimir un texto fijo. Modifique la propiedad Caption para indicarlo.
Seminario de Lenguajes Opcin Delphi Curso 2007
22
BANDA 2: Cabeceras de pginas
Esta banda aparecer en todas las pginas, arriba de los datos, por lo tanto debe llevar la propiedad BandType = rbColumnHeader Por cada columna que contenga el listado insertar un componente QRLabel. Como la idea es formar 4 columnas colocaremos 4 componentes QRLabel con sus captions correspondientes
Seminario de Lenguajes Opcin Delphi Curso 2007 23
Agregar en la 2da. banda cuatro componentes QRLabel
Modificar las propiedades Caption. Autosize Transparent Frame (DrawBottom=true)
Seminario de Lenguajes Opcin Delphi Curso 2007 24
Componente QRDBText
QRDBText
Permite imprimir el contenido de un campo de una tabla o de una consulta. Es necesario indicar las propiedades:
DataSet = [Link] DataField = Campo a imprimir.
Seminario de Lenguajes Opcin Delphi Curso 2007 25
BANDA 3 : Cuerpo del listado
Propiedad BandType=RbDetail. Insertar cuatro componentes QRDBText asociadas a cada campo a listar. Para cada QRDBText
DataSet : [Link] DataField : el campo correspondiente.
Ajustar el tamao de la seccin por encima y por debajo de los componente QRDBText para que no aparezcan demasiado separados en la impresin.
Seminario de Lenguajes Opcin Delphi Curso 2007 26
Agregar en la 3er. banda cuatro componentes QRDBText
Modificar las propiedades DataSet y DataField
Seminario de Lenguajes Opcin Delphi Curso 2007
27
BANDA 4: Muestra el nro. de hoja
Propiedad BandType=rbPageFooter Pegar en esta banda un componente QRSysData modificando su propiedad Data=qrsPageNumber
Seminario de Lenguajes Opcin Delphi Curso 2007
28
Insertando el nro. de pgina
Propiedad Data=qrsPageNumber
Seminario de Lenguajes Opcin Delphi Curso 2007
29
Reporte sencillo
Seminario de Lenguajes Opcin Delphi Curso 2007
30
Visualizacin del reporte
En el formulario principal pegar un botn con el siguiente OnClick:
procedure [Link](Sender: TObject); begin [Link]; end;
Ejecutar
Seminario de Lenguajes Opcin Delphi Curso 2007 31
Agrupando la informacin del reporte
Se desea modificar la impresin de la agenda de la siguiente forma:
Seminario de Lenguajes Opcin Delphi Curso 2007
32
Reportes con grupos
OnClick procedure [Link](Sender: TObject); begin [Link]; end;
Seminario de Lenguajes Opcin Delphi Curso 2007 33
Ejemplo
Agregar un nuevo formulario llamado FGrupos. Para no rehacer todo lo anterior, pegar sobre FGrupos una copia del componente QuickRep del formulario FListadoSencillo
Seminario de Lenguajes Opcin Delphi Curso 2007
34
Componente QRGroup
QRGroup
Permite dividir el reporte en grupos. Funciona como una banda de cabeza de grupo y puede tener opcionalmente una banda de pie de grupo. Se imprime cada vez que cambie el valor de su propiedad Expression.
Seminario de Lenguajes Opcin Delphi Curso 2007 35
Componente QRGroup
Propiedades
Expression : maneja el cambio de grupo. Cuando su valor cambia, el encabezado del grupo se vuelve a imprimir. FooterBand : banda de pie de grupo. Seala a una QRBand cuyo valor en la propiedad BandType es rbGroupFooter. ReprintOnNewPage: si vale True, el encabezado de grupo se volver a imprimir en caso que el grupo continue en la pgina siguiente. Por defecto vale False.
Seminario de Lenguajes Opcin Delphi Curso 2007
36
Reporte con grupos
Agregar un componente QRGroup
Esta banda corresponde al QRGroup
Seminario de Lenguajes Opcin Delphi Curso 2007
37
Reporte con grupos
Sobre el QRGroup pegar un QRLabel que mostrar la letra
Propiedades: Font Name
Seminario de Lenguajes Opcin Delphi Curso 2007
38
Reporte con grupos
En el componente QRGroup falta indicar:
Propiedad Expression
Expression = copy(nombre,1,1)
Seminario de Lenguajes Opcin Delphi Curso 2007
39
Reporte con grupos
Para mostrar la letra utilizar el evento BeforePrint del QRGroup procedure TFGrupos.QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); Var nom : string; begin nom := [Link]('nombre').asString; [Link] := copy( nom, 1, 1 ); end;
Seminario de Lenguajes Opcin Delphi Curso 2007 40
Reporte con grupos
Ejecutar
Qu pasa si el contenido de la tabla est desordenado?
Seminario de Lenguajes Opcin Delphi Curso 2007 41
Ejemplo : indique cmo construir el siguiente reporte
Seminario de Lenguajes Opcin Delphi Curso 2007
42
select R.*, A.* from revistas R, Articulos A where (R.id_revista = A.id_revista) order by fecha desc, R.id_revista, pagina
Componente QuickRep Propiedades - DataSet = Query1 - ReportTitle = Catlogo de Revistas - Page - Columns = 2 - ColumnSpace = 0,5 mm
Seminario de Lenguajes Opcin Delphi Curso 2007 43
BandType = rbTitle QRGroup
Propiedades - Expression - FooterBand
BandType = rbDetail BandType = rbGroupFooter
Seminario de Lenguajes Opcin Delphi Curso 2007 44
QRSysData
QRLabel
QRDBText
QRExpr
Propiedad Expression = COUNT
Seminario de Lenguajes Opcin Delphi Curso 2007 45
QRDBImage
QRDBRichText
Seminario de Lenguajes Opcin Delphi Curso 2007
46
Qu falta?
Construir la lista de temas relacionados con los artculos de la revista
Seminario de Lenguajes Opcin Delphi Curso 2007
47
select distinct grupo from articulos where id_revista = :codigo
Se invoca en el OnBeforePrint de la banda QRGroup
Seminario de Lenguajes Opcin Delphi Curso 2007
48
var linea : string; buscado : string; begin buscado := [Link]('id_revista').asString; [Link]; [Link]('codigo').asString := buscado; [Link]; linea := ''; while not [Link] do begin linea := linea + [Link]('grupo').asString+ ' - '; [Link]; end; if linea<>'' then linea := copy(linea,1,length(linea)-3); [Link] := 'Temas : '+linea; end;
Seminario de Lenguajes Opcin Delphi Curso 2007 49
OnBeforePrint de la banda QRGroup
Parmetros del Query indicados a travs de la propiedad DataSource
Un Query con parmetros puede tomar los valores correspondientes en forma automtica desde otro Query o Table asociado a un DataSource. Para hacerlo, deben coincidir el nombre de cada campo con el de cada parmetro. La actualizacin se realiza cada vez que cambia el registro actual del maestro.
Seminario de Lenguajes Opcin Delphi Curso 2007
50
Parmetros del Query indicados a travs de la propiedad DataSource
Tabla [Link] QUERY - DataSource = el asociado a la tabla [Link] - SQL select * from articulos A where (A.id_revista = :id_revista) Nombre del campo de [Link]
Seminario de Lenguajes Opcin Delphi Curso 2007 51
Propiedades - DataSource = DataSource1 - SQL Agregado para poder relacionar el segundo Query con el primero
select distinct grupo from articulos A where A.id_revista = :id_revista
- Active = TRUE
Modificar el proceso OnBeforePrint de la banda QRGroup
Seminario de Lenguajes Opcin Delphi Curso 2007 52
OnBeforePrint de la banda QRGroup luego de modificar la propiedad DataSource de QGrupos
var linea : string; buscado : string; begin linea := ''; while not [Link] do begin linea := linea + [Link]('grupo').asString+ ' - '; [Link]; end; if linea<>'' then linea := copy(linea,1,length(linea)-3); [Link] := 'Temas : '+linea; end;
Seminario de Lenguajes Opcin Delphi Curso 2007 53