Sistema de Pedido de Venda
Sistema de Pedido de Venda em Delphi 12 + FireDAC + Firebird.
Arquivo
Descrição
setup.sql
DDL completo: generators, triggers, tabelas, FK, índices, seed data
update-observacao.sql
DDL Update: Criação do campo Observação no Pedido
config.ini
Parâmetros de conexão lidos dinamicamente em runtime
Arquivo
Classe
Campos
Model.Cliente.pas
TCliente
Codigo, Nome, Cidade, UF
Model.Produto.pas
TProduto
Codigo, Descricao, PrecoVenda
Model.PedidoItem.pas
TPedidoItem
ID, NumeroPedido, CodigoProduto, Quantidade, VlrUnitario, VlrTotal
Model.Pedido.pas
TPedido
NumeroPedido, DataEmissao, CodigoCliente, ValorTotal, Observacao, Itens
Repository (Source/Repository/)
Arquivo
Responsabilidade
Repository.Conexao.pas
Singleton TConexao: lê config.ini, configura e expõe TFDConnection
Repository.Cliente.pas
BuscarPorCodigo — SELECT parametrizado em CLIENTE
Repository.Produto.pas
BuscarPorCodigo — SELECT parametrizado em PRODUTO
Repository.Pedido.pas
Gravar — GEN_ID + INSERT no PEDIDO + INSERTs em PEDIDO_ITEM
Service (Source/Service/)
Arquivo
Métodos
Service.Pedido.pas
ValidarCliente, BuscarProduto, CalcularTotalItem, CalcularTotalPedido, GravarPedido
Arquivo
Descrição
View.Pedido.pas
Lógica do formulário completo
View.Pedido.dfm
Layout: 4 painéis, TDBGrid + TFDMemTable, labels, botões
Arquivo
Descrição
TestBitWay.dpr
Project file Delphi 12 registrando todas as units
Requisito
Status
Detalhe
Tabelas com PKs, FKs, constraints
✅
setup.sql
Generators + Triggers para PKs
✅
GEN_PEDIDO, GEN_PEDIDO_ITEM, BI_PEDIDO, BI_PEDIDO_ITEM
Índices obrigatórios
✅
IDX_PEDIDO_CLIENTE, IDX_ITEM_PEDIDO
Seed data ≥ 10 registros
✅
12 CLIENTEs, 12 PRODUTOs
Conexão via config.ini
✅
Repository.Conexao.CarregarConfiguracao
Queries parametrizadas (sem concatenação)
✅
Todos os SQLs usam :pNome
StartTransaction / Commit / Rollback
✅
Service.Pedido.GravarPedido
Validação de cliente na entrada
✅
edtCodigoClienteExit → Service.ValidarCliente
Sugestão de preço do produto
✅
edtCodigoProdutoExit → preenche edtVlrUnit
Grid com listagem de itens
✅
TDBGrid + TFDMemTable
ENTER no grid carrega item p/ edição
✅
grdItensKeyDown → CarregarItemParaEdicao
DEL no grid exclui com confirmação
✅
grdItensKeyDown → ExcluirItemSelecionado
Recalcular total imediatamente
✅
RecalcularTotal chamado após add/del
Produtos duplicados em linhas separadas
✅
TFDMemTable.Append sem restrição de unicidade
Arquitetura MVC/Service/Repository
✅
4 camadas separadas, sem SQL na View
1. Criar o banco de dados Firebird
Altere o script de criação do banco ..\Database\setup.sql com as informações necessárias:
CREATE DATABASE '<Caminho_Completo_do_Banco>'
USER 'SYSDBA' PASSWORD 'masterkey'
Rode o script para criar o banco:
isql -i 'C:\..\Database\setup.sql';
SQL> EXIT;
Rode o script \Database\update-observacao.sql para atualizar o campo Observação do pedido:
isql -user SYSDBA -password masterkey;
SQL> CONNECT '<CAMINHO_BANCO>';
SQL> INPUT '..\Database\update-observacao.sql';
SQL> EXIT;
Editar C:\..\Settings\config.ini para apontar ao caminho correto do .FDB e do fbclient.dll.
3. Abrir o projeto no Delphi 12
Abrir Source\TestBitWay.dpr e compilar (F9).
4. Fluxo de teste sugerido
Informar código de cliente (ex: 1) → Tab → Nome/Cidade/UF preenchidos
Informar código de produto (ex: 5) → Tab → preço sugerido automaticamente
Ajustar quantidade → + Adicionar Item → item aparece no grid
Selecionar item no grid → pressionar ENTER → campos carregados para edição
Selecionar item → pressionar DEL → confirmação → total recalculado
Clicar Gravar Pedido → mensagem de sucesso com número do pedido