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
5. Coloque um componente QuickRep no Form novo. O QuickRep está na aba QReport da palheta de
componentes.
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
Bands
Função
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
r
Põe uma faixa para edição do cabeçalho. O cabeçalho aparece no topo de cada
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
der
Põe uma faixa para edição do cabeçalho de coluna. Essa faixa aparece entre o
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.







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 tblCliente
TableName Cliente.db

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.
Mude para relCliente
ReportTitle É o nome que vai aparecer na fila de impressão do Windows ou da rede.
Mude para Relatório de Clientes
Options Estas opções permitem impedir que o cabeçalho apareça na primeira
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á.
Page 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




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

Cabeçalho de Coluna

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.


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
o campo fixando a posição da borda esquerda, o que acaba desalinhando os campos alinhados à
direita.
14 Coloque a máscara de edição ###,##0.00 na propriedade Mask.





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:
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


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