Catalog · How the catalog works
Delphi-ERP-Project
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
🌊 Bitwave ERP — Sistema de Gestão de Vendas
ERP de vendas desenvolvido em Delphi VCL com SQL Server, focado em pequenas e médias empresas que precisam de controle completo sobre clientes, produtos, fornecedores e vendas.
📋 Índice
- Descrição Geral
- Objetivo do Sistema
- Funcionalidades Principais
- Tecnologias Utilizadas
- Arquitetura do Projeto
- Estrutura de Pastas
- Banco de Dados
- Requisitos para Rodar
- Como Configurar o Ambiente
- Como Compilar o Projeto
- Como Conectar ao Banco
- Principais Telas
- Regras de Negócio
- Validações Implementadas
- Integrações Externas
- Padrões Utilizados
- Criptografia
- Sistema de Permissões
- Relatórios
- Dependências e Componentes Terceiros
📌 Descrição Geral
O Bitwave é um sistema ERP (Enterprise Resource Planning) desktop desenvolvido em Delphi VCL com persistência em Microsoft SQL Server. O sistema cobre o ciclo completo de uma operação comercial: cadastros de clientes, fornecedores, produtos e categorias; controle de estoque; emissão e gestão de vendas; relatórios gerenciais; dashboard financeiro com gráficos; log de auditoria; e controle granular de permissões de acesso por usuário.
A aplicação é distribuída como um único executável Windows (vendas.exe) que se conecta ao SQL Server via arquivo de configuração INI, tornando o deploy simples e sem dependências de instalador.
🎯 Objetivo do Sistema
Fornecer a pequenas e médias empresas uma ferramenta integrada para:
- Gerenciar o cadastro completo de clientes (com situação/status, endereço via CEP, CPF/CNPJ validados)
- Controlar fornecedores com CNPJ obrigatório
- Gerenciar catálogo de produtos com categorias, estoque e imagem
- Processar vendas com múltiplos itens, controle automático de estoque e exportação para Excel
- Emitir relatórios em PDF e Excel
- Auditar todas as ações dos usuários no sistema
- Controlar acesso por usuário com permissões por tela/ação
✨ Funcionalidades Principais
| Módulo | Funcionalidades |
|---|---|
| Cadastro de Clientes | CRUD completo, busca por CEP (ViaCEP), validação CPF/CNPJ, situação do cliente, foto de status, data de nascimento |
| Cadastro de Fornecedores | CRUD completo, CNPJ obrigatório, endereço completo, busca por CEP |
| Cadastro de Produtos | CRUD completo, foto do produto (BMP/JPG/PNG), categoria, fornecedor vinculado, unidade de medida, controle de estoque |
| Categorias | CRUD completo de categorias de produtos |
| Vendas | Seleção de cliente e produtos, adição de itens com quantidade e valor unitário, cálculo automático de total, exportação Excel |
| Controle de Estoque | Baixa automática ao confirmar venda, devolução ao cancelar/apagar venda |
| Dashboard | 4 gráficos na tela principal (barras, pizza, linha), atualização por timer |
| Resumo Financeiro | Total de estoque, total de vendas, lucro estimado, gráfico de balanço por período |
| Relatórios | Clientes, fichas de clientes, produtos, categorias, vendas por período, produtos por categoria (PDF e Excel) |
| Usuários | CRUD de usuários, alteração de senha, vinculação a perfis de acesso |
| Controle de Acesso | Ações de acesso por tela/formulário, mapeamento usuário × ações com ativação/desativação |
| Log de Auditoria | Registro de ações por usuário com data/hora, tela e descrição |
| ChatBot interno | Consultas pré-definidas ao banco (estoque total, total de vendas, contagem de usuários/clientes/fornecedores) |
| Auto-atualização do BD | Criação e atualização automática de tabelas e colunas ao iniciar o sistema |
🛠 Tecnologias Utilizadas
| Tecnologia | Versão / Detalhes |
|---|---|
| Delphi | RAD Studio (VCL, Win32) |
| SQL Server | Microsoft SQL Server / SQL Server Express |
| FireDAC | Camada de acesso a dados (nativa do Delphi) |
| TeeChart (VCLTee) | Gráficos no Dashboard e Resumo Financeiro |
| RLReport | Geração de relatórios (PDF, XLS, XLSX) |
| Indy (IndyHTTP/SSL) | Requisições HTTP para ViaCEP |
| DataSnap (TClientDataSet) | Gerenciamento do carrinho de itens da venda em memória |
| ViaCEP API | Preenchimento automático de endereço por CEP |
| OpenSSL | SSL/TLS para chamadas HTTPS (libeay32.dll / ssleay32.dll) |
| RxLib | Componentes auxiliares (RxToolEdit, RxCurrEdit, RxPickDate) |
| PngBitBtn / PngSpeedButton | Botões com suporte a PNG |
| Git | Controle de versão |
🏗 Arquitetura do Projeto
O projeto adota uma arquitetura em camadas inspirada no padrão MVC/MVP, separando claramente responsabilidades:
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? CAMADA DE APRESENTA????O ???
??? Forms (uCad*, uCon*, uPro*, uRel*, uControle*) ???
??? Heran??a base: TfrmTelaHeranca / TfrmTelaHerancaConsulta ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? usa
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? CAMADA DE NEG??CIO (Classes/) ???
??? TCliente, TProduto, TFornecedor, TVenda, ???
??? TControleEstoque, TAcaoAcesso, TUsuario, etc. ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? usa
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? CAMADA DE DADOS (DataModules/) ???
??? TdtmConexao (conex??o), TdtmVenda (queries venda) ???
??? TDTMGrafico (queries do dashboard) ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? FireDAC
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? SQL SERVER (banco de dados) ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Padrão base de telas de cadastro: todas as telas de manutenção herdam de TfrmTelaHeranca, que já encapsula o comportamento padrão de listagem, pesquisa, botões CRUD, navegação e persistência de preferências de grid via INI.
Padrão base de telas de consulta: telas somente-leitura herdam de TfrmTelaHerancaConsulta.
📁 Estrutura de Pastas
arquivos vendas/
????????? vendas.dpr # Projeto principal (entry point)
????????? vendas.dproj # Arquivo de projeto Delphi
????????? uPrincipal.pas/.dfm # Form principal (menu + dashboard)
????????? uLogin.pas/.dfm # Tela de login
???
????????? Cadastro/ # Forms de cadastro (View)
??? ????????? uCadCliente.* # Cadastro de clientes
??? ????????? uCadProduto.* # Cadastro de produtos
??? ????????? uCadCategoria.* # Cadastro de categorias
??? ????????? uCadUsuario.* # Cadastro de usu??rios
??? ????????? uCadAcaoAcesso.* # Cadastro de a????es de acesso
??? ????????? uFornecedor.* # Cadastro de fornecedores
???
????????? Classes/ # Regras de neg??cio (Model)
??? ????????? cCadCliente.pas # Classe TCliente (CRUD + valida????o)
??? ????????? cCadProduto.pas # Classe TProduto (CRUD + foto)
??? ????????? cFornecedor.pas # Classe TFornecedor (CRUD + valida????o)
??? ????????? cCadCategoria.pas # Classe TCategoria
??? ????????? cCadUsuario.pas # Classe TUsuario (CRUD + login + senha)
??? ????????? cAcaoAcesso.pas # Classe TAcaoAcesso (permiss??es)
??? ????????? CProVenda.pas # Classe TVenda (venda + itens + estoque)
??? ????????? cControleEstoque.pas# Classe TControleEstoque (baixa/devolu????o)
??? ????????? cValidar.pas # Fun????es ValidarCPF / ValidarCNPJ
??? ????????? cArquivoIni.pas # Leitura/escrita de arquivo INI
??? ????????? cFuncao.pas # Utilit??rios (cria????o de forms c/ permiss??o)
??? ????????? cAtualizacaoBancoDeDados.pas # Base de auto-update DB
??? ????????? cAtualizacaoTabelaMSSQL.pas # Cria????o de tabelas
??? ????????? cAtualizacaoCampoMSSQL.pas # Adi????o de colunas (migrations)
???
????????? Consulta/ # Telas de lookup/sele????o
??? ????????? uConCliente.*
??? ????????? uConProduto.*
??? ????????? uConCategoria.*
??? ????????? uConFornecedor.*
???
????????? Processo/ # Telas de processo de neg??cio
??? ????????? uProVenda.* # Tela de processamento de vendas
???
????????? Relat??rio/ # Relat??rios (RLReport)
??? ????????? uRelCadCliente.*
??? ????????? uRelCadClienteFicha.*
??? ????????? uRelCadProduto.*
??? ????????? uRelCadProdutoComGrupoCategoria.*
??? ????????? uRelCategoria.*
??? ????????? uRelProVenda.*
??? ????????? uRelVendaPorData.*
??? ????????? uSelecionarData.*
???
????????? Controle/ # M??dulos de controle operacional
??? ????????? uChatBot.* # ChatBot com consultas SQL pr??-definidas
??? ????????? uControleLog.* # Visualiza????o do log de auditoria
??? ????????? uResFinanceiro.* # Resumo financeiro com gr??ficos
???
????????? Heranca/ # Classes/forms base (heran??a)
??? ????????? uTelaHeranca.* # Form base para telas de CRUD
??? ????????? uTelaHerancaConsulta.* # Form base para consultas
??? ????????? uEnum.pas # Enumera????es do sistema
??? ????????? uFuncaoCriptografia.pas # Criptografia de senha
???
????????? datamodule/ # DataModules (acesso a dados)
??? ????????? uDTMconexao.* # M??dulo de conex??o (FireDAC + INI)
??? ????????? uDTMVenda.* # DataModule para venda
??? ????????? uDTMGrafico.* # DataModule para gr??ficos do dashboard
??? ????????? uFrmAtualizaDB.* # Form de status de atualiza????o do BD
???
????????? login/ # M??dulo de autentica????o
??? ????????? cUsuarioLogado.pas # Classe TUsuarioLogado + TenhoAcesso()
??? ????????? uAlterarSenha.* # Tela de altera????o de senha
??? ????????? uUsuarioVsAcoes.* # Mapeamento usu??rio ?? permiss??es
???
????????? Terceiros/ # Componentes de terceiros
??? ????????? Enter.pas # Navega????o por Enter (Tab substitu??do)
???
????????? viacep-master/ # Biblioteca ViaCEP
??? ????????? src/ViaCEP.Core.pas
??? ????????? src/ViaCEP.Intf.pas
??? ????????? src/ViaCEP.Model.pas
??? ????????? lib/ (libeay32.dll, ssleay32.dll)
???
????????? Images/ # Recursos visuais
??? ????????? *.bmp, *.png, *.jpg
???
????????? Win32/Debug/ # Sa??da de compila????o
????????? vendas.exe
????????? vendas.ini # Configura????o de conex??o🗄 Banco de Dados
SGBD: Microsoft SQL Server (qualquer edição, incluindo SQL Server Express)
O sistema cria automaticamente todas as tabelas na primeira execução através das classes TAtualizacaoTableMSSQL e TAtualizacaoCampoMSSQL. Não é necessário executar script manual de criação de schema.
Tabelas identificadas no código
| Tabela | Descrição | Campos principais |
|---|---|---|
categorias |
Categorias de produtos | categoriaId (PK, identity), descricao |
situacao |
Situações/status do cliente | IDSituacao (PK), SituacaoCliente |
clientes |
Cadastro de clientes | clienteId, nome, documento, IDSituacao (FK), endereco, cidade, bairro, estado, cep, telefone, email, dataNascimento, observacao, casa |
fornecedores |
Cadastro de fornecedores | fornId, nome, cnpj, endereco, numero, bairro, cidade, estado, cep, telefone, email, observacao |
produtos |
Catálogo de produtos | produtoId, nome, descricao, valor, quantidade, categoriaId (FK), foto (VarBinary MAX), fornId (FK), unidadeMedida |
vendas |
Cabeçalho das vendas | vendaId, clienteId (FK), dataVenda, totalVenda |
vendasItens |
Itens de cada venda | vendaId (FK), produtoId (FK), quantidade, valorUnitario, valorTotalProduto |
usuarios |
Usuários do sistema | usuarioId, nome, senha (criptografada), perfilId |
perfil |
Perfis de usuário | perfilId, descricao |
acaoAcesso |
Ações/telas cadastradas | acaoAcessoId, descricao, chave |
usuariosAcaoAcesso |
Permissões usuário × ação | usuarioId (FK), acaoAcessoId (FK), ativo (BIT) |
auditoria |
Log de auditoria | ID, DATA_HORA, USUARIO, ACAO, TELA, DESCRICAO |
Migrations automáticas
O sistema verifica e aplica alterações de schema ao iniciar:
- Verifica existência de tabela com
OBJECT_ID(:NomeTabela) - Verifica existência de coluna com
INFORMATION_SCHEMA.COLUMNS - Exemplo de migration: adição da coluna
foto(VarBinary MAX) na tabelaprodutos
⚙️ Requisitos para Rodar
| Requisito | Detalhe |
|---|---|
| Sistema Operacional | Windows (7/10/11, 32 ou 64 bits — binário é Win32) |
| SQL Server | SQL Server 2012 ou superior / SQL Server Express (gratuito) |
| Delphi (apenas para compilar) | RAD Studio com suporte a FireDAC, VCLTee e RLReport |
| OpenSSL DLLs | libeay32.dll e ssleay32.dll na pasta do executável (incluídas em viacep-master/lib/) |
| Acesso de rede | Para uso da API ViaCEP (https://viacep.com.brr — opcional |
🔧 Como Configurar o Ambiente
1. SQL Server
Instale o SQL Server Express (gratuito):
https://www.microsoft.com/pt-br/sql-server/sql-server-downloadsCrie um banco de dados vazio chamado Vendas (ou o nome que preferir — o sistema usa o master para se conectar inicialmente e depois troca para o banco configurado no INI).
2. Arquivo de configuração (vendas.ini)
Crie o arquivo vendas.ini na mesma pasta do executável vendas.exe:
Autenticação Windows (recomendado):
[DB]
Server=NOME_DO_SERVIDOR\SQLEXPRESS
DataBase=Vendas
Auth=WindowsAutenticação SQL Server:
[DB]
Server=NOME_DO_SERVIDOR\SQLEXPRESS
DataBase=Vendas
Auth=SQL
User=sa
Password=sua_senha3. DLLs OpenSSL
Copie libeay32.dll e ssleay32.dll da pasta viacep-master/lib/ para a pasta do executável.
4. Primeira execução
Ao executar pela primeira vez, o sistema cria automaticamente todas as tabelas necessárias no banco de dados informado.
🔨 Como Compilar o Projeto
- Abra o Delphi RAD Studio
- Abra o arquivo
vendas.dproj - Certifique-se de que os seguintes componentes estão instalados:
- FireDAC (nativo do Delphi)
- RLReport (gerador de relatórios)
- RxLib (
RxToolEdit,RxCurrEdit,RxPickDate) - VCLTee (TeeChart — nativo do Delphi)
- PngBitBtn / PngSpeedButton
- Configure o target para Win32 / Debug ou Win32 / Release
- Pressione
F9ou Run > Run para compilar e executar
🔌 Como Conectar ao Banco
A conexão é gerenciada pelo DataModule TdtmConexao (uDTMconexao.pas), carregado automaticamente ao iniciar a aplicação:
// Trecho do uDTMconexao.pas
Ini := TIniFile.Create(Path);
ConexaoDB.Params.DriverID := 'MSSQL';
ConexaoDB.Params.Values['Server'] := Ini.ReadString('DB','Server','');
ConexaoDB.Params.Values['Database'] := 'master';
if SameText(Auth, 'SQL') then
begin
ConexaoDB.Params.Values['User_Name'] := Ini.ReadString('DB','User','');
ConexaoDB.Params.Values['Password'] := Ini.ReadString('DB','Password','');
end
else
ConexaoDB.Params.Values['OSAuthent'] := 'Yes'; // Windows AuthCaso o arquivo vendas.ini não seja encontrado, o sistema lança uma exceção explicativa e interrompe a inicialização.
🖥 Principais Telas
🏠 Tela Principal (uPrincipal)
Dashboard central com menu de navegação e 4 gráficos TeeChart (barras, pizza ×2, linha rápida). Um TTimer atualiza os gráficos periodicamente. Exibe o nome do usuário logado na barra de status.
🔐 Login (uLogin / uLogin.pas)
Autenticação por usuário e senha. A senha é armazenada criptografada no banco e comparada após descriptografia pela classe TUsuario.Logar(). Após o login, o objeto TUsuarioLogado é repassado para todos os forms abertos.
👤 Cadastro de Clientes (uCadCliente)
Herda de TfrmTelaHeranca. Possui:
- Seleção de tipo de pessoa (Física/Jurídica) com alternância do label CPF/CNPJ
- Campo CEP com máscara e botão de consulta ViaCEP (preenchimento automático de endereço)
- Lookup de situação do cliente com indicadores visuais coloridos (ImageList)
- Checkbox "Sem Número" para endereços sem número
- Validação de CPF e CNPJ em tempo real
📦 Cadastro de Produtos (uCadProduto)
- Upload de foto do produto (BMP, JPG, PNG) com redimensionamento para 160×130px
- Vínculo a categoria e fornecedor
- Controle de quantidade em estoque
- Unidade de medida
🛒 Processo de Venda (uProVenda)
- Seleção de cliente via
TDBLookupComboBox(filtra clientes ativos) - Adição de produtos ao carrinho (
TClientDataSetem memória) - Cálculo automático de valor total do item (quantidade × valor unitário)
- Atualização do total geral da venda
- Botão de exportação Excel
- Ao gravar: baixa automática do estoque para cada item
- Ao cancelar/apagar: devolução automática do estoque
💰 Resumo Financeiro (uResFinanceiro)
Painel com KPIs: quantidade de produtos em estoque, valor total do estoque, quantidade/valor de vendas, lucro. Gráfico de linha com evolução do balanço por mês.
🤖 ChatBot (uChatBot)
Janela com ComboBox de perguntas pré-definidas. Ao enviar, executa queries SQL correspondentes e exibe a resposta com animação de digitação simulada via TTimer.
Perguntas disponíveis:
- Quantidade total do estoque
- Valor total do estoque
- Quantidade de usuários cadastrados
- Quantidade de clientes cadastrados
- Quantidade de fornecedores cadastrados
- Quantidade de vendas
🔑 Usuários vs Ações (uUsuarioVsAcoes)
Grid duplo: usuários à esquerda, permissões à direita. Duplo clique numa ação alterna o campo ativo entre 0 e 1 no banco, habilitando ou desabilitando o acesso daquele usuário àquela tela.
📋 Log de Auditoria (uControleLog)
Exibe a tabela auditoria com filtro dinâmico por coluna. Herda de TfrmTelaHerancaConsulta. Permite ordenação clicando no cabeçalho das colunas.
📐 Regras de Negócio
Clientes
- Nome é campo obrigatório
- Situação do cliente é obrigatória (sem situação, não grava)
- CPF deve ter 11 dígitos e passar na validação do dígito verificador
- CNPJ deve ter 14 dígitos e passar na validação do dígito verificador
- CEP pode ser consultado automaticamente para preenchimento de endereço
Fornecedores
- Nome é campo obrigatório
- CNPJ é campo obrigatório (fornecedor é sempre pessoa jurídica)
- CNPJ passa pela validação de dígito verificador
Produtos
- Categoria e fornecedor são campos vinculados
- Estoque é gerenciado automaticamente via
TControleEstoque - Foto é opcional (armazenada como
VarBinary(MAX)no banco)
Vendas
- Ao inserir uma venda: baixa de estoque (
quantidade - qtdeBaixa) para cada item, dentro de transação - Ao apagar uma venda: exclui itens primeiro, depois o cabeçalho (
DELETE vendasItens→DELETE vendas), dentro de transação com rollback em caso de falha - O carrinho de itens usa
TClientDataSetem memória (sem tocar o banco até o momento do Gravar) - Verificação se item já existe na venda antes de inserir (evita duplicidade)
Estoque
Baixar: UPDATE produtos SET quantidade = quantidade - :qtdeBaixa WHERE produtoId = :produtoId
Retornar: UPDATE produtos SET quantidade = quantidade + :qtdeRetorno WHERE produtoId = :produtoIdAmbas as operações são transacionadas individualmente com StartTransaction / Commit / Rollback.
Controle de Acesso
- Cada form tem um
Nameúnico que serve como chave (chave) na tabelaacaoAcesso - Ao abrir qualquer form via
TFuncao.CriarForm(), o sistema verifica emusuariosAcaoAcessose o usuário logado tem a ação ativa - Se não tiver permissão: exibe alerta e não abre o form
✅ Validações Implementadas
| Validação | Localização | Detalhe |
|---|---|---|
| CPF | cValidar.pas → ValidarCPF() |
11 dígitos, não todos iguais, cálculo dos 2 dígitos verificadores |
| CNPJ | cValidar.pas → ValidarCNPJ() |
14 dígitos, não todos iguais, cálculo dos 2 dígitos verificadores |
| Nome obrigatório (cliente) | cCadCliente.pas → TCliente.Validar() |
raise Exception se vazio |
| Situação obrigatória (cliente) | cCadCliente.pas → TCliente.Validar() |
raise Exception se IDSituacao = 0 |
| Nome obrigatório (fornecedor) | cFornecedor.pas → TFornecedor.Validar() |
raise Exception se vazio |
| CNPJ obrigatório (fornecedor) | cFornecedor.pas → TFornecedor.Validar() |
raise Exception se vazio |
| CEP (ViaCEP) | ViaCEP.Core.pas → Validate() |
Deve ter 8 dígitos numéricos |
| Chave de acesso única | cAcaoAcesso.pas → ChaveExiste() |
Impede chaves duplicadas |
| Usuário existente | cCadUsuario.pas → UsuarioExiste() |
Impede nome de usuário duplicado |
| Campos obrigatórios genéricos | uTelaHeranca.pas → ExisteCampoObrigatorio() |
Varredura por componentes com tag especial |
🌐 Integrações Externas
ViaCEP (https://viacep.com.br)
Integração para preenchimento automático de endereço a partir do CEP.
Biblioteca: viacep-master/src/ViaCEP.Core.pas
Fluxo:
- Usuário digita o CEP no campo mascarado
- Ao sair do campo (OnExit), o sistema chama a API
TViaCEP.Get(cep)fazGET https://viacep.com.br/ws/{cep}/json- Resposta JSON é desserializada em
TViaCEPClass - Campos de endereço, bairro, cidade e estado são preenchidos automaticamente
Dependências: Indy (TIdHTTP + TIdSSLIOHandlerSocketOpenSSL) + OpenSSL DLLs
Tratamento de erro: CEP inválido retorna "erro": true → exibe Exception ao usuário
🎨 Padrões Utilizados
Herança de Forms (Base Form Pattern)
Todas as telas de CRUD herdam de TfrmTelaHeranca, que implementa:
PageControlcom abas Listagem / ManutençãoDBGridcom ordenação dinâmica ao clicar no cabeçalho- Pesquisa dinâmica por qualquer coluna (monta WHERE dinamicamente)
- Controle de estado dos botões (Novo/Alterar/Cancelar/Gravar/Apagar)
- Persistência de largura das colunas do Grid em arquivo INI (
PreferenciasGrid.ini) - Alternância de cores nas linhas do Grid (zebra)
- Navegação por Enter entre campos
Classe de Negócio (Business Object Pattern)
Cada entidade tem uma classe correspondente em Classes/:
constructor Create(aConexao: TFDConnection)— recebe a conexão por injeção- Métodos
Inserir,Atualizar,Apagar,Selecionar - Método
Validarprivado chamado antes de persistir - Método
Limparque zera todos os campos - Uso de
StartTransaction / Commit / Rollbackem cada operação
Factory de Forms com Controle de Acesso
TFuncao.CriarForm() centraliza a abertura de todos os forms, verificando permissão antes de exibir:
class procedure TFuncao.CriarForm(aNomeForm: TFormClass;
oUsuarioLogado: TUsuarioLogado; aConexao: TFDConnection);Configuração via INI
TArquivoIni centraliza leitura e escrita de configurações. Usado tanto para conexão (vendas.ini) quanto para preferências de grid (PreferenciasGrid.ini, PreferenciasGridConsulta.ini, PreferenciasGridVendas.ini).
🔒 Criptografia
Implementada em uFuncaoCriptografia.pas:
- Algoritmo: Caesar cipher customizado — inverte a string e soma/subtrai 6 ao código ASCII de cada caractere
- Uso: Senhas dos usuários armazenadas no banco de dados
🔑 Sistema de Permissões
O controle de acesso funciona em três camadas:
acaoAcesso— tabela com todas as telas/ações cadastradas (chave =Namedo Form Delphi)usuariosAcaoAcesso— relacionamento usuário × ação com campoativo(BIT)TUsuarioLogado.TenhoAcesso()— consulta ao banco antes de cada abertura de form
SELECT usuarioId FROM usuariosAcaoAcesso
WHERE usuarioId = :usuarioId
AND acaoAcessoId = (
SELECT TOP 1 acaoAcessoId FROM acaoAcesso WHERE chave = :chave
)
AND ativo = 1A classe TAcaoAcesso.CriarAcoes() popula automaticamente a tabela acaoAcesso com todos os forms do sistema.
📊 Relatórios
Todos os relatórios utilizam o componente RLReport e suportam exportação para:
- PDF (
TRLPDFFilter) - XLS (
TRLXLSFilter) - XLSX (
TRLXLSXFilter)
| Relatório | Arquivo | Conteúdo |
|---|---|---|
| Listagem de Clientes | uRelCadCliente |
Grid com todos os clientes |
| Ficha de Cliente | uRelCadClienteFicha |
Dados completos de um cliente |
| Listagem de Produtos | uRelCadProduto |
Grid com todos os produtos |
| Produtos por Categoria | uRelCadProdutoComGrupoCategoria |
Agrupado por categoria |
| Listagem de Categorias | uRelCategoria |
Grid de categorias |
| Vendas (completo) | uRelProVenda |
Cabeçalho + itens por venda com subtotais |
| Vendas por Período | uRelVendaPorData |
Filtro por data inicial/final |
📦 Dependências e Componentes Terceiros
| Componente | Uso | Origem |
|---|---|---|
| RLReport | Geração de relatórios PDF/XLS/XLSX | Rave Reports / FastReport compatível |
| RxLib | RxToolEdit (edição com botão), RxCurrEdit (moeda), RxPickDate (calendário) |
RxLib open source |
| VCLTee (TeeChart) | Gráficos no dashboard e resumo financeiro | Embutido no Delphi |
| Indy | HTTP/HTTPS para ViaCEP | Embutido no Delphi |
| PngBitBtn/PngSpeedButton | Botões com imagem PNG | Terceiros |
| OpenSSL | TLS para HTTPS | libeay32.dll + ssleay32.dll (versão 1.x) |
| Enter.pas | Navegação por Enter no lugar de Tab | Terceiros |
| DataSnap (TClientDataSet) | Carrinho de itens em memória | Embutido no Delphi |

