Pular para o conteúdo principal

MFC014 — Movimentação MFC014

Fonte​

  • Form: source/MFC014/UMFC014.pas
  • DataModule: source/MFC014/UdmMFC014.pas
  • Package: source/MFC014/MFC014.dpk

Objetivo​

Gera em lote parcelas em CONTAS (Duplicatas TP_DOCUMENTO = 'DP', Tipo E/S = 'S', entrada de Adiantamento) a partir de um Historico ("Dados do Lancamento") e de uma lista de Contratos selecionados no grid "Valores por Contrato". Cada linha do grid dispara a procedure GRAVA_CONTAS que persiste a conta, o historico (CONTASHISTORICO), a integracao contábil e os relacionamentos associados. Uso tipico: faturar mensalidades de contratos ativos em bloco (cheio ou percentual do valor da mensalidade).

Funcionalidades​

  • Cabecalho do lancamento: Data Lancamento, Historico (lookup F9 em HISTORICO onde TP_HISTORICO='U' e TP_NATUREZA='P'), Complemento (DS_OBSERVACAO) e Mes Vencimento (DT_COMPETENCIA, formato mm/yyyy).
  • Grid "Valores por Contrato" permite inserir linha a linha via F9 (lookup de Contrato), preenchendo Pessoa, Vencimento e Valor automaticamente a partir do contrato.
  • Checkbox "Preencher com Todos os Contratos" carrega em lote todos os contratos ativos da empresa (C.ST_CONTRATO = 'S' e VL_MENSALIDADE > 0) e habilita o campo de percentual do valor para faturar parcial (ex.: 50% da mensalidade).
  • Alteracao de DT_COMPETENCIA reprocessa todos os vencimentos do grid recalculando com base no dia do DT_VENCTOPARCELA do contrato (ou ultimo dia do mes se data invalida).
  • Rodape mostra "Total Informado" (VL_TOTAL) somando todos os valores do grid a cada insercao/navegacao.
  • Botao Salvar (<F>) grava todas as parcelas em uma transacao com SAVEPOINT GRAVACONTAS (rollback parcial em caso de erro retornado pela procedure).
  • Botao Excluir (<F>) remove linha do grid (delete local antes de salvar).
  • Controle de acesso: programa.tpAcesso = 2 oculta Novo/Salvar/Excluir; Procurar, Imprimir e Atualizar estao sempre ocultos nesta tela.

Estrutura da Tela​

Barra de ferramentas (vertical, a esquerda)​

BotaoAcaoAtalho
Novo RegistroInicia nova linha no gridF5
Salvar AlteracoesGrava lote via GRAVA_CONTASF6
Excluir RegistroRemove linha corrente do gridF7
Cancelar Registro(Oculto/sem handler)F4
ConsultarOculto nesta telaF3
Atualizar RegistrosOculto nesta telaF2
ImprimirOculto nesta telaF8
SairFecha a telaF12

Grupo "Dados do Lancamento" (grpAdiantamento)​

LabelFocusControlCampoObservacao
Data LancamentoedtDT_LANCAMENTOtabFILTRO.DT_LANCAMENTOPreenche com Date ao criar; obrigatorio
HistoricoedtCD_HISTORICOtabFILTRO.CD_HISTORICOF9 abre lookup filtrado por TP_HISTORICO='U' e TP_NATUREZA='P'
(sem label)edtDS_HISTORICOtabFILTRO.DS_HISTORICORead-only, preenchido via lookup/validate
Mes VencimentoedtDT_COMPETENCIAtabFILTRO.DT_COMPETENCIAFormato mm/yyyy; default IncMonth(Date,1)
ComplementoedtDS_COMPLEMENTOtabFILTRO.DS_OBSERVACAOCopiado para cada linha de CONTAS ao salvar

Grupo "Valores por Contrato" (GroupBox1)​

Grid gridContas sobre dsCONTAS com colunas:

TítuloCampoObservacao
ContratoNR_CONTRATOF9 abre Busca(..., 'CONTRATO', ...); dispara OnValidate que puxa Pessoa, Tipo Conta, Forma Pagto, Banco, Agencia e Vencimento
PessoaCD_PESSOARead-only (preenchido pelo contrato); OnValidate consulta nome em PESSOA
(sem titulo)NM_PESSOARead-only
VencimentoDT_VENCIMENTORead-only; calculado do dia do DT_VENCTOPARCELA do contrato + DT_COMPETENCIA
ValorVL_DOCUMENTOEditavel; valida obrigatorio no BeforePost
ComplementoDS_OBSERVACAOSe vazio ao salvar, assume DS_OBSERVACAO do cabecalho

Rodape​

LabelComponenteCampoObservacao
"Preencher com Todos os Contratos"chkContratos—Checkbox que carrega grid em bloco e exibe campo de percentual
(campo e "do valor.")edtPC_VALOR / lblPC_VALORtabFILTRO.PC_VALORVisivel apenas quando chkContratos marcado; aplica percentual sobre VL_DOCUMENTO no OnValidate
Total InformadoedtVL_TOTALtabFILTRO.VL_TOTALRead-only; soma VL_DOCUMENTO do grid
Salvar <F>btnSalvarAlteracoes—Atalho para btnSalvar.Click

Parametros que Influenciam​

[!NOTE] MFC014 nao le tabelas PARM*/PARAM*/CONFIG* diretamente. O comportamento da procedure GRAVA_CONTAS depende transitivamente de PARMFATUR, PARMFINANC, PARMCONTABIL, PARMCOMPLEMENTO, PARMDDA, PARMFISCAL e PARMSISTEMA (ver Scripts/GRAVA_CONTAS.sql), mas a tela em si nao le nenhum parametro de sistema — apenas valida Historico e Contrato e delega a gravacao.

Regras de Negocio​

  1. Historico obrigatorio para abrir o grid (GroupBox1Enter): ao entrar no grid, se DT_LANCAMENTO ou CD_HISTORICO nao informados, foca o campo e lanca JException E-0000 — "Informe a Data de Lancamento!" / "Informe o Historico!".
  2. Historico obrigatorio no Salvar (btnSalvarClick): antes de iterar o grid, re-valida que edtCD_HISTORICO.Text <> '' com JException E-0000 — "Obrigatorio informar o Historico!".
  3. Validacao de Historico (tabFILTROCD_HISTORICOValidate): historico precisa estar cadastrado ([TCB003]), ativo, ter TP_HISTORICO='U' (Duplicata), TP_NATUREZA='P' (Pagamento); para adiantamento (TP_HISTORICO='A') exige Contra Partida (CD_HISTCONT) ativa.
  4. Validacao de Contrato (tabCONTASNR_CONTRATOValidate): exige contrato cadastrado na empresa corrente (C.CD_EMPRESA = sessao.empresa.cd_empresa) e que a MOVIMENTACAO associada gere financeiro (M.CD_TIPOCONTA nao pode ser nulo — senao "A movimentação associada a este contrato nao gera Financeiro!"). Preenche Pessoa, Tipo Conta, Forma Pagto, Banco, Agencia e calcula DT_VENCIMENTO = dia(DT_VENCTOPARCELA)/DT_COMPETENCIA (fallback: ultimo dia do mes).
  5. Validacao de Pessoa (tabCONTASCD_PESSOAValidate): exige registro em PESSOA — "Pessoa nao Cadastrada [TFA001]!".
  6. BeforePost de CONTAS (tabCONTASBeforePost): obriga CD_PESSOA, DT_VENCIMENTO e VL_DOCUMENTO (nao-zero) — JException E-0000.
  7. Reprocessamento ao mudar competencia (tabFILTRODT_COMPETENCIAValidate): percorre todas as linhas do grid e reaplica tabCONTASNR_CONTRATOValidate, recalculando cada DT_VENCIMENTO.
  8. Aplicacao de percentual (tabFILTROPC_VALORValidate): multiplica VL_DOCUMENTO de cada linha por PC_VALOR/100 com RoundTo(...,0) (trunca centavos).
  9. Preenchimento automatico via checkbox Contratos (chkContratosClick): ao marcar, faz SELECT em PESSOA INNER JOIN CONTRATO INNER JOIN MOVIMENTACAO filtrando VL_MENSALIDADE > 0, ST_CONTRATO = 'S' e empresa corrente; seta PC_VALOR=100 e exibe campo de percentual.
  10. Transacao com SAVEPOINT (btnSalvarClick): abre SAVEPOINT GRAVACONTAS, chama GRAVA_CONTAS para cada linha; se a procedure retornar V_DS_MENSAGEM <> '', executa ROLLBACK TO GRAVACONTAS e levanta JException E-0000 com a mensagem da procedure. Sucesso: UPDATE CONTAS.DS_OBSERVACAO com complemento/observacao da linha, Commit, msgCodigo('I-0000', ['Documentos Gravados com Sucesso!']), reabre transacao e limpa formulario.
  11. Parametros fixos passados a GRAVA_CONTAS: Tipo Lancamento='D', Tipo E/S='S', TP_DOCUMENTO='DP', empresa da sessao; Condicao de Pagamento, Conta Corrente, Juro, Lancamento/Serie Nota e Vendedor sempre NULL.
  12. Total calculado em tempo real (gridContasKeyDown em Enter/Up/Down): soma VL_DOCUMENTO de todas as linhas e escreve em tabFILTRO.VL_TOTAL, com DisableControls/EnableControls.
  13. Exclusao de linha (btnExcluirClick): requer confirmacao msgCodigo('C-0045') e faz tabCONTAS.Delete local — nao persiste (so afeta o grid corrente).
  14. Fechamento da tela (FormClose): transaction.Rollback descarta qualquer trabalho nao salvo; libera DataModule via caFree e sessao.descarregarPrograma(programa).

Datasets e SQL​

tabFILTRO (cabecalho do lancamento, 1 linha virtual)​

Query principal carregada vazia (WHERE 1=1 via Append). Agrega campos auxiliares calculados (CAST(NULL AS ...)) para Historico, Juro, Parcelas, Total, Competencia e Percentual do Valor. JOINs com CONTASHISTORICO, HISTORICO, PESSOA, TIPOCONTA, FORMAPAGTO, BANCO, AGENCIA, CONTACORPESSOA, JURO (usados apenas para descricao de lookup — os campos sao digitados/selecionados pelo usuario).

Eventos:

  • AfterInsert: zera VL_TOTAL.
  • CD_HISTORICO OnValidate: valida HISTORICO (regra 3).
  • DT_COMPETENCIA OnValidate: reprocessa vencimentos (regra 7).
  • PC_VALOR OnValidate: aplica percentual (regra 8).

tabCONTAS (linhas do grid)​

SELECT CONTAS.CD_EMPRESA, CONTAS.NR_LANCAMENTO, CONTAS.CD_PESSOA,
PESSOA.NM_PESSOA, CONTAS.CD_TIPOCONTA,
CONTAS.CD_FORMAPAGTO, CONTAS.CD_BANCO, CONTAS.CD_AGENCIA,
CONTAS.NR_CONTACOR, CONTAS.CD_JURO,
CONTAS.NR_DOCUMENTO, CONTAS.DT_LANCAMENTO, CONTAS.DT_VENCIMENTO,
CONTAS.VL_DOCUMENTO, CONTAS.DS_OBSERVACAO,
CAST(NULL AS INTEGER) NR_PARCELAS, CT.NR_CONTRATO
FROM CONTAS
INNER JOIN PESSOA ON (PESSOA.CD_PESSOA = CONTAS.CD_PESSOA)
INNER JOIN CONTRATO CT ON (CT.CD_EMPRESA = CONTAS.CD_EMPRESA
AND CT.CD_PESSOA = CONTAS.CD_PESSOA)
INNER JOIN TIPOCONTA ON (TIPOCONTA.CD_TIPOCONTA = CONTAS.CD_TIPOCONTA)
WHERE 1 = 0

UpdateSQL updCONTAS define INSERT/UPDATE/DELETE explicitos em CONTAS (apenas para operacao local de grid — a persistencia real ocorre via GRAVA_CONTAS).

Eventos:

  • AfterInsert: foca primeira coluna do grid.
  • BeforePost: regra 6.
  • CD_PESSOA OnValidate: regra 5.
  • NR_CONTRATO OnValidate: regra 4.

Lookups auxiliares​

  • F9 em Historico: SELECT em HISTORICO filtrando ST_ATIVO='S', TP_HISTORICO='U', TP_NATUREZA='P' (LEFT JOIN HISTORICO para contrapartida).
  • F9 em Contrato (no grid): Busca(transaction, 'CONTRATO', Params) — framework jPesquisa.
  • Carga em lote (checkbox): SELECT PESSOA JOIN CONTRATO JOIN MOVIMENTACAO JOIN EMPRESA filtrando VL_MENSALIDADE > 0, ST_CONTRATO='S' e empresa corrente.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
CONTASDELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
AGENCIASELECT
BANCOSELECT
CONTACORPESSOASELECT
CONTASHISTORICOSELECT
CONTRATOSELECT
EMPRESASELECT
FORMAPAGTOSELECT
HISTORICOSELECT
JUROSELECT
MOVIMENTACAOSELECT
PESSOASELECT
TIPOCONTASELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
GRAVA_CONTASAJUSTEFISCALITEMNOTA (DELETE/INSERT/SELECT), ALIQUOTA (SELECT), BOLETO (SELECT), CODRECEITA (SELECT), CONDPAGTO (SELECT), CONDPARCELA (SELECT) +64

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
AJUSTEFISCALITEMNOTADELETE, INSERT, SELECT
ALIQUOTASELECT
BOLETOSELECT
CODRECEITASELECT
CONDPAGTOSELECT
CONDPARCELASELECT
CONTASINSERT, SELECT, UPDATE
CONTASBLOQFINANCSELECT
CONTASCTBDELETE, INSERT, SELECT
CONTASHISTORICOINSERT, SELECT
CONTASHISTORICOCCSELECT
CONTASHISTORICOCTBDELETE, INSERT, SELECT
CONTASJUNCAOSELECT
CONTASPESSOAINSERT, SELECT
CONTAS_MOVTOCONTABILSELECT
CREDITOSELECT, UPDATE
CUPOMFISCALSELECT, UPDATE
DESTINOREPARCELAMENTOSELECT
DEVOLUCAODELETE, SELECT
EMPRESASELECT
...+50 tabelas

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela.

TelaTítuloTabelas em Comum
jCaixaCONTAS
MFC028CONTAS
CFC006Consulta Fatura (Agrupamento de Notas)CONTAS
MFC033Gerenciamento Boleto Rápido JunsoftCONTAS
TRC037CONTAS
JunsoftAPIBoletosCONTAS
MPD094CONTAS
MNF019Gerenciamento de Notas Geral/MestraCONTAS
MFC021CONTAS
MFC003Lançamento de Caixa Avulso / ChequeCONTAS
JunsoftServiceFatAppCONTAS
MNF032Importação de XML TransmitidoCONTAS
CFC008Controle de CobrançaCONTAS
MFC019Reparcelamento de ContasCONTAS
MNF027Cancelamento de Notas FiscaisCONTAS
MRC030CONTAS
MCA007Condenação de LeiteCONTAS
MFC016Fatura ( Agrupamento de Notas Fiscais )CONTAS
MRC021Cancelamento de Ordem de carregamento RecapadoraCONTAS
CFC009Consulta/Cancelamento de ReparcelamentoCONTAS
MNF029CONTAS
TFA067Contratos e Licenças de SoftwareCONTAS
MFC009Alteração de DuplicatasCONTAS
MFC036Liberação de Contas a PagarCONTAS
CPD008CONTAS
MNF005Cancelamento de Notas FiscaisCONTAS
MFC023Duplicata / Adiantamento por ObraCONTAS
CFC012CONTAS
MFC030CONTAS
MFC012Agrupamento de ContasCONTAS
...+74 telas

Dependencias Eferentes (quem consome dados desta tela)​

Telas que leem tabelas escritas por esta tela.

TelaTítuloTabelas em Comum
RNF021Resumo DiárioCONTAS
MPD094CONTAS
RFC021Movimentação por HistóricoCONTAS
RTR008Relatório de ViagensCONTAS
MFC020Transferência de Caixa / BancoCONTAS
MFC021CONTAS
LNF500CONTAS
LCX032CONTAS
MNF027Cancelamento de Notas FiscaisCONTAS
LCX026CONTAS
MCA007Condenação de LeiteCONTAS
LDP006CONTAS
MRC021Cancelamento de Ordem de carregamento RecapadoraCONTAS
TFA067Contratos e Licenças de SoftwareCONTAS
TRD016CONTAS
LDP015CONTAS
MFC009Alteração de DuplicatasCONTAS
LCX021CONTAS
MFC036Liberação de Contas a PagarCONTAS
MNF005Cancelamento de Notas FiscaisCONTAS
RFC046CONTAS
MFC030CONTAS
LNF015CONTAS
LDP011CONTAS
MFC024CONTAS
MFC027Gerenciamento Conciliação BancáriaCONTAS
LCX022CONTAS
CNF008Demonstrativo de Margens sobre VendasCONTAS
LNF168CONTAS
jCaptacaoCONTAS
...+323 telas