Como criar um recibo de venda a partir de um aplicativo Delphi

2020-08-20

A linguagem de programação Delphi, ou Turbo Pascal, se tornou um ponto de partida para muitos desenvolvedores. Graças à sintaxe simples e clara e à capacidade de escrever em um estilo procedural, acabou sendo muito fácil de aprender. Muitos o comparariam com o Visual Basic, mas no auge de sua popularidade o Delphi deu muito mais oportunidades graças aos componentes para o trabalho com bancos de dados e seu próprio banco de dados - Interbase.

Apesar de C# e a plataforma .Net terem substituído Delphi e VCL, ainda existe um grande número de seus adeptos. Mesmo aplicativos antigos escritos nesta linguagem podem ser facilmente atualizados usando bibliotecas modernas, por exemplo, o gerador de relatórios FastReport 6 VCL. Por exemplo, sistemas de contabilidade automatizados precisam de relatórios.

Um sistema automatizado de contabilidade de vendas deve permitir a formação de documentos de pagamento, como um recibo de venda. Neste artigo, veremos como criar e imprimir um recibo de venda a partir de um aplicativo Delphi. Usaremos o gerador de relatórios FastReport VCL para criar o próprio recibo e um aplicativo de usuário para imprimi-lo. Além de imprimir, você pode simplesmente exibir seu recibo na janela de exibição de relatório, na qual você pode imprimir o recibo, salvá-lo em um dos formatos de documento mais comuns, enviá-lo por e-mail ou carregá-lo para armazenamento em nuvem.

Para criar um recibo de venda, precisamos das informações sobre: pedido, cliente, vendedor e conteúdo do pedido.

Neste exemplo, usaremos o banco de dados demo.mdb da distribuição FastReport VCL.

Para criar a aplicação, usaremos o ambiente de desenvolvimento Delphi 7.

Vamos adicionar dois botões ao formulário: um para executar o designer de relatório, outro para exibir ou imprimir o relatório concluído. Adicione o componente OpenDialog ao formulário também - isso nos permitirá selecionar o arquivo de relatório desejado para abrir.

Agora, vamos prosseguir para a criação de uma fonte de dados para o relatório - recibo de venda. Conforme mencionado acima, utilizamos o banco de dados demo.mdb, ou mais precisamente as tabelas: Pedidos, Clientes, Itens, Peças e Funcionário. Usaremos o componente ADOConnection para conectar ao banco de dados e os componentes ADOTable para obter dados de cada tabela. A tabela Pedidos está vinculada às tabelas Clientes, Itens e Funcionários. Portanto, precisamos configurar essas conexões. Para isso, adicione um componente DataSource para cada ADOTable e para disponibilizar todas essas tabelas no relatório, adicione o componente frxBDDataSet para cada tabela.

Assim, para trabalhar com uma tabela, devemos obter três componentes: ADOTable, DataSource, frxDBDataSet.

 Controlos de dados necessários para o relatório

Em ADOConnection, crie uma conexão com o banco de dados demo.mdb a partir da entrega do FastReport VCL.

As configurações desses componentes (para cada uma das cinco tabelas) estão abaixo.

Tabela Orders:

1. Para ADOTable, set as propriedades:

− Connection – ADOConnection1;
− Name – Orders;
− TableName – orders.

2. Para DataSource, set as propriedades:

− DataSet – Orders.

3. Para frxDBDataSet, set as propriedades:

− DataSet – Orders;

− UserName – Orders.

Tabela Customers:

1. Para ADOTable, set as propriedades:

− Connection – ADOConnection1;

− Name – Customer;

− IndexFieldnames – CustNo;

− MasterSource – DataSource1;

− MasterFields - CustNo

− TableName – customer.

2. Para DataSource, set as propriedades:

− DataSet – Customer.

3. For frxDBDataSet, set the properties:

− DataSet – Customer;

− UserName – Customer.

Tabela Items:

1. Para ADOTable, set as propriedades:

− Connection – ADOConnection1;

− Name – Items;

− IndexFieldnames – OrderNo;

− MasterSource – DataSource1;

− MasterFields - OrderNo

− TableName – items.

2. Para DataSource, set as propriedades:

− DataSet – Items.

3. Para frxDBDataSet, set as propriedades:

− DataSet – items;

− UserName – Items.

Tabela Parts:

1. Para ADOTable, set as propriedades:

− Connection – ADOConnection1;

− Name – Parts;

− TableName – parts.

2. Para DataSource, set as propriedades:

− DataSet – Parts.

3. Para frxDBDataSet, set as propriedades:

− DataSet – Parts;

− UserName – Parts.

Tabela Employee:

1. Para ADOTable, set as propriedades:

− Connection – ADOConnection1;

− Name – Employee;

− IndexFieldnames – EmpNo;

− MasterSource – DataSource1;

− MasterFields - EmpNo

− TableName – employee.

2. Para DataSource, set as propriedades:

− DataSet – Employee.

3. Para frxDBDataSet, set as propriedades:

− DataSet – Employee;

− UserName – Employee.

As tabelas Customer, Items e Employee têm uma relação com DataSource1 (a primeira tabela - Pedidos). Eles são vinculados por chave de forma que para um registro na tabela Pedidos os registros correspondentes dessas tabelas sejam selecionados.

A tabela Itens contém informações sobre os itens do pedido. Não há dados específicos sobre o item - apenas um link para a tabela de peças. Vamos adicionar dois campos da tabela Peças - Preço e Descrição - à tabela ADOT para a tabela Itens. Portanto, não precisamos usar a tabela de peças no futuro.

Para adicionar os campos computáveis à tabela de Itens, clique duas vezes no objeto ADOTable e veja uma janela com os campos da tabela. Inicialmente está vazio, mas você pode carregá-los a partir do menu de contexto selecionando Adicionar campos…:

 Quadro de itens com dois campos adicionados

Os campos Price e Description serão obtidos da tabela parts.

Select New field… no menu content e acrescente o campo Price:

 Configuração a Adicionar campo de preços

Acrescente a descrição do produto (campo Description) tda mesma forma:

 Configuração a adicionar um campo de descrição

Agora, assim que criamos a fonte de dados e configuramos os relacionamentos entre as tabelas, vamos adicionar alguns botões ao formulário. Como você deve se lembrar, o primeiro botão inicia o designer de relatório e o segundo exibe o relatório.

Não se esqueça de adicionar o componente frxReport ao formulário.

Adicione um evento de clique para cada um dos botões. Aqui está o código do manipulador de eventos para exibir o designer de relatório:

1
frxReport1.DesignReport();

Para imprimir o relatório finalizado, você pode adicionar a caixa de diálogo Abrir Arquivo ao formulário para selecionar o relatório criado no designer. O código para imprimir o relatório será assim:

1
2
3
4
5
6
7
8
OpenDialog1.Filter := 'FastReport VCL (*.fr3)|*.FR3';
 OpenDialog1.Execute();
 if Length(OpenDialog1.FileName)>0 then
 begin
 frxReport1.LoadFromFile(OpenDialog1.FileName);
 frxReport1.PrepareReport();
 frxReport1.Print();
end

Se você precisar visualizar o relatório, pode substituir a função Imprimir pela exibição do Relatório:

1
 frxReport1.ShowReport();

Agora você pode executar o aplicativo, clique no botão Projetar relatório e prossiga para a criação do relatório.

Em primeiro lugar, selecione os datasets.

 Fontes de dados necessárias no relatório

Não precisamos da tabela Partes neste relatório, portanto, não há necessidade de selecioná-la. Vamos prosseguir para a criação do modelo. Existem duas bandas de dados em nosso relatório: MasterData e DetailData. Na primeira banda de dados, geramos as informações sobre o client:

  • name - Customer.Company;
  • address - Customer.Addr1;
  • phone - Customer.Phone.

…e de customer:

  • company name;
  • employee – Employee.FirstName Employee.Last Name;
  • order number – Orders.OrderNo;
  • sale date – Orders.SaleDate.

Esta banda está vinculada à tabela Pedidos. As informações de conteúdo do pedido serão exibidas em uma faixa de dados subordinada: nome do produto, quantidade, preço do item, preço para a quantidade especificada.

Totais - como o valor líquido total, taxa de imposto, valor final incluindo imposto - serão exibidos no rodapé.

Modelo de recibo de vendas

Os subtotais do total da linha são calculados multiplicando a quantidade e o preço do item como parte de uma única entrada da tabela:

[<Items."Qty">*<Items."Price">]

Os subtotais líquidos são calculados pela fórmula:

∑(item quantity * item price)

[SUM(<Items."Qty">*<Items."Price">)]

Valor total do imposto:

∑(item quantity* item price * tax rate)

[SUM(<Items."Qty">*<Items."Price">)*0.05]

Total devido:

∑(item quantity * item price)+ ∑( item quantity * item price * tax rate)

[SUM(<Items."Qty">*<Items."Price">) + SUM(<Items."Qty">*<Items."Price">)*0.05]

Além disso, o método de pagamento é refletido no rodapé da base de dados. Espera-se que seja especificado ao imprimir um recibo de venda manualmente.

Aqui podemos dizer que nosso relatório está pronto para exibição. Salve-o no armazenamento local e feche o designer de relatórios. Usando o segundo botão no formulário, selecione o relatório salvo e imprima (se você usou a opção de impressão no código) ou visualize-o se você escolheu a opção de visualização do relatório - ShowReport().

O relatório com recibo de vendas

É isso. Com pouco esforço, você pode implementar funcionalidades úteis para seu sistema de contabilidade. Agora, na janela de visualização do relatório, você pode imprimi-lo ou salvá-lo em um dos formatos de documento populares: PDF, DOCS, XLSX, XML, RTF e muitos outros.

VCL VCL FastReport FastReport Report Report Delphi Delphi
26 de abril de 2023

How to use RFID tags in FastReport .NET

The new page object is an RFID tag in FastReport.NET allows users to use the library to create labels or maps without third-party programs
20 de abril de 2023

How to update FastReport Online Designer to the latest version

Step-by-step instructions for updating FastReport Online Designer to the latest version via the client panel.
14 de março de 2023

The Future of Report Generation with Blazor WebAssembly

Step-by-step instructions for creating a demo application on .NET 6 and 7 directly in the browser using Blazor WebAssembly in FastReport .NET.
Fast Reports
  • 800-985-8986 (English, US)
  • +31 97 01025-8466 (English, EU)
  • +49 30 56837-3928 (German, DE)
  • +55 19 98147-8148 (Portuguese, BR)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2025 Fast Reports Inc.