Pular para o conteúdo principal

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

CampoColunaTipoObrigatorioRegra
Nr. Caixa AbertoNR_CONTROLEIntegerAutoReadonly, preenchido pelo sistema
Sugerir saldoST_SUGESTAOChar(1)NaoS/N — se S, calcula VL_ABERTURA automaticamente
Data da AberturaDT_ABERTURATimestampSimDefault: Now(). Preenchido ao clicar Novo
Valor da AberturaVL_ABERTURACurrencySimSe "Sugerir" ativo, soma saldos de contas caixa

Grupo: Dados para Fechamento do Caixa

CampoColunaTipoObrigatorioRegra
Data do FechamentoDT_FECHAMENTOTimestampSim (fechamento)Nao pode ser < DT_ABERTURA
Valor do FechamentoVL_FECHAMENTOCurrencySim (fechamento)Valor informado pelo operador
Valor DinheiroVL_DINHEIROCurrencyAutoRetornado por FECHA_CAIXA
Valor ChequeVL_CHEQUECurrencyAutoRetornado por FECHA_CAIXA
Valor MovimentoVL_MOVIMENTOCurrencyAutoRetornado por FECHA_CAIXA
Valor CaixaVL_CAIXAFloatCalculadoVL_ABERTURA + VL_MOVIMENTO
Valor DiferencaVL_DIFERENCAFloatCalculadoVL_FECHAMENTO - VL_CAIXA

Aba: Impressao (pagImpressao)​

Grupo: Reimpressao de Fechamento

CampoTipoRegra
Nr. ControleEdit + F9Busca caixa fechado. Valida que DT_FECHAMENTO IS NOT NULL
Botao ReimpressaoBitBtnImprime extrato do caixa informado

Grupo: Reabertura de Caixa

CampoTipoRegra
Nr. CaixaEdit + F9Busca caixa para reabrir
Botao ReaberturaBitBtnSeta DT_FECHAMENTO=NULL, VL_FECHAMENTO=NULL, VL_MOVIMENTO=NULL

Regras de Negocio​

  1. 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.

  2. 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.

  3. 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.

  4. 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: btnNovoClick via HabilitaCampos.

  5. DT_FECHAMENTO >= DT_ABERTURA: Data de fechamento nao pode ser anterior a data de abertura. Implementado em: btnSalvarClick.

  6. 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.

  7. 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.

  8. 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.

  9. Impressao automatica apos fechamento: Ao fechar caixa com sucesso, imprime extrato automaticamente via CarregaLayout usando CD_LAYCAIXA de PARMFINANC. Implementado em: btnSalvarClick → Imprimir_Extrato.

  10. 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: PaginaChange e btnReaberturaClick.

  11. 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_ULTIMOLANC
  • tabExtrato: Query auxiliar (nao utilizada diretamente no form — provavel uso em relatorio)

Dependencias​

Tabelas Utilizadas​

TabelaOperacaoDescricao
CAIXACRUDRegistros de abertura/fechamento de caixa por usuario
PARMFINANCLeituraParametros financeiros (CD_LAYCAIXA, CD_EMPRCAIXA, ST_PARMSALDO)
PARMUSUARIOLeituraPermissoes do usuario (ST_ABRECAIXA, ST_REABRECAIXA)
MOVTOCAIXALeituraLancamentos de caixa para validar DT_FECHAMENTO vs ultimo lancamento
PARMSALDOLeituraContas de saldo (TP_SALDO: X=Caixa, P/R/C/T) para sugestao e validacao
USUARIOCONTASALDOLeituraVinculos usuario-conta para saldo por usuario

Procedures Chamadas​

ProcedureContexto
PERMISSAO_CAIXAValida permissao do usuario para operar caixa. Retorna mensagem de erro se bloqueado
CONTROLE_CAIXAVerifica se caixa esta aberto/fechado e por qual usuario. Retorna CD_USUARIO, NR_CONTROLE, DT_CAIXA
ABRE_CAIXAEfetiva a abertura do caixa. Recebe: empresa, usuario, data, valor. Retorna mensagem de erro se falhar
FECHA_CAIXAEfetiva o fechamento do caixa. Recebe: empresa, usuario, data, valor. Retorna: VL_DINHEIRO, VL_CHEQUE, VL_MOVIMENTO, NR_CONTROLE
RETORNA_SALDOCAIXACRetorna saldo atual de uma conta caixa para uma data. Usado na sugestao de saldo de abertura

Telas Relacionadas​

TelaRelacao
MFC008Fechamento de Caixas (fechamento em lote, diferente de MFC001 que e individual)
CFC002Referenciada 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