quick report
Embed Size (px)
TRANSCRIPT

Seminario de Lenguajes – Opción Delphi – Curso 2007 1
� Permiten imprimir información contenida
en una tabla o en un conjunto de tablas.
� La información puede presentarse
directamente o resumirse formando
grupos.
� También pueden agregarse encabezados
y/o resúmenes al final de página.
Reportes
(salida por impresora)

Seminario de Lenguajes – Opción Delphi – Curso 2007 2
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 más componentes QRBand con los que se
establecerán las diferentes secciones del
informe: cabeceras, cuerpo, pie de página, etc.

Seminario de Lenguajes – Opción Delphi – Curso 2007 3
Quick Reports (QR)
Esquema General
� Cada componente QRBand actúa como un contenedor donde pueden insertarse componentes
• QRDBText, QRMemo, QRLabel con los que se especificarán los datos que aparecerán en el
informe.
• QRSysData : permite insertar día, hora, nro,de
páginas, etc.
� Los datos que aparezcan en un informe pueden ser
agrupados por un campo utilizando un componente QRGroup.

Seminario de Lenguajes – Opción Delphi – Curso 2007 4
QuickRep
QuickRep Es la componente básica del reporte
Propiedades
• Dataset
• ReportTitle

Seminario de Lenguajes – Opción Delphi – Curso 2007 5
QuickRep. Propiedades
� DataSet
• Indica al reporte de dónde debe obtener los
datos.
• Puede ser Table o Query.
• Imprimirá un renglón por cada registro.
� ReportTitle
• Contiene el título del reporte

Seminario de Lenguajes – Opción Delphi – Curso 2007 6
Con doble click
sobre la
componente
QuickRep se
accede al editor de
opciones

Seminario de Lenguajes – Opción Delphi – Curso 2007 7
QRBand
QRBand
Permite indicar las secciones del informe.
Por ejemplo: títulos, cuerpo, pie de página, etc.

Seminario de Lenguajes – Opción Delphi – Curso 2007 8
Bandas
El reporte estáorganizado en
bandas.
Cada banda posee una
frecuencia de impresión distinta.

Seminario de Lenguajes – Opción Delphi – Curso 2007 9
Ejemplo Reportes.dprReporte Sencillo
� Se desea obtener un
listado de la agenda
ordenada
alfabéticamente.
� Utilizar la tabla
AGENDA.DBF

Seminario de Lenguajes – Opción Delphi – Curso 2007 10
Partes del
Reporte
Sección de Títulos
Aparece sólo al comienzo de la 1er. Hoja

Seminario de Lenguajes – Opción Delphi – Curso 2007 11
Partes del
Reporte
Encabezado de columna
Aparece en todas las páginas permitiendo conocer el títulos de las columnas.

Seminario de Lenguajes – Opción Delphi – Curso 2007 12
Partes del
Reporte
Listado
Para mostrar esta información bastará con indicar el formato de una única fila el cual será aplicado al reporte completo.

Seminario de Lenguajes – Opción Delphi – Curso 2007 13
Partes del
Reporte
Pie de página
Aparece al final de cada página.
Puede utilizarse para imprimir información de resumen o, como en ese caso, el número de página actual.

Seminario de Lenguajes – Opción Delphi – Curso 2007 14
Ejemplo Reportes.dpr
� Sobre una aplicación Nueva agregar un
módulo de datos

Seminario de Lenguajes – Opción Delphi – Curso 2007 15
a) Reporte Sencillo
� Agregar además un nuevo Formulario al
que llamaremos FListadoSencillo.
� Sobre FListadoSencillo pegar:
• Un componente QuickRep (el formulario se convierte en la hoja de impresión). Modificar las propiedades:
• DataSet para que señale a la tabla
EJEMPLO1.DBF (del módulo de datos)
• ReportTitle asignándole Agenda.

Seminario de Lenguajes – Opción Delphi – Curso 2007 16
Luego de agregar el componente QuickRep
el formulario se verá así
PropiedadesDataSet = DM.AgendaReportTitle = ‘Agenda’

Seminario de Lenguajes – Opción Delphi – Curso 2007 17
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 – Opción Delphi – Curso 2007 18
Luego de agregar las cuatro bandas el
formulario se verá así:
BandType = rbTitle
BandType = rbColumnHeader
BandType = rbDetail
BandType = rbPageFooter

Seminario de Lenguajes – Opción Delphi – Curso 2007 19
Componente QRSysData
QRSysData
� Permite imprimir el título del reporte, el número de página, 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 – Opción Delphi – Curso 2007 20
BANDA 1: Títulos
� Insertar dentro de esta banda dos componentes
de tipo QRSysData:
• Fecha del informe: propiedad Data=qrsDate.
• Título del Reporte
• Data=qrsReportTitle para que muestre el título.
• Alignment=taCenter
• AlignToBand=TRUE
• Para verlo más grande, cambie el tipo de letra
(propiedad Font)

Seminario de Lenguajes – Opción Delphi – Curso 2007 21
Agregar en la 1er. banda dos componentes
QRSysData
Propiedades
Data=qrsReportTitle
Alignment=taCenter
AlignToBand=TRUE
Propiedad
Data=qrsDate

Seminario de Lenguajes – Opción Delphi – Curso 2007 22
Componente QRLabel
QRLabel
� Permite imprimir un texto fijo.
� Modifique la propiedad Caption para indicarlo.

Seminario de Lenguajes – Opción Delphi – Curso 2007 23
BANDA 2: Cabeceras de páginas
� Esta banda aparecerá en todas las páginas, 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 captionscorrespondientes

Seminario de Lenguajes – Opción Delphi – Curso 2007 24
Agregar en la 2da. banda cuatro componentes
QRLabel
Modificar las propiedades
• Caption.• Autosize• Transparent• Frame (DrawBottom=true)

Seminario de Lenguajes – Opción Delphi – Curso 2007 25
Componente QRDBText
QRDBText
� Permite imprimir el contenido de un campo de una tabla
o de una consulta.
� Es necesario indicar las propiedades:
• DataSet = DM.Agenda
• DataField = Campo a imprimir.

Seminario de Lenguajes – Opción Delphi – Curso 2007 26
BANDA 3 : Cuerpo del listado
� Propiedad BandType=RbDetail.
� Insertar cuatro componentes QRDBText
asociadas a cada campo a listar.
� Para cada QRDBText
• DataSet : DM.Agenda
• DataField : el campo correspondiente.
Ajustar el tamaño de la sección por encima y por debajo de
los componente QRDBText para que no aparezcan demasiado separados en la impresión.

Seminario de Lenguajes – Opción Delphi – Curso 2007 27
Agregar en la 3er. banda cuatro componentes
QRDBText
Modificar las propiedades
DataSet y DataField

Seminario de Lenguajes – Opción Delphi – Curso 2007 28
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 – Opción Delphi – Curso 2007 29
Insertando el nro. de página
Propiedad
Data=qrsPageNumber

Seminario de Lenguajes – Opción Delphi – Curso 2007 30
Reporte sencillo

Seminario de Lenguajes – Opción Delphi – Curso 2007 31
Visualización del reporte
� En el formulario principal pegar un botón con el siguiente OnClick:
procedure TFReportes.BtnSencilloClick(Sender: TObject);
begin
ListadoSencillo.QuickRep1.Preview;
end;
Ejecutar

Seminario de Lenguajes – Opción Delphi – Curso 2007 32
Agrupando la información del
reporte
� Se desea modificar
la impresión de la
agenda de la
siguiente forma:

Seminario de Lenguajes – Opción Delphi – Curso 2007 33
Reportes con grupos
� OnClick
procedure TFReportes.BtnGruposClick(Sender: TObject);
begin
FGrupos.QuickRep1.preview;
end;

Seminario de Lenguajes – Opción Delphi – Curso 2007 34
Ejemplo
� Agregar un nuevo formulario llamado FGrupos.
� Para no rehacer todo lo anterior, pegar sobre FGrupos una copia del componente QuickRepdel formulario FListadoSencillo

Seminario de Lenguajes – Opción Delphi – Curso 2007 35
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 – Opción Delphi – Curso 2007 36
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. Señala 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 página siguiente. Por defecto vale False.

Seminario de Lenguajes – Opción Delphi – Curso 2007 37
Reporte con grupos
� Agregar un componente QRGroup
Esta banda corresponde al QRGroup

Seminario de Lenguajes – Opción Delphi – Curso 2007 38
Reporte con grupos
� Sobre el QRGroup pegar un QRLabel
que mostrará la letraPropiedades:
• Font
• Name

Seminario de Lenguajes – Opción Delphi – Curso 2007 39
Reporte con grupos
� En el componente QRGroup falta
indicar:
• Propiedad Expression
Expression = copy(nombre,1,1)

Seminario de Lenguajes – Opción Delphi – Curso 2007 40
Reporte con grupos
� Para mostrar la letra utilizar el evento BeforePrintdel QRGroup
procedure TFGrupos.QRGroup1BeforePrint(Sender:
TQRCustomBand; var PrintBand: Boolean);
Var nom : string;
begin
nom := DM.Agenda.fieldbyname('nombre').asString;
QRLetra.caption := copy( nom, 1, 1 );
end;

Seminario de Lenguajes – Opción Delphi – Curso 2007 41
Reporte con grupos
� Ejecutar
� ¿Qué pasa si el
contenido de la
tabla está
desordenado?

Seminario de Lenguajes – Opción Delphi – Curso 2007 42
Ejemplo : indique cómo
construir el siguiente reporte

Seminario de Lenguajes – Opción Delphi – Curso 2007 43
select R.*, A.*
from revistas R, Articulos Awhere (R.id_revista = A.id_revista)
order by fecha desc, R.id_revista, pagina
Componente QuickRep
Propiedades
- DataSet = Query1
- ReportTitle = ‘Catálogo de Revistas’
- Page
- Columns = 2
- ColumnSpace = 0,5 mm

Seminario de Lenguajes – Opción Delphi – Curso 2007 44
BandType = rbTitle
QRGroup
Propiedades
- Expression
- FooterBand
BandType = rbDetail
BandType = rbGroupFooter

Seminario de Lenguajes – Opción Delphi – Curso 2007 45
QRLabel
QRDBText
QRSysData
QRExpr
Propiedad Expression = COUNT

Seminario de Lenguajes – Opción Delphi – Curso 2007 46
QRDBImage
QRDBRichText

Seminario de Lenguajes – Opción Delphi – Curso 2007 47
¿Qué falta?
Construir la lista de temas
relacionados con los
artículos de la revista

Seminario de Lenguajes – Opción Delphi – Curso 2007 48
select distinct grupo
from articulos
where id_revista = :codigo
Se invoca en el
OnBeforePrint de la banda QRGroup

Seminario de Lenguajes – Opción Delphi – Curso 2007 49
var linea : string;
buscado : string;
begin
buscado := Query1.fieldbyname('id_revista').asString;
QGrupos.close;QGrupos.ParamByName('codigo').asString := buscado;
QGrupos.Open;
linea := '';
while not QGrupos.Eof do
beginlinea := linea + QGrupos.fieldbyname('grupo').asString+ ' - ';
QGrupos.next;
end;
if linea<>'' then linea := copy(linea,1,length(linea)-3);
QRLabelTemas.Caption := 'Temas : '+linea;end;
OnBeforePrint de la banda QRGroup

Seminario de Lenguajes – Opción Delphi – Curso 2007 50
Parámetros del Query indicados a través
de la propiedad DataSource
� Un Query con parámetros puede tomar los
valores correspondientes en forma automática
desde otro Query o Table asociado a un DataSource.
� Para hacerlo, deben coincidir el nombre de
cada campo con el de cada parámetro.
� La actualización se realiza cada vez que
cambia el registro actual del maestro.

Seminario de Lenguajes – Opción Delphi – Curso 2007 51
Parámetros del Query indicados a través
de la propiedad DataSource
Tabla REVISTAS.DB
QUERY
- DataSource = el asociado a la tabla
REVISTAS.DB
- SQL
select * from articulos Awhere (A.id_revista = :id_revista)
Nombre del campo de REVISTAS.DB

Seminario de Lenguajes – Opción Delphi – Curso 2007 52
Propiedades- DataSource = DataSource1
- SQLselect distinct grupofrom articulos Awhere A.id_revista = :id_revista
- Active = TRUE
Modificar el proceso OnBeforePrint de la
banda QRGroup
Agregado para poder relacionar el
segundo Query con el primero

Seminario de Lenguajes – Opción Delphi – Curso 2007 53
var linea : string;
buscado : string;
beginlinea := '';
while not QGrupos.Eof do
begin
linea := linea + QGrupos.fieldbyname('grupo').asString+ ' - ';
QGrupos.next;end;
if linea<>'' then linea := copy(linea,1,length(linea)-3);
QRLabelTemas.Caption := 'Temas : '+linea;
end;
OnBeforePrint de la banda QRGroup luego de
modificar la propiedad DataSource de QGrupos