Professional Documents
Culture Documents
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).
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 1/10
06/05/2019 Artigos
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).
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.
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 3/10
06/05/2019 Artigos
frxReport1.ShowReport();
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 4/10
06/05/2019 Artigos
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 5/10
06/05/2019 Artigos
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:
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.
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.
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).
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 8/10
06/05/2019 Artigos
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
E-mail: www.lucianopimenta.net
www.theclub.com.br/restrito/revistas/201307/fast1307.aspx 10/10