MFC001 — Abertura / Fechamento de Caixa
Objetivo
Controlar o ciclo diario do caixa: abertura com valor inicial, fechamento com apuracao de valores (dinheiro, cheque, movimento) e diferenca. Permite tambem reimpressao de fechamentos anteriores e reabertura de caixas fechados (quando autorizado).
Funcionalidades
- Abrir caixa informando data e valor de abertura (com sugestao automatica de saldo)
- Fechar caixa informando data e valor de fechamento (calcula diferenca automaticamente)
- Imprimir extrato de fechamento via layout configurado em PARMFINANC.CD_LAYCAIXA
- Reimprimir extrato de caixa fechado anteriormente (aba Impressao)
- Reabrir caixa fechado (aba Impressao, requer permissao ST_REABRECAIXA em PARMUSUARIO)
- Sugerir saldo de abertura baseado nos saldos atuais das contas caixa (checkbox "Sugerir")
- Busca de caixa por F9 (lookup LISTAVALOR 'CAIXA')
Estrutura da Tela
Aba: Abertura / Fechamento (pagCaixa)
Grupo: Dados para Abertura do Caixa
| Campo | Coluna | Tipo | Obrigatorio | Regra |
|---|---|---|---|---|
| Nr. Caixa Aberto | NR_CONTROLE | Integer | Auto | Readonly, preenchido pelo sistema |
| Sugerir saldo | ST_SUGESTAO | Char(1) | Nao | S/N — se S, calcula VL_ABERTURA automaticamente |
| Data da Abertura | DT_ABERTURA | Timestamp | Sim | Default: Now(). Preenchido ao clicar Novo |
| Valor da Abertura | VL_ABERTURA | Currency | Sim | Se "Sugerir" ativo, soma saldos de contas caixa |
Grupo: Dados para Fechamento do Caixa
| Campo | Coluna | Tipo | Obrigatorio | Regra |
|---|---|---|---|---|
| Data do Fechamento | DT_FECHAMENTO | Timestamp | Sim (fechamento) | Nao pode ser < DT_ABERTURA |
| Valor do Fechamento | VL_FECHAMENTO | Currency | Sim (fechamento) | Valor informado pelo operador |
| Valor Dinheiro | VL_DINHEIRO | Currency | Auto | Retornado por FECHA_CAIXA |
| Valor Cheque | VL_CHEQUE | Currency | Auto | Retornado por FECHA_CAIXA |
| Valor Movimento | VL_MOVIMENTO | Currency | Auto | Retornado por FECHA_CAIXA |
| Valor Caixa | VL_CAIXA | Float | Calculado | VL_ABERTURA + VL_MOVIMENTO |
| Valor Diferenca | VL_DIFERENCA | Float | Calculado | VL_FECHAMENTO - VL_CAIXA |
Aba: Impressao (pagImpressao)
Grupo: Reimpressao de Fechamento
| Campo | Tipo | Regra |
|---|---|---|
| Nr. Controle | Edit + F9 | Busca caixa fechado. Valida que DT_FECHAMENTO IS NOT NULL |
| Botao Reimpressao | BitBtn | Imprime extrato do caixa informado |
Grupo: Reabertura de Caixa
| Campo | Tipo | Regra |
|---|---|---|
| Nr. Caixa | Edit + F9 | Busca caixa para reabrir |
| Botao Reabertura | BitBtn | Seta DT_FECHAMENTO=NULL, VL_FECHAMENTO=NULL, VL_MOVIMENTO=NULL |
Regras de Negocio
-
Permissao de abertura (PARMUSUARIO.ST_ABRECAIXA): So permite operar o caixa se
PARMUSUARIO.ST_ABRECAIXA = 'S'para o usuario logado. Caso contrario, todos os campos ficam desabilitados. Implementado em:btnNovoClick. -
Permissao de caixa (PERMISSAO_CAIXA): Procedure que valida se o usuario tem permissao para operar o caixa da empresa. Se retornar mensagem, bloqueia a operacao e oculta botao Salvar. Implementado em:
btnNovoClick. -
Caixa exclusivo por usuario (CONTROLE_CAIXA): Procedure que verifica se ja existe caixa aberto para outro usuario na mesma empresa. Se outro usuario ja abriu, exibe "O Caixa Ja foi Aberto pelo Usuario X!" e bloqueia. Implementado em:
btnNovoClick. -
Estado abertura vs fechamento: Se CONTROLE_CAIXA retorna NR_CONTROLE vazio, o caixa esta fechado — habilita campos de abertura. Se retorna NR_CONTROLE, caixa aberto — habilita campos de fechamento. Implementado em:
btnNovoClickviaHabilitaCampos. -
DT_FECHAMENTO >= DT_ABERTURA: Data de fechamento nao pode ser anterior a data de abertura. Implementado em:
btnSalvarClick. -
DT_FECHAMENTO >= ultimo lancamento: Data de fechamento nao pode ser anterior a data do ultimo lancamento em MOVTOCAIXA para este caixa (NR_CONTROLE). Verifica MOVTOCAIXA com JOINs em PARMSALDO para tipos de saldo validos (X, P, R, C, T). Implementado em:
btnSalvarClick. -
Sugestao de saldo multi-empresa: Ao sugerir saldo, busca CD_EMPRESA de todas as empresas que compartilham o mesmo CD_EMPRCAIXA em PARMFINANC. Se PARMFINANC.ST_PARMSALDO = 'S' (saldo por usuario), filtra por USUARIOCONTASALDO. Implementado em:
SugereSaldo. -
Calculo automatico no fechamento: VL_CAIXA = VL_ABERTURA + VL_MOVIMENTO. VL_DIFERENCA = VL_FECHAMENTO - VL_CAIXA. VL_DINHEIRO, VL_CHEQUE e VL_MOVIMENTO sao retornados por FECHA_CAIXA. Implementado em:
btnSalvarClick. -
Impressao automatica apos fechamento: Ao fechar caixa com sucesso, imprime extrato automaticamente via
CarregaLayoutusando CD_LAYCAIXA de PARMFINANC. Implementado em:btnSalvarClick→Imprimir_Extrato. -
Reabertura controlada (PARMUSUARIO.ST_REABRECAIXA): Botao de reabertura so habilitado se
PARMUSUARIO.ST_REABRECAIXA = 'S'. Nao permite reabrir se o usuario ja tem outro caixa aberto (DT_FECHAMENTO IS NULL). Implementado em:PaginaChangeebtnReaberturaClick. -
Controle de acesso somente-leitura: Se
programa.tpAcesso = 2, oculta botoes Novo, Salvar e Excluir. Implementado em:iniciar.
Mensagens exibidas
Levantadas de source/MFC001/ pela camada 0 (commit 96fc51e236).
Mais 14 mensagens com texto literal no código: MFC001.
Datasets e SQL
tabCAIXA: Query principal da tabela CAIXA, filtrada por CD_EMPRESA e CD_USUARIO (parametros). Campos: CD_EMPRESA, CD_USUARIO, NR_CONTROLE, DT_ABERTURA, DT_FECHAMENTO, VL_ABERTURA, VL_FECHAMENTO, VL_MOVIMENTO, VL_CAIXA, VL_DIFERENCA, VL_DINHEIRO, VL_CHEQUE, ST_SUGESTAO, DT_ULTIMOLANCtabExtrato: Query auxiliar (nao utilizada diretamente no form — provavel uso em relatorio)
Dependencias
Tabelas Utilizadas
| Tabela | Operacao | Descricao |
|---|---|---|
| CAIXA | CRUD | Registros de abertura/fechamento de caixa por usuario |
| PARMFINANC | Leitura | Parametros financeiros (CD_LAYCAIXA, CD_EMPRCAIXA, ST_PARMSALDO) |
| PARMUSUARIO | Leitura | Permissoes do usuario (ST_ABRECAIXA, ST_REABRECAIXA) |
| MOVTOCAIXA | Leitura | Lancamentos de caixa para validar DT_FECHAMENTO vs ultimo lancamento |
| PARMSALDO | Leitura | Contas de saldo (TP_SALDO: X=Caixa, P/R/C/T) para sugestao e validacao |
| USUARIOCONTASALDO | Leitura | Vinculos usuario-conta para saldo por usuario |
Procedures Chamadas
| Procedure | Contexto |
|---|---|
| PERMISSAO_CAIXA | Valida permissao do usuario para operar caixa. Retorna mensagem de erro se bloqueado |
| CONTROLE_CAIXA | Verifica se caixa esta aberto/fechado e por qual usuario. Retorna CD_USUARIO, NR_CONTROLE, DT_CAIXA |
| ABRE_CAIXA | Efetiva a abertura do caixa. Recebe: empresa, usuario, data, valor. Retorna mensagem de erro se falhar |
| FECHA_CAIXA | Efetiva o fechamento do caixa. Recebe: empresa, usuario, data, valor. Retorna: VL_DINHEIRO, VL_CHEQUE, VL_MOVIMENTO, NR_CONTROLE |
| RETORNA_SALDOCAIXAC | Retorna saldo atual de uma conta caixa para uma data. Usado na sugestao de saldo de abertura |
Telas Relacionadas
| Tela | Relacao |
|---|---|
| MFC008 | Fechamento de Caixas (fechamento em lote, diferente de MFC001 que e individual) |
| CFC002 | Referenciada na mensagem de erro de DT_FECHAMENTO vs ultimo lancamento |
Fonte
- Form:
source/MFC001/UMFC001.pas - DataModule:
source/MFC001/UdmMFC001.pas - Layout:
source/MFC001/UMFC001.dfm - Package:
source/MFC001/MFC001.dpk