FastReport no Delphi - Subreport


Criaremos um relatório de pedidos, então iremos exibir de Titulo o nome do "Cliente" e "Número do Pedido" e abaixo os produtos. Vamos organizar o relatório jogando os produtos para um subreport e com os totais dos produtos. 

Vamos iniciar um novo projeto (File >> New >> Windows VCL Application);

Nesse projeto vamos utilizaremos: 

1 - 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 cdsPedidos, o outro se chamara frxDataset2 e será colocado a propriedade do DataSet a tabela cdsPedidosProdutos

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);



Na banda MasterData1 vamos vincular com o DataSet FrxDataSet(cdsPedidos), apos vincular adicionar os campos "Número do pedido" e "Nome do cliente".


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

Então vamos alinhar os componentes utilizando a propriedade Align. E aumentar a fonte, pintar a os campos (Memos) em outra cor para dar uma destacada no titulo.


Pronto. Agora temos o cabeçalho de cada pedido pronto! Vamos para nosso subreport com nossos produtos.

Na palheta da lateral vamos procurar o subreport, vamos clicar nele e depois clicar onde desejamos colocar, em nosso exemplo vamos colocar alinhado abaixo do titulo dos pedidos dentro do mesmo MasterData1 que já estávamos utilizando. Ao fazer isto ira criar uma nova tela onde vamos trabalhar os nossos itens, perceba em cima que temos agora duas abas. lembrando de deixar o left do subreport 0 para ficar alinhado ao titulo! 


Começamos a trabalhar em nosso nova aba agora, vamos adicionar um Header1 e um MasterData vinculada a tabela FrxDataSet2, e os campos de "Produto", "Quantidade" e "Valor" com seus respectivos cabeçalhos.


Vamos para nosso totalizador por item! Vamos adicionar um Footer1 e nele os campos para exibir nossos somatórios. 


Vamos ver como ficou o resultado de nosso relatório de pedidos? 

7 comentários:

  1. Oi
    Sou de Buenos Aires e tenho um problema que espero que você possa me ajudar.
    Preciso gerar um único relatório PDF a partir de vários relatórios, usando:
    Reporte.LoadFromFile(rpt.FileRpt);
    Reporte.PrepareReport(False);

    Tive 2 problemas.
    Nas querys eu uso macros que em alguns relatórios ao fazer a unificação não funcionam
    Por exemplo

    select * from tbl1 where & condition order by id

    na unificação é executado como
    selecione * from tbl1 where order by id
    gerando um erro SQL

    Por outro lado tenho código nos meus formulários onde modifico os dados do conjunto de dados escolhido que na unificação não são processados.

    ResponderExcluir
  2. Boa noite! Como assim gerar um único pdf a partir de vários relatórios? Tem como me enviar imagens? a.ana.paulanovello@gmail.com

    ResponderExcluir
  3. Hi!
    Here is solution: https://www.fast-report.com/en/blog/353/show/
    May be Ana would like to translate or make own article based on it.

    Anyway you can always ask our support (support@fast-report.com).
    Thank you!

    ResponderExcluir
  4. Boa tarde Ana Paula, primeiramente parabéns pelo blog e pela forma intuitiva que explica seu conteúdo. Preciso de uma ajuda, tenho uma demanda que usa 2 pedidos em uma mesma folha a4 para ser impresso na laser. Como poderia fazer no FastReport para quando o número de itens for em quantidade maior que a meia página o FR3 em tempo de execução mudar o tamanho da página?

    ResponderExcluir
    Respostas
    1. Boa tarde! Obrigada! Quando precisei fazer isso fiz assim exemplo: Cabem 15 itens em meia folha, então joga para o FastReport a quantidade de item que sua tabela, por variável exemplo (QuantidadeProdutos)
      E na entrada do Fast ficaria assim

      Begin
      DetailData2.StartNewPage := () > 15;
      end;

      O MasterData5 é o Master com o cabeçalho do pedido! Vou fazer um post com um exemplo assim e um de outra forma que fica meia pagina exata para cada pedido

      Excluir
  5. Olá Ana Paula, se possível o exemplo do pedido com meia folha...

    ResponderExcluir
  6. Boa tarde, também estou precisando de um modelo de impressão em meia folha, no meu caso é para impressão de contra-cheque, cada um em meia folha, agradeceria se fizesse um post com esse exemplo. Parabéns pelo conteúdo.

    ResponderExcluir