Pular para o conteúdo principal

RFC001 — Diário de Caixa / Banco

Fonte​

  • Form: source/RFC001/URFC001.pas
  • DataModule: source/RFC001/UdmRFC001.pas
  • Design Form: source/RFC001/URFC001.dfm
  • Design DM: source/RFC001/UdmRFC001.dfm
  • Package: source/RFC001/RFC001.dpk
  • Procedure: Scripts/VIEW_DIARIOCAIXA.sql
  • Menu: source/jCommon/jMenu.pas (linha 789: RFC.add('RFC001', 'Diário de Caixa / Banco', 1, [erpFinBasico]))

Objetivo​

Relatório financeiro que lista, no formato de diario contábil (debito / credito), todos os lancamentos de caixa e banco de uma empresa em um intervalo de datas. Consome a procedure selectable VIEW_DIARIOCAIXA, que faz UNION ALL entre a perna de debito (conta a debitar) e a perna de credito (conta a creditar) de cada MOVTOCAIXA nao estornado, juntando dados do plano de contas, caixa/controle, usuario, historico e pessoa. A tela em si e apenas um formulario de filtros (empresa + periodo) e nao persiste nada no banco.

Modelos de Relatorio​

Modelo 1: Padrao​

Quando usado: unico modelo — a tela nao tem combobox de selecao de layout. O leiaute de impressao e definido por programa.codigo (RFC001) via GeraRelatorio do jReport.

Relatorio analitico do movimento de caixa/banco, ordenado por empresa, data de lancamento, conta e numero do lancamento (NR_LANCCAIXA). Exibe, para cada lancamento: data, numero do lancamento, plano de contas (codigo + descricao), historico (codigo + descricao), numero do documento, complemento e os valores de debito e credito ja segregados em duas linhas (o UNION ALL na procedure desdobra um MOVTOCAIXA em uma linha de VL_DEBITO e outra de VL_CREDITO).

SQL Base (montado em btnImprimirClick):

SELECT DS_EMPRESA, DT_LANCAMENTO, CD_CONTA, DS_CONTA, NR_LANCCAIXA, CD_HISTORICO,
NR_DOCUMENTO, DS_COMPLEMENTO, VL_DEBITO, VL_CREDITO
FROM VIEW_DIARIOCAIXA(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL,
' AND PARMSALDO.TP_SALDO IN (''X'', ''B'') ')
ORDER BY DS_EMPRESA, DT_LANCAMENTO, CD_CONTA, NR_LANCCAIXA

O quarto parametro da procedure (I_FILTRO) e um fragmento SQL concatenado usado dentro de um EXECUTE STATEMENT: RFC001 sempre passa AND PARMSALDO.TP_SALDO IN ('X', 'B'), restringindo o relatorio a contas marcadas como caixa (X) ou banco (B) no PARMSALDO (via VIEW_PARMSALDO). Contas de outro tipo (I = Informativo, por exemplo) sao ignoradas.

Filtros​

Campos simples:

  • Empresa (Lista de Empresas cadastradas) F9 — default: empresa da sessao (sessao.empresa.cd_empresa)
  • Período - De (data inicial do lancamento) — obrigatorio
  • Período - Até (data final do lancamento) — obrigatorio

A validacao no btnImprimirClick exige Data Inicial e Data Final preenchidas, caso contrario levanta JException com a mensagem "É Obrigatório Informar a Data Inicial/Final do Período para Realizar a Consulta!".

Parametros que Influenciam​

TabelaCampoEfeito
PARMSALDOTP_SALDOA procedure VIEW_PARMSALDO classifica cada conta do plano: X=Caixa, B=Banco, I=Informativo. RFC001 passa filtro fixo TP_SALDO IN ('X','B') — contas informativas nunca aparecem no diario.
PARMSALDOCD_CONTAVinculo entre a conta parametrizada e a conta do lancamento (MX.CD_CONTADEBITO / MX.CD_CONTACREDITO). Se uma conta nao estiver em PARMSALDO da empresa, seu movimento nao aparece.

Observacao: a tela nao expoe nenhum parametro PARM* ao usuario. A restricao de contas e feita via TP_SALDO dentro da view.

Regras de Negocio​

  1. Data inicial obrigatoria: se DT_INICIAL vazio, foco em edtDT_INICIAL e JException('E-0000', 'É Obrigatório Informar a Data Inicial do Período para Realizar a Consulta!').
  2. Data final obrigatoria: se DT_FINAL vazio, foco em edtDT_FINAL e mesma mensagem com "Data Final".
  3. Validacao de empresa: tabEMPRESACD_EMPRESAValidate executa SELECT NM_EMPRESA FROM EMPRESA WHERE CD_EMPRESA = ...; se nao encontrar, levanta JException('E-0000', 'A Empresa não está Cadastrada [ADM002]!') e limpa NM_EMPRESA.
  4. Lookup F9 na Empresa: edtCD_EMPRESAKeyDown abre Pesquisa com SQL SELECT NM_EMPRESA, CD_EMPRESA FROM EMPRESA (colunas Nome / Código, titulo "Selecione a Empresa"); o codigo selecionado volta para edtCD_EMPRESA.
  5. Empresa default: no btnNovoClick, apos Append em tabEMPRESA, CD_EMPRESA recebe o valor da sessao (sessao.empresa.cd_empresa).
  6. Tela e somente leitura: no iniciar, os botoes btnSalvar, btnExcluir, btnProcurar, btnAtualizar e Separador3 sao escondidos. O FormClose faz transaction.Rollback — portanto nenhum INSERT/UPDATE/DELETE jamais e persistido pela tela, mesmo que o mapper registre tabEMPRESA com access CRUD (buffer client-side em memoria para armazenar os filtros).
  7. Filtro fixo de tipo de conta: sempre concatena AND PARMSALDO.TP_SALDO IN ('X', 'B') no quarto parametro de VIEW_DIARIOCAIXA, limitando a saida a contas de Caixa e Banco.
  8. Cabecalho do relatorio: variavel global ParmRelat e setada com 'Data Referência: ' + edtDT_INICIAL.Text antes de GeraRelatorio, servindo como parametro para o leiaute.
  9. Atalhos de teclado: F4=Limpar, F5=Novo, F8=Imprimir, F12=Sair (mapeados em FormKeyDown).
  10. Segregacao debito/credito: a procedure faz UNION ALL entre a perna de debito (CD_CONTADEBITO) e a perna de credito (CD_CONTACREDITO) de cada movimento — um unico MOVTOCAIXA nao estornado gera duas linhas no relatorio, uma com VL_DEBITO preenchido e outra com VL_CREDITO preenchido.
  11. Exclui estornos: a procedure filtra WHERE MX.ST_ESTORNO = 'N'. Lancamentos estornados nao aparecem no diario.

Mensagens exibidas​

Levantadas de source/RFC001/ pela camada 0 (commit 96fc51e236).

Mais 3 mensagens com texto literal no código: RFC001.

Datasets e SQL​

DatasetDescricaoTabelas
tabEMPRESABuffer em memoria que guarda os filtros do usuario (CD_EMPRESA, NM_EMPRESA, DT_INICIAL, DT_FINAL). Sem persistencia — FormClose faz Rollback.EMPRESA (leitura para validacao)

A query principal do relatorio e construida em runtime em btnImprimirClick (nao e um TFDQuery persistido no DataModule) e e entregue ao engine GeraRelatorio do jReport via programa.codigo.

Perguntas Frequentes​

Módulo: RFC001 - Diário de Caixa


P: Qual é a finalidade da tela RFC001? R: A tela RFC001 tem como objetivo gerar o relatório de Diário de Caixa, que apresenta os lançamentos de caixa da empresa em um determinado período. O relatório exibe informações como a empresa, data de lançamento, conta, número do lançamento, histórico, número do documento, complemento, valores de débito e crédito, organizados por empresa, data e conta.

P: Ao tentar gerar o relatório, o sistema apresenta a mensagem "É Obrigatório Informar a Data Inicial do Período para Realizar a Consulta!". Como devo proceder? R: Este erro ocorre porque o campo Período (Data Inicial) não foi preenchido. Para corrigir, informe a data inicial do período desejado no campo correspondente antes de clicar em Imprimir.

P: Ao tentar gerar o relatório, o sistema apresenta a mensagem "É Obrigatório Informar a Data Final do Período para Realizar a Consulta!". Como devo proceder? R: Este erro ocorre porque o campo Período (Data Final) não foi preenchido. Para corrigir, informe a data final do período desejado no campo "Até" antes de clicar em Imprimir.

P: Ao informar o código da empresa, o sistema apresenta a mensagem "A Empresa não está Cadastrada [ADM002]!". O que significa? R: Este erro indica que o código da empresa informado não foi encontrado no cadastro de empresas do sistema. Verifique se o código está correto. Caso a empresa ainda não esteja cadastrada, acesse a tela de Cadastro de Empresas (ADM002) para realizar o cadastro.

P: Como utilizar a pesquisa de empresas? R: No campo Empresa, pressione a tecla F9 para abrir a lista de pesquisa de empresas. A lista exibirá o nome e o código de todas as empresas cadastradas, permitindo a seleção direta.

P: Quais são os atalhos de teclado disponíveis nesta tela? R: Os atalhos disponíveis são: F4 para limpar os filtros, F5 para novo registro, F8 para imprimir o relatório e F12 para sair da tela.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

Nenhuma. A tela faz Append no tabEMPRESA apenas para editar campos visuais de filtro em memoria; o FormClose executa transaction.Rollback antes de liberar o DataModule, garantindo que nada e persistido. O mapper marca CRUD por analise estatica (presenca de Append/Edit), mas em runtime a operacao efetiva e somente leitura.

Tabelas de Leitura (SELECT)​

TabelaOperacoes
EMPRESASELECT (validacao do filtro + lookup F9)

Procedures Chamadas​

ProcedureTabelas Acessadas
VIEW_DIARIOCAIXAMOVTOCAIXA (SELECT), CAIXA (SELECT), EMPRESA (SELECT), PESSOA (SELECT), HISTORICO (SELECT), USUARIO (SELECT)
VIEW_PLANOCONTASCONTA (SELECT) — invocada internamente pela VIEW_DIARIOCAIXA
VIEW_PARMSALDOPARMSALDO (SELECT) — invocada internamente pela VIEW_DIARIOCAIXA
VERIFICA_CONTA_SALDOCONTA (SELECT) — invocada internamente pela VIEW_DIARIOCAIXA

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
CAIXASELECT
CONTASELECT
EMPRESASELECT
HISTORICOSELECT
MOVTOCAIXASELECT
PARMSALDOSELECT
PESSOASELECT
USUARIOSELECT

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem nas tabelas lidas por RFC001 (direta ou via VIEW_DIARIOCAIXA). Ordenadas por relevancia (MOVTOCAIXA / CAIXA / HISTORICO — o core do relatorio — primeiro).

TelaTítuloTabelas em Comum
CFC001Contas / Cheques / AdiantamentosHISTORICO, MOVTOCAIXA, PESSOA
MNF001Recebimento de Notas Fiscais de CompraEMPRESA, MOVTOCAIXA, PESSOA
MRC020Confirmação de Ordem de Carregamento RecapadoraEMPRESA, MOVTOCAIXA, PESSOA
MFC004Pagamento / Recebimento de ContasMOVTOCAIXA, PESSOA
MFC007Estorno de Pagamento / Recebimento de ContasMOVTOCAIXA, PESSOA
MFC009Alteração de DuplicatasHISTORICO, PESSOA
MNF002Emissão de Nota Fiscal de VendaEMPRESA, MOVTOCAIXA
MNF026Troca de Produtos com Emissão de Nota FiscalEMPRESA, MOVTOCAIXA
MNF032Importação de XML TransmitidoMOVTOCAIXA, PESSOA
MFC001Abertura / Fechamento de CaixaCAIXA
MFC002Lançamento de Duplicata / AdiantamentoMOVTOCAIXA
MFC003Lançamento de Caixa Avulso / ChequeMOVTOCAIXA
MFC006Estorno de Lançamento de Caixa Avulso / ChequeMOVTOCAIXA
MFC008Fechamento de CaixasCAIXA
MFC020Transferência de Caixa / BancoMOVTOCAIXA
MNF033Faturamento AgrupadoMOVTOCAIXA
CFC002Movimentos de CaixaHISTORICO
MFC017Lançamento de Duplicata com HistóricosHISTORICO
MFC023Duplicata / Adiantamento por ObraHISTORICO
TCB003HistóricosHISTORICO
ADM002EmpresaEMPRESA
TPO001ProdutosPESSOA
TFA001PessoasPESSOA

+508 telas tambem escrevem em EMPRESA/PESSOA/USUARIO (cadastros basicos compartilhados com todo o ERP) — omitidas por baixa relevancia para o diario de caixa.

Dependencias Eferentes (quem consome dados desta tela)​

RFC001 nao persiste dados — e apenas consumidor. Nao possui eferentes reais.

O mapper registra EMPRESA como "escrita" pela presenca de Append/Edit no tabEMPRESA, mas o FormClose faz transaction.Rollback antes do Free. Logo, nenhuma outra tela consome mudancas feitas por RFC001.

Modelos de Relatório​

Modelo 1: Padrao​

Quando usado: unico modelo — a tela nao tem combobox de selecao de layout. O leiaute de impressão e definido por programa.codigo (RFC001) via GeraRelatorio do jReport.

Relatório analitico do movimento de caixa/banco, ordenado por empresa, data de lancamento, conta e numero do lancamento (NR_LANCCAIXA). Exibe, para cada lancamento: data, numero do lancamento, plano de contas (codigo + descricao), historico (codigo + descricao), numero do documento, complemento e os valores de debito e credito ja segregados em duas linhas (o UNION ALL na procedure desdobra um MOVTOCAIXA em uma linha de VL_DEBITO e outra de VL_CREDITO).

SQL Base (montado em btnImprimirClick):

SELECT DS_EMPRESA, DT_LANCAMENTO, CD_CONTA, DS_CONTA, NR_LANCCAIXA, CD_HISTORICO,
NR_DOCUMENTO, DS_COMPLEMENTO, VL_DEBITO, VL_CREDITO
FROM VIEW_DIARIOCAIXA(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL,
' AND PARMSALDO.TP_SALDO IN (''X'', ''B'') ')
ORDER BY DS_EMPRESA, DT_LANCAMENTO, CD_CONTA, NR_LANCCAIXA

O quarto parametro da procedure (I_FILTRO) e um fragmento SQL concatenado usado dentro de um EXECUTE STATEMENT: RFC001 sempre passa AND PARMSALDO.TP_SALDO IN ('X', 'B'), restringindo o relatorio a contas marcadas como caixa (X) ou banco (B) no PARMSALDO (via VIEW_PARMSALDO). Contas de outro tipo (I = Informativo, por exemplo) sao ignoradas.