FastReport no Delphi - Master/Detail


Vamos brincar com o FastReport? Criaremos um relatório de venda, e que exiba os produtos nas linhas abaixo. Vamos aproveitar e apresentar um total no Footer1
Vamos iniciar um novo projeto (File >> New >> Windows VCL Application);

Nesse projeto vamos utilizar: 
3 - TBitBtn; 
2 - TfrxDBDataset; 
1 - TfrxReport 
2 - TClientDataSet ( O componente de conexão de banco de dados de vocês ); 

Vamos alterar os nome das TfrxDBDataset, um se chamara frxDataset e será colocado a propriedade do DataSet a tabela cdsVendas, o outro se chamara frxDataset2 e será colocado a propriedade do DataSet a tabela cdsVendasProdutos
As tabelas cdsVendas e cdsVendasProdutos devem estar devidamente vinculados, abertas pelo delphi e agora vamos para o FastReport.

Dê dois cliques no componente frxReport para abri na forma de Designer, vamos iniciar (File >> New Report). Pronto criamos um novo documento ele nos trouxe como padrão ReportTitle1, MasterData1 e um PageFooter1, adicionar as tabelas no FastReport menu (Report >> Data);

Adicionar as seguintes bandas: DetailData1 para colocar os itens, Footer para o total de registros, e um Child1 para o cabeçalho das vendas e um Child2 para o cabeçalho dos Produtos o MasterData1 para adicionar nossas vendas já esta adicionado!

Na banda MasterData1 de um duplo clique (Na parte laranja) e adicione a tabela frxDataset;
Na banda DetailData1 de um duplo clique (Na parte laranja) e adicione a tabela frxDataset2;
Vamos adicionar os campo do titulo, "Número da venda, Nome cliente, Data, Valor total" clicando no "Text Object" o A vermelho ao lado e coloque no Child1 ( O que esta acima do MasterData1 )


Agora vamos colocar os campo das vendas no MasterData1, clica ao lado na Data e arrasta e solta no MasterData1, tentamos deixar bem alinhado com o titulo a cima para poder entender bem qual titulo se refere a cada coluna.

Obs: Quando exportado para Excel ou para alguma planilha se os componentes não estiverem bem alinhados acaba se criando linhas e colunas desnecessárias

Selecione o campo colocamos o valor total no MasterData de um duplo clique no mesmo e na aba Format vamos colocar a Caregory Number e vamos escolher a terceira opção de formatação
Selecione o campo colocamos a Data no MasterData de um duplo clique no mesmo e na aba Format vamos colocar a Caregory Date/Time e vamos selecionar a primeira opção e alterar no Format String os "." por "/" como no gif abaixo.


Agora colocamos os campos de produtos na banda DetailData1 da mesma maneira que colocamos os campos da venda, abaixo como ficou.

Agora colocaremos os totais no Footer1, faremos a soma das Quantidades de itens e uma soma de quantos produtos temos ( Somara a quantidade de vezes que irá passar pelo DetailData1). Temos um gif abaixo mostrando como fazer.

Function = E a função que vai utilizar (SUM, MIN, MAX, AVG, COUNT...);
Data band = E a banda que deseja fazer o calculo;
DataSet = O DataSet da banda desejada;
DataField = Caso necessário utilizar no calculo;
Exemplo: Uma soma de todas as quantidades de uma venda. 
Function: SUM (Soma) 
DataBand: DetailData1 que ira passar em todos os itens da venda;
DataSet: frxDataset2 que contem as informações da quantidade que ira ser somada 
DataField: O campo Quantidade que iremos somar

Por fim selecione todos os campo da banda MasterData1 e na propriedade Color coloque clSilver


11 comentários:

  1. Bonito trabalho da série sobre FastReport. Bem organizado e didático para quem está começando na ferramenta.

    ResponderExcluir
  2. Ana Paula sou autodidata em Delphi desde 2007, encontrei seu Blog por acaso, e estou aumentando meu acervo sobre Delphi, com seus tutoriais,
    são excelentes, muito bem elaborados, extremamente grato.

    ResponderExcluir
  3. Boa tarde!! Onde eu poderia obter os bancos de dados deste exemplo? Obrigada

    ResponderExcluir
    Respostas
    1. Este exemplo esta no link https://www.4shared.com/zip/PH2WmdLQea/000027.html?
      Não utilizei banco de dados!

      Excluir
  4. Uma pergunta e sugestão: você não poderia fazer um exemplo de um relatório com subreport?

    ResponderExcluir
    Respostas
    1. Obrigada pela sugestão, vou fazer sim um exemplo com subreport

      Excluir
    2. https://anaprogramadorajunior.blogspot.com/2020/08/fastreport-no-delphi-subreport.html

      Excluir