Вы находитесь на странице: 1из 53

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 Reportes.dpr
Reporte Sencillo

Se desea obtener un listado de la agenda ordenada alfabticamente. Utilizar la tabla AGENDA.DBF

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 Reportes.dpr
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 EJEMPLO1.DBF (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 = DM.Agenda 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 = DM.Agenda 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 : DM.Agenda 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 TFReportes.BtnSencilloClick(Sender: TObject); begin ListadoSencillo.QuickRep1.Preview; 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 TFReportes.BtnGruposClick(Sender: TObject); begin FGrupos.QuickRep1.preview; 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 := DM.Agenda.fieldbyname('nombre').asString; QRLetra.caption := 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 := Query1.fieldbyname('id_revista').asString; QGrupos.close; QGrupos.ParamByName('codigo').asString := buscado; QGrupos.Open; linea := ''; 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;
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 REVISTAS.DB QUERY - DataSource = el asociado a la tabla REVISTAS.DB - SQL select * from articulos A where (A.id_revista = :id_revista) Nombre del campo de REVISTAS.DB
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 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;
Seminario de Lenguajes Opcin Delphi Curso 2007 53

Вам также может понравиться