reportes (salida por impresora) · seminario de lenguajes – opción delphi – curso 2007 3...

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)

Upload: habao

Post on 20-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

QuickRep

QuickRep Es la componente básica del reporte

Propiedades

• Dataset

• ReportTitle

Page 5: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

Con doble click

sobre la

componente

QuickRep se

accede al editor de

opciones

Page 7: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

Insertando el nro. de página

Propiedad

Data=qrsPageNumber

Page 30: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

Reporte sencillo

Page 31: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

Reporte con grupos

� Agregar un componente QRGroup

Esta banda corresponde al QRGroup

Page 38: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

Ejemplo : indique cómo

construir el siguiente reporte

Page 43: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

BandType = rbTitle

QRGroup

Propiedades

- Expression

- FooterBand

BandType = rbDetail

BandType = rbGroupFooter

Page 45: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

QRLabel

QRDBText

QRSysData

QRExpr

Propiedad Expression = COUNT

Page 46: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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

QRDBImage

QRDBRichText

Page 47: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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: Reportes (salida por impresora) · Seminario de Lenguajes – Opción Delphi – Curso 2007 3 QuickReports(QR) Esquema General Cada componente QRBand actúa como …

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