Quick Report

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

Transcript of Quick Report

Page 1: Quick Report

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)

Page 2: Quick Report

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.

Page 3: Quick Report

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.

Page 4: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 4

QuickRep

QuickRep Es la componente básica del reporte

Propiedades

• Dataset

• ReportTitle

Page 5: Quick Report

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

Page 6: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 6

Con doble click

sobre la

componente

QuickRep se

accede al editor de

opciones

Page 7: Quick Report

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.

Page 8: Quick Report

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.

Page 9: Quick Report

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

Page 10: Quick Report

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

Page 11: Quick Report

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.

Page 12: Quick Report

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.

Page 13: Quick Report

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.

Page 14: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 14

Ejemplo Reportes.dpr

� Sobre una aplicación Nueva agregar un

módulo de datos

Page 15: Quick Report

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.

Page 16: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 16

Luego de agregar el componente QuickRep

el formulario se verá así

PropiedadesDataSet = DM.AgendaReportTitle = ‘Agenda’

Page 17: Quick Report

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)

Page 18: Quick Report

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

Page 19: Quick Report

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.

Page 20: Quick Report

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)

Page 21: Quick Report

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

Page 22: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 22

Componente QRLabel

QRLabel

� Permite imprimir un texto fijo.

� Modifique la propiedad Caption para indicarlo.

Page 23: Quick Report

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

Page 24: Quick Report

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)

Page 25: Quick Report

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.

Page 26: Quick Report

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.

Page 27: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 27

Agregar en la 3er. banda cuatro componentes

QRDBText

Modificar las propiedades

DataSet y DataField

Page 28: Quick Report

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

Page 29: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 29

Insertando el nro. de página

Propiedad

Data=qrsPageNumber

Page 30: Quick Report

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

Reporte sencillo

Page 31: Quick Report

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

Page 32: Quick Report

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:

Page 33: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 33

Reportes con grupos

� OnClick

procedure TFReportes.BtnGruposClick(Sender: TObject);

begin

FGrupos.QuickRep1.preview;

end;

Page 34: Quick Report

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

Page 35: Quick Report

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.

Page 36: Quick Report

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.

Page 37: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 37

Reporte con grupos

� Agregar un componente QRGroup

Esta banda corresponde al QRGroup

Page 38: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 38

Reporte con grupos

� Sobre el QRGroup pegar un QRLabel

que mostrará la letraPropiedades:

• Font

• Name

Page 39: Quick Report

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)

Page 40: Quick Report

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;

Page 41: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 41

Reporte con grupos

� Ejecutar

� ¿Qué pasa si el

contenido de la

tabla está

desordenado?

Page 42: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 42

Ejemplo : indique cómo

construir el siguiente reporte

Page 43: Quick Report

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

Page 44: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 44

BandType = rbTitle

QRGroup

Propiedades

- Expression

- FooterBand

BandType = rbDetail

BandType = rbGroupFooter

Page 45: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 45

QRLabel

QRDBText

QRSysData

QRExpr

Propiedad Expression = COUNT

Page 46: Quick Report

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

QRDBImage

QRDBRichText

Page 47: Quick Report

Seminario de Lenguajes – Opción Delphi – Curso 2007 47

¿Qué falta?

Construir la lista de temas

relacionados con los

artículos de la revista

Page 48: Quick Report

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

Page 49: Quick Report

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

Page 50: Quick Report

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.

Page 51: Quick Report

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

Page 52: Quick Report

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

Page 53: Quick Report

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