You are on page 1of 10

06/05/2019 Artigos

FastReport no Delphi

FastReport é um gerador de relatórios presente no Delphi desde a sua versão 4. A partir da versão XE2, passou a ser a
ferramenta de relatórios “oficial” do Delphi. Com o FastReport podemos criar poderosos relatórios pra nossas aplicações Win32
e FireMonkey com Delphi.
A ferramenta ainda possui suporte (adquirido separadamente) para .NET, Mono e Lazarus. Possui ainda uma ferramenta
chamada FastCube para análise de dados e construção de relatórios e gráficos (OLAP), uma ferramenta de scripts (FastScript) e o
FastQueryBuilder, construtor visual de consultas SQL.
Para ver exemplos e outras informações sobre essas ferramentas, acesse: www.fast-report.com/pt/. Nesse artigo, vamos
conhecer a versão do FastReport que acompanha o Delphi XE4, aprendendo a criar relatórios simples, agrupados, formatações e
muitos outros exemplos.
Conhecendo a ferramenta
Ao abrir o Delphi e criar um projeto VCL Foms, podemos visualizar a aba FastReport 4.0 (Figura 1).

Figura 1. Aba do Fast Report no Delphi


 
Trabalharemos para criar relatórios simples, usando dois componentes: o frxReport e o frxDBDataSet. O primeiro é o
editor de relatórios, onde basta dar um duplo clique que teremos o ambiente de criação dos relatórios (Figura 2). O segundo
faz a ponte, entre os dados e o relatório.

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 1/10
06/05/2019 Artigos

Figura 2. Ambiente de desenvolvimento de relatórios (fonte: FastReport User’s Manual)


 
Baseado na Figura 2, destacamos a seguir as principais janelas e editores.

1. Report designer: local onde vamos adicionar as bandas e os objetos para o relatório;
2. Barra de menus;
3. Barra de ferramentas: botões com as opções de carregar relatórios, criar novos, salvar etc;
4. Barra de ferramentas do objeto: objetos que podem ser adicionados ao relatório;
5. Report page tabs: abas para configuração da página do relatório;
6. Report tree: janela onde podemos visualizar as bandas e objetos inseridos no relatório;
7. Object Inspector: janela para definição das propriedades dos objetos do relatório;
8. Data tree: janela com os objetos de dados do relatório. Podemos arrastar facilmente um campo para o relatório;
9. Régua;
10. Status line: semelhante a uma barra de status, com informações sobre o objeto selecionado no relatório.

Primeiro exemplo
Volte ao Delphi e adicione um frxDBDataSet (um frxReport também deve estar no formulário). Crie uma conexão com o
banco de dados de sua preferencia (usarei no artigo, o Firebird). Usarei no artigo um Data Module para conter os componentes
de conexão com o banco, pois usaremos vários exemplos.
Vincule o frxDBDataSet com o DataSet que retorna os dados da sua consulta. Dê um duplo clique no frxReport para
abrir o editor. Primeiramente, vamos vincular o frxDBDataSet com o nosso relatório, acessando o menu Report>Data. No editor
que abrir, escolha o respectivo controle de dados (Figura 3).

Figura 3. Vinculando o componente de dados com o relatório


www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 2/10
06/05/2019 Artigos

 
Vamos agora, adicionar as bandas do relatório. Clique no botão Insert Band na barra de ferramentas de objetos.
Conforme vemos na Figura 4 é mostrado um menu suspenso que todas as opções de banda.

Figura 4. Adicionando bandas ao relatório


 
Adicione os tipos: Page Header, Page Footer e Master Data. O Master Data, abre um editor, solicitando o respectivo
DataSet da aba. Selecione frxDBDataSet1. Existem duas maneiras de adicionar os campos na banda Master Data para exibir os
dados.
Arraste os campos da janela Data tree para o relatório. Note que após inserir os campos, ao passar o mouse, é
mostrado uma seta, onde podemos clicar e será exibido um menu com os campos do DataSet, assim fica fácil modificar o
objeto para outro campo da consulta (Figura 5).

Figura 5. Mudando o campo do objeto facilmente


 
Outra maneira de adicionar os campos no relatório é escolhendo um Text object na barra de ferramentas e adicionando
o mesmo no relatório. Será aberto um editor com alguns botões (Figura 6).

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 3/10
06/05/2019 Artigos

Figura 6. Editor do Text Object


 
No editor, temos abas onde vamos configurar o formato do campo, formatações de fonte etc. o primeiro botão da aba
Text, acessa outro editor, onde podemos escolher os campos da consulta, variáveis do relatório, funções, etc (Figura 7).

Figura 7. Editor de expressões do relatório


 
Podemos usar o editor do Text Object para apenas adicionar rótulos (textos) no relatório, onde basta digitar o texto
desejado na aba Text. Na barra de ferramentas temos as funcionalidades necessárias para formatar os textos digitados nesse
objeto.
Note que ao adicionarmos um Text Object ou mesmo adicionar um campo usando a janela Data tree, existem linhas
que nos auxiliam para que os controles fiquem alinhados tanto horizontalmente, como verticalmente (Figura 8).

Figura 8. Alinhando os componentes do relatório


 
Feche o relatório. No Delphi, adicione um botão e adicione o seguinte código em seu evento OnClick:
 

frxReport1.ShowReport();

 
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 4/10
06/05/2019 Artigos

Execute a aplicação e visualize o relatório em funcionamento (Figura 9).

Figura 9. Relatório de listagem em execução


Formatação de objetos
Como podemos ver no relatório que criamos, o campo Salary, esta como texto, sem a devida formatação. Para ajustar
isso, abra o relatório e dê um duplo clique no campo. No editor, acesse a aba Format e configure, conforme a Figura 10, onde
indicamos o tipo de formatação e o separador decimal (vírgula) do formato.

Figura 10. Relatório de listagem em execução


 
Nem precisamos executa o projeto novamente, basta acessar o botão de preview no próprio ambiente do relatório para
visualizar as modificações. E se precisássemos modificar a formatação de um objeto (fonte, cor etc) de acordo com algum
parâmetro que existisse, como faríamos? É bastante simples.
Acesse o objeto que deseja modificar a formatação. Dê um duplo clique para acessar o editor e a aba Highlight. Na
opção Condition, digite: “<frxDBDataset1."SALARY"> > 50000”. Marque em Font a opção Bold. O botão Color, indica a cor do
texto quando a condição do objeto for verdadeira.
Você também pode usar o botão para acessar o editor de expressões para montar a mesma manualmente. De acordo
com o configurado antes, o campo Salary do relatório deve aparecer em vermelho quando o valor desde for maior que
50.000,00. Veja na Figura 11 nosso exemplo em execução.

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 5/10
06/05/2019 Artigos

Figura 11. Formatação condicional do relatório


 
Caso você deseje mudar a formatação de todo “a linha”, para que não precise fazer manualmente a configuração de
cada objeto, basta selecionar todos os objetos e acessar a propriedade HighLight>Condition e fazer a mesma configuração
anterior.
Outra formatação bastante usada é a de indicar a quantidade de páginas e a página atual do relatório. O FastReport
possui variáveis que retornam essas informações e que são fáceis de serem utilizadas.
Acesse a aba Variables do Data tree e arraste para o formulário um Date e um TotalPages. Para customizar esses variáveis, basta
dar um duplo clique e digitar o texto que deseja. Veja na Figura 12 o rodapé do relatório (modifiquei o mesmo para mostrar
mais de uma página).

Figura 12. Formatação do rodapé do relatório


 

Nota: Para adicionar um texto, basta digitá-lo no editor, tomando o cuidado de não remover a variável.
 
Arquivos de relatórios
Para você que estava acostumado com o Rave Reports, vai notar uma diferença interessante no FastReport. Cada
relatório é um arquivo FR3. No Rave, o arquivo RAV era de projeto e dentro poderíamos ter vários relatórios.
No FastReport, cada FR3, é apenas um relatório. Salve o arquivo e modifique o código do botão para o seguinte
código:
 

frxReport1.LoadFromFile('Listagem.fr3');
frxReport1.ShowReport();

Nota: caso o FastReport não encontre o arquivo, nenhum erro é mostrado, apenas o relatório não exibe nenhum
registro.
 
Usamos o método LoadFromFile para carregar o arquivo de relatório no frxReport. Isso nos dá a facilidade de termos
apenas um controle e vários relatórios, sendo carregados de acordo com a nossa necessidade.
Agrupamento
Outro exemplo muito usado em relatórios é o de agrupamento de dados. Neste exemplo, vamos fazer a mesma
listagem anterior, com a diferença que vamos retornar todos os empregados, agrupados pelo seu departamento.
Veja o SQL da consulta:
 

select EMPLOYEE.first_name, EMPLOYEE.last_name,


employee.salary, DEPARTMENT.department
from EMPLOYEE
inner join DEPARTMENT on DEPARTMENT.dept_no = EMPLOYEE.dept_no
order by DEPARTMENT.department

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 6/10
06/05/2019 Artigos

Crie um novo frxReport (se desejar, em outro formulário). Caso seja carregado o relatório anterior, crie um novo. Não
esqueça de modificar o Data do relatório. Caso tenha criado um novo formulário, atende para o nome do formulário no editor
de seleção de DataSets (Figura 3).
De um duplo clique no Master Data e vincule com o DbDataSet. Adicione uma banda Group Header. Um editor é aberto
para configurarmos a banda do grupo. Vamos indicar que o agrupamento se dará pelo campo Department. Podemos ainda
indicar uma expressão para o agrupamento.
Nas opções de agrupamento, podemos configurar para que a cada grupo, seja mostrado em uma nova página ou drill-
down, onde clicamos sobre o grupo para mostrar os dados.

Dica: caso você escolha a opção drill-down ao executar o relatório, apenas os grupos serão mostrados. É necessário
clicar em cima do mesmo para exibir os registros.
 
Arraste a banda para que fique acima da Master Data. Veja na Figura 13 o relatório agrupado em execução.

Figura 13. Relatório agrupado


Somatório
Sempre que usamos agrupamento de dados em um relatório, precisamos somar um determinado campo ou contar a
quantidade de registros. Vamos aproveitar esse relatório para fazer esse exemplo. Adicione uma banda GroupFooter no
relatório.
Adicione um Text Object e acesse o botão Insert Aggregate da aba Text. No editor, vamos configurar um campo que terá
seu valor somado, que no caso é Salary. Veja na Figura 14 como ficou a configuração.

Figura 14. Configurando o somatório do grupo


 

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 7/10
06/05/2019 Artigos

Faça a formatação no campo, semelhante ao campo Salary. Rode o relatório e note que temos o somatório por grupo.
Mas e se quisermos o valor total no final do relatório? Basta adicionar uma banda ReportSummary e fazer a mesma
configuração anterior.

Veja na Figura 15 o relatório com somatório do grupo e somatório total.

Figura 15. Somatórios no relatório

Dica: temos uma opção bem interessante na configuração do somatório. Caso precisássemos mostrar um somatório
acumulado por grupos, basta marcar a opção Running total na janela Insert Agreggate (Figura 14). Assim, a cada final de grupo,
teríamos um somatório acumulado.
 
Master/detail
Outro exemplo muito comum em relatório e de mostrar os dados master e os details. Exemplo clássico: nota fiscal, os
dados referente ao cliente (comprador) podemos considerar o master, e as informações dos produtos da nota, são o detail.
Essas duas fontes de dados, precisam ter um relacionamento. Primeiro, teremos duas consultas separadas, uma para a
master e outra para detail. Nesse exemplo, estou pesquisando os empregados (Employee) e o histórico de salários
(Salary_History). Precisaremos, portanto de dois frxDBDataSet (um para cada consulta).
O relacionamento, faremos nos componentes de consulta, o que é bastante simples. Adicione um DataSource e faça a
ligação com a consulta master. No componente (ClientDataSet, Query, Table etc) com os dados da consulta detail, acesse a
propriedade MasterSource e escolha o DataSet anterior. Em MasterFields, acesse o editor e configure o campo de
relacionamento (nesse caso Emp_no).
Crie um novo relatório e adicione as seguintes bandas: Page Header, Master Data, Detail Data e Page Footer. Na Master
Data você deve configurar o frxDBDataSet que tem os dados do máster (no exemplo, Employee) e consequentemente, para o
Detail Data, os dados do detail (Salary_History).

Veja na Figura 16 a disposição dos campos nas duas bandas.


Figura 16. Relatório master/detail
 
Execute o relatório e veja que os dados estão agrupados de acordo com o nome do empregado.
Exportação de relatórios
Uma característica interessante que observei no FastReport é a quantidade de opções de tipos de exportações para os
relatórios. Veja na Figura 17 a aba de exportações do FastReport.

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 8/10
06/05/2019 Artigos

Figura 17. Tipos de exportações do FastReport


 
Para exportar, por exemplo, um relatório para HMTL, basta adicionar no formulário um frxHTMLExport. Acesse a IDE de
desenvolvimento e execute o preview do relatório. Note que um botão foi adicionado para exportar o relatório.
Para cada tipo de exportação, um item de menu será adicionado no preview do relatório (Figura 18).

Figura 18. Opções de exportação no preview do relatório


 
Na versão comercial do FastReport, diferente da versão que acompanha o Delphi, existe a opção de envio do relatório
por e-mail. Ao clicar no componente, um editor será mostrado. Nele, na aba E-mail configuramos para quem o relatório será
enviado, assunto, corpo do e-mail e escolhendo o formato desejado (Figura 19).
Na aba Account, configuramos o e-mail de envio, ou seja, as nossas configurações de e-mail para o envio do mesmo.

Figura 19. Editor para envio por e-mail do relatório


Conclusões
Vimos nesse artigo como trabalhar com o FastReport, a “nova” ferramenta para gerar relatórios no Delphi. Existem
muitas outras possibilidades para criarmos relatórios profissionais para suas aplicações Delphi, assim, no próximo artigo
veremos como criar gráficos, cross-tab, trabalhar com templates (semelhante à herança) etc.
Um grande abraço a todos e até a próxima!

 
Sobre o Autor
Luciano Pimenta (NOVO DOMINIO: www.lucianopimenta.com) é desenvolvedor
Delphi/C# para aplicações Web com ASP.NET, Windows com Win32 e Windows Forms
com .NET. Palestrante da 4ª edição da Borland Conference (BorCon) e da 1ª Delphi
Conference. É MVP Embarcadero, grupo de profissionais que ajudam a divulgar o Delphi
no mundo. Atualmente é desenvolvedor da SoftDesign fábrica de softwares em Porto

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 9/10
06/05/2019 Artigos

Alegre-RS. Autor de mais de 80 artigos e de mais de 600 vídeos aulas publicadas em


revistas e sites especializados, além de treinamentos presenciais e multimídias. É consultor
da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de
dados.

E-mail: www.lucianopimenta.net

www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 10/10

You might also like