Sei sulla pagina 1di 7

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

1

GERADOR DE RELATÓRIOS QUIKREPORT

A impressão de relatórios é uma necessidade na maioria dos sistemas. Quem tem Delphi tem tudo

para imprimir relatórios.

O Delphi vem com dois mecanismos básicos para gerar relatórios: (1) Quick Report e (2) TPrinter.

Além disso existem muitos geradores de relatórios de terceiros que podem ser adquiridos à parte, tais como Report Builder e ReportSmith. O TPrinter permite manipular diretamente a impressora. Cada texto impresso é posicionado na página através de um sistema de coordenadas calculadas em pixels. Isso é tão difícil quanto parece. É melhor pular esse método. No Quick Report o relatório é desenhado em um ambiente visual como se fosse um Form. Esse método é bem mais fácil. Vamos a ele.

1 - Quick Report

Desenhar um relatório com o Quick Report é assim: Você cria um novo Form e nesse Form em branco você desenha o relatório usando os componentes próprios do Quick Report (esses componentes estão na aba QReport da palheta de componetes).

Para fazer o programa imprimir o relatório ou mostrar uma prévia do relatório em vídeo, você deve incluir uma opção de impressão – no menu ou botão - em um Form que seja visível ao usuário (pode ser o Form principal do sistema). O Form do relatório em Quick Report não fica visível ao usuário. Imagine um projeto Project1 que tem um Form chamado Form1. Para fazer um relatório, crie um outro Form chamado Form2. Desenhe seu relatório no Form2. Coloque um botão ou coisa parecida no Form1. Defina uma procedure para responder ao evento do botão. Nessa procedure mande imprimir o relatório do Form2. Não esqueça de declarar o Form2 na cláusula uses do Form1.

A unit do Form1 vai ficar assim:

. . unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;

. . procedure TForm1.Button1Click(Sender: TObject); begin

.

.

Form2.QuickRep1.Preview;

end;

. . Note a declaração da Unit2 (a unit do Form2) na cláusula uses do Form1. Note também a procedure Button1Click, que responde ao evento OnClick do botão Button1. QuickRep1 é o nome do relatório que está no Form2. O método preview do QuickRep1 mostra uma prévia do relatório em vídeo. Para fazer o programa mandar o relatório diretamente para a impressora é só substituir o método preview pelo método print.

.

2 - Desenhando o relatório

Vamos retomar o projeto Pcliente e fazer um relatório de clientes. O relatório vai conter nome, contato, telefone e limite de crédito.

O componente QuickRep é a base para a construção do relatório. É dentro do QuickRep que o

relatório vai ser desenhado.

1. Abra o projeto Pcliente.dpr

2. Crie um Form novo: clique na opção do menu do Delphi "File --> New Form" ou clique no botão New Form da barra de ferramentas.

3. Mude a propriedade Name do Form para frmRelatorio.

4. Salve o Form com o nome Urelat.pas

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

2

3 - Bands

As bands do QuickRep dividem o relatório em faixas de acordo com a função. Existe uma faixa para o cabeçalho, outra para o rodapé, outra para a linha de detalhe, etc. 1.Dê um duplo clique na propriedade Bands do QuickRep Vão aparecer as opções HasColumnHeader, HasDetail, HasPageFooter, HasPageHeader, HasSummary e HasTitle.

Opções da

 

propriedade

Função

Bands

HasTitle

Põe uma faixa (band) para edição do título do relatório. Título é aquela parte do relatório que só aparece no topo da primeira página, depois do cabeçalho. Coloque False.

HasPageHeade

Põe uma faixa para edição do cabeçalho. O cabeçalho aparece no topo de cada

r

página do relatório. Coloque True.

HasDetail

Põe uma faixa para edição de linha de detalhe. A linha de detalhe aparece uma vez para cada registro da tabela. Coloque True.

HasColumnHea

Põe uma faixa para edição do cabeçalho de coluna. Essa faixa aparece entre o

der

cabeçalho e a linha de detalhe. Coloque True.

HasPageFooter

Põe uma faixa para edição do rodapé. Essa faixa aparece no fim de cada página. Coloque True.

HasSummary

Põe uma faixa para edição do sumário. Essa faixa aparece no fim da última página do relatório, antes do rodapé. Coloque True.

para edição do sumário. Essa faixa aparece no fim da última página do relatório, antes do

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

3

4 - DataSet

A próxima propriedade do QuickRep é a DataSet. Essa propriedade aponta para a fonte dos dados que serão impressos. A fonte dos dados, neste caso, vai ser a tabela Cliente. Coloque um componente Table no Form Mude as propriedades do Table para acessar a tabela Cliente

Propriedade do Table

Valor

Active

True

DatabaseName MEUALIAS IndexName idxNOME

Name

TableName Cliente.db

tblCliente

Propriedades do componente Table para o relatório

1. Selecione o componente QuickRep

2. Mude a propriedade DataSet para tblCliente

Outras Propriedades do QuickRep

Propriedade

Função

Name

Nome do componente.

ReportTitle

Mude para relCliente É o nome que vai aparecer na fila de impressão do Windows ou da rede.

Options

Mude para Relatório de Clientes Estas opções permitem impedir que o cabeçalho apareça na primeira

Page

página ou que o rodapé apareça na última. Isso é útil se você quiser que o título ou a faixa de fim de relatório apareçam isolados, sem cabeçalho ou rodapé. No projeto atual deixe como está. Define o formato da página. Altura, largura, margens, orientação (retrato ou paisagem), etc.

5 Cabeçalho

Vamos desenhar o cabeçalho na faixa PageHeader.

1. Selecione a faixa PageHeader

2. Clique e arraste a âncora inferior da faixa para aumentar o tamanho. Âncoras são aqueles pontos pretos que aparecem em volta do componente selecionado.

3. Coloque um componente QRLabel na faixa PageHeader. Note que os componentes não podem ser movidos de uma faixa para outra.

4. Centralize o componente QRLabel mudando a propriedade Alignment para taCenter e a propriedade AlignToBand para True.

5. Mude a propriedade Caption para "Relatório de Clientes" (sem as aspas).

6. Mude a opção Size da propriedade Font para 20

Se você quiser pode incluir uma imagem (um logotipo, por exemplo).

7. Coloque um componente QRImage na faixa PageHeader.

8. Clique na propriedade Picture

9. Clique no botão das reticências

10.Escolha uma imagem com o Picture Editor

8. Clique na propriedade Picture 9. Clique no botão das reticências 10.Escolha uma imagem com o

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

Cabeçalho de Coluna

4

Vamos desenhar o cabeçalho de coluna na faixa ColumnHeader.

1

Coloque 4 componentes QRLabel na faixa ColumnHeader (um para cada coluna do relatório).

2

Altere as propriedades Caption para Nome, Contato, Telefone e Limite de Crédito.

3

Altere o Style das propriedades Font para Underline e Italic. Só para enfeitar um pouco vamos colocar uma linha separando o cabeçalho das linhas de detalhe.

4

Coloque um componente QRShape na faixa ColumnHeader

5

Mude a opção Width da propriedade Pen para 4. Isso vai engrossar a linha.

6

Mude a propriedade Shape para qrsHorLine. O componente QRShape tem várias formas pré- definidas. qrsHorLine é a linha horizontal.

7

Estique a linha por toda extensão do relatório usando as âncoras.

a linha por toda extensão do relatório usando as âncoras. 6 - Linha de Detalhe Vamos

6 - Linha de Detalhe

Vamos desenhar a linha de detalhe na faixa Detail.

8

Coloque 4 componentes QRDBText na faixa Detail (um para cada coluna do relatório). Faça com que eles fiquem grudados na parte superior da faixa.

9

Reduza a altura da faixa até não sobrar espaço entre os componentes e o fim da faixa. Se sobrar algum espaço, as linhas de detalhe vão aparecer afastadas.

10

Mude a propriedade DataSet de cada componente QRDBText para tblCliente. Isso vai indicar a fonte dos dados.

11

Mude as propriedades DataField para os respectivos campos de cada coluna do relatório.

12

Na última coluna (Limite de Crédito) mude a propriedade Alignment para taRightJustify. Tradicionalmente os números são alinhados à direita.

13

Na última coluna mude a propriedade AutoSize para False. Quando AutoSize é igual a True o campo

é

esticado ou encolhido para caber o texto valor a ser impresso. O problema é que o AutoSize estica

campo fixando a posição da borda esquerda, o que acaba desalinhando os campos alinhados à direita.

o

14

Coloque a máscara de edição ###,##0.00 na propriedade Mask.

desalinhando os campos alinhados à direita. o 14 Coloque a máscara de edição ###,##0.00 na propriedade

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

5

7 Sumário

Vamos desenhar o sumário do relatório na faixa Summary. Vamos colocar nessa faixa um totalizador para imprimir o somatório dos limites de crédito.

15 Coloque na faixa Summary um componente QRExpression. Esse componente é um curinga que pode imprimir um valor constante, um campo da tabela ou um valor calculado.

16 Mude as propriedades Alignment para taRightJustify e AutoSize para False.

17 Clique na propriedade Expression. Essa é a propriedade que contém a fórmula a ser calculada.

18 Digite a fórmula SUM(tblCliente.VALOR_CREDITO). Para ver outras fórmulas clique no botão das reticências ao lado da propriedade Expression. Isso vai

abrir o Expression Wizard que vai ajudar a criar outras fórmulas.

19 Mude o Style da propriedade Font para Bold.

20 Coloque a máscara de edição ###,##0.00 na propriedade Mask.

21 Mude a propriedade Master para relCliente. Toda fórmula que contém funções agregadoras (somatório, média, mínima, máxima, etc.) precisa de um Master. Esse Master indica quando calcular (o que entra ou não no cálculo). O relCliente em Master indica que toda vez que uma linha de detalhe for impressa, essa linha vai ser totalizada.

22 Coloque um QRLabel ao lado do QRExpr

23 Mude o Caption para Total:

um QRLabel ao lado do QRExpr 23 Mude o Caption para Total: Mude o Style da

Mude o Style da propriedade Font para Bold

8 Rodapé

Vamos desenhar o rodapé do relatório na faixa PageFooter.

24 Coloque um componente QRSysData na faixa PageFooter à esquerda. Esse componente é usado para imprimir informações do sistema, tais como data, hora e número da página.

25 Mude a propriedade Data para qrsDate (data corrente).

26 Coloque outro componente QRSysData na faixa PageFooter à direita

27 Mude a propriedade Data para qrsPageNumber (número da página).

28 Coloque um componente QRLabel próximo ao número da página.

29 Mude a propriedade Caption para Página:

30 Mude o Size da propriedade Font de todos os componentes do rodapé para 8

Para dar um toque final coloque mais uma linha separando o rodapé das linhas de detalhe, do mesmo jeito que foi feito no cabeçalho das colunas.

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

6

Barão do Rio Branco – Prof. Giovani Dall Agnol 6 9 - Imprimindo com Quick Report

9 - Imprimindo com Quick Report

Agora que o relatório está desenhado, vamos colocar a opção de impressão no Form principal. Abra o Form frmCliente

31 Inclua a Unit do relatório – Urelat – na cláusula uses

32 Inclua um botão na barra de ferramentas do Form. Se você esqueceu como fazer, veja o tópico Barra de Ferramentas em Componentes visuais.

33 Coloque uma figura de impressora no botão. Veja o tópico Lista de Imagens no Componentes visuais.

34 Inclua uma opção Imprimir no menu. Veja o tópico Menu em Componentes visuais.

35 Inclua uma procedure para tratar o evento OnClick da opção Imprimir do menu.

36 Associe o evento OnClick do botão Imprimir à mesma procedure.

A procedure deve ficar assim:

unit Ucliente;

interface

uses

Windows,

.

., DBTables, Urelat;

procedure TfrmCliente.Imprimir1Click(Sender: TObject); begin

frmRelatorio.QrrelCliente.Preview;

end;

.

Observações:

A unit do relatório (Urelat) é declarada na cláusula Uses.

frmRelatorio é o nome do Form do relatório.

relCliente é o nome do componente QuickRep no Form frmRelatorio.

Preview é o comando que mostra o relatório no vídeo. Se quiser imprimir diretamente na impressora é só substituir o comando Preview pelo Print. Quando executar o programa você vai ver o relatório no vídeo assim:

DELPHI - Instituto Barão do Rio Branco

– Prof. Giovani Dall Agnol

7

DELPHI - Instituto Barão do Rio Branco – Prof. Giovani Dall Agnol 7