Pular para o conteúdo principal

MFC021 — Movimentação MFC021

Fonte​

  • Form: source/MFC021/UMFC021.pas / UMFC021.dfm
  • DataModule: source/MFC021/UdmMFC021.pas / UdmMFC021.dfm
  • Package: source/MFC021/MFC021.dpk (requires: rtl, vcl, dbrtl, vclwinx, vclactnband, vclx, vcldb, FireDAC, FireDACCommonDriver, FireDACCommon, FireDACIBDriver, ipstudiowin, jCommon, jPesquisa)

Objetivo​

Tela de movimentação que efetua a baixa de duplicatas a pagar (CP) via Contrato de Vendor — modalidade de financiamento em que uma financeira antecipa o pagamento dos fornecedores e a empresa passa a dever a duplicata da financeira. A tela filtra as contas abertas, permite ao usuario selecionar as duplicatas do grid e, apos informar os dados do contrato (financeira, valor, condicao de pagamento, contas contábeis de juro a incorrer e juro despesa financeira, historico), grava o contrato na tabela VENDOR, associa as duplicatas originais em CONTASVENDOR e executa a procedure GRAVA_VENDOR que gera os novos documentos da financeira e baixa os originais.

Funcionalidades​

  • Filtrar duplicatas a pagar em aberto (ST_CONTAS='T' / TP_TIPOCONTA='CP') por empresa, periodo de emissao, periodo de vencimento, pessoas, numeros de documento/lancamento e tipos de conta.
  • Selecionar/desmarcar individualmente via coluna de marca (checkbox Å na coluna de status) ou em massa via botao "Marcar Todos".
  • Exibir total selecionado dinamicamente em "Total Selecionado" a cada marcacao/desmarcacao.
  • Informar dados do Contrato de Vendor: financeira (pessoa), condicao de pagamento, data de contrato, data de vencimento, numero do contrato, tipo de conta, historico, contas contábeis de juro a incorrer e juro despesa financeira, valor do contrato e valor do juro (calculado como contrato - total das duplicatas).
  • Gerar o numero do contrato (NR_VENDOR) automaticamente via GERA_SEQUENCIA('SEQ_CONTRATOVENDOR'), criando o generator SEQ<EMPRESA>_CONTRATOVENDOR caso ainda nao exista.
  • Persistir o contrato em VENDOR, vincular cada duplicata selecionada em CONTASVENDOR (TP_REGISTRO='O' = origem) e processar a baixa/geracao de novos documentos pela procedure GRAVA_VENDOR.
  • Recuperar/gravar filtros do programa por empresa+usuario (Recupera_FiltroPrograma / Grava_FiltroPrograma).

Estrutura da Tela​

Form MDI (fsMDIChild) com toolbar lateral esquerda e TPageControl (Paginas) com duas abas:

Toolbar (lateral esquerda)​

BotaoHintAtalho
Novo RegistroNovo Registro <F5>F5
Salvar AlteracoesSalvar Alteracoes <F6>F6
Excluir Registro (oculto)Excluir Registro <F7>F7
Cancelar RegistroCancelar Registro <F4>F4
ConsultarConsultar <F3>F3
Atualizar Registros (oculto)Atualizar Registros <F2>F2
Imprimir (oculto)Imprimir <F8>F8
SairSair <F12>F12

Aba "Filtros para Consulta" (pagFiltros)​

  • Filtros (grupo):
    • Empresa (codigo + nome)
    • Emissao (inicial / Ate final)
    • Vencimento (inicial / Ate final)
    • Nome Arquivo
    • Ordenar por — combo com opcoes "Vencimento, Documento", "Documento, Vencimento", "Emissao, Vencimento"
    • Grid "Documento / Lancamento" (colunas: Documento, Lancamento)
  • Pessoas (grupo) — grid de pessoas (Código, Nome) com lookup F9
  • Tipos de Conta (grupo) — grid de tipos de conta (Código, Descricao) com lookup F9 filtrando TIPOCONTA
  • Botao "Consultar <F3>" — dispara btnProcurar.Click

Aba "Contas a Pagar" (pagDoctos — visivel apos consulta)​

  • Selecione os Documentos para Baixa com Vendor (grupo):
    • Grid de contas com colunas: marca (Å), Empr, Pessoa, Tipo de Conta, Docto, Parcela (P), Emissao, Vencimento, Valor, Saldo
    • Botao "Marcar Todos" (coluna Å) — alterna selecao em massa
    • Rodape exibindo N Lancamento, Data Lancamento, Pessoa, Total Selecionado
  • Informe os Dados do Contrato de Vendor (grupo):
    • Financeira (codigo + nome) — lookup F9 via Busca('PESSOA')
    • Cond. de Pagto (codigo + descricao) — lookup F9 via Busca('CONDPAGTO')
    • Vencto (data) — readonly salvo quando cond. pagto for tipo 'D'
    • Tipo Conta (codigo + descricao) — lookup F9 via Busca('TIPOCONTA', ['CP'])
    • Historico (codigo + descricao) — lookup F9 filtrando HISTORICO tipo 'U' natureza 'R'
    • Juro A Incorrer (codigo + descricao da conta contábil) — lookup F9 via Busca('CONTASCONTABEIS')
    • Juro Desp. Financ. (codigo + descricao da conta contábil) — lookup F9 via Busca('CONTASCONTABEIS')
    • Data do Contrato
    • N do Contrato
    • Valor a Contrato
    • Valor Juro (readonly — calculado automaticamente)
    • Botao "Salvar <F6>" — dispara btnSalvar.Click

Parametros que Influenciam​

[!TODO] Nao foram identificadas leituras explicitas de tabelas PARM*/PARAM*/CONFIG* no codigo deste módulo. O comportamento e controlado por:

  • sessao.empresa.cd_empresa / sessao.usuario.cd_usuario — escopo de empresa/usuario para geracao de sequencia (generator SEQ<EMPRESA>_CONTRATOVENDOR) e views VIEW_PARMSALDO / VIEW_PLANOCONTAS.
  • programa.tpAcesso — quando = 2, oculta botoes Novo/Salvar/Excluir (somente consulta).
  • HISTORICO.TP_HISTORICO / HISTORICO.TP_NATUREZA — restringe lookup de historicos a tipo 'U' (Duplicata) e natureza 'R' (Recebimento).
  • TIPOCONTA.TP_TIPOCONTA — obriga tipo 'CP' (Contas a Pagar) para o contrato e 'AC' (Desconto/Adiantamento) para filtros.
  • CONDPAGTO.ST_CONDPAGTO — 'D' habilita campo de vencimento editavel; 'P' preenche o vencimento com a maior parcela de CONDPARCELA. Caso surjam novos controles via PARMFINANC/PARMFATUR, registrar aqui.

Regras de Negocio​

  1. Tipo de conta obrigatorio = 'CP' (tabVENDORCD_TIPOCONTAValidate): recusa 'H' (cheque — usar MFC003), 'CT' (cartao de credito) e qualquer outro que nao seja Contas a Pagar.
  2. Historico do contrato: deve estar ativo, ser do tipo 'U' (Duplicata) e natureza 'R' (Recebimento) (tabVENDORCD_HISTORICOValidate).
  3. Historico do filtro (juro): deve estar ativo, ser tipo 'J' (Juro) e natureza 'R' (tabFILTROCD_HISTJUROValidate).
  4. Historico da empresa (desconto): deve ser tipo 'A' (Adiantamento), natureza 'R' e possuir contra-partida (CD_HISTCONT) ativa (tabEmpresaCD_HISTORICOValidate).
  5. Tipo de conta do filtro: deve ser 'AC' (Desconto de Duplicata / Adiantamento Cliente) (tabFILTROCD_TIPOCONTAValidate, tabEmpresaCD_TIPOCONTAValidate).
  6. Financeira ativa: a pessoa informada como financeira deve existir em PESSOA e estar ativa (tabVENDORCD_FINANCEIRAValidate).
  7. Valor do contrato > total das duplicatas (arredondado a 2 casas): validado no tabVENDORVL_CONTRATOValidate e reafirmado no btnSalvarClick. Violar gera E-0000 "O Valor do Contrato de Vendor deve ser Maior que o Total das Duplicatas".
  8. Juro calculado automaticamente: VL_JURO = VL_CONTRATO - VL_DOCUMENTO (total selecionado).
  9. Saldo do filtro: VL_SALDO = VL_DOCUMENTO - VL_JURO (recalculado em tabFILTROVL_DOCUMENTOValidate e tabFILTROVL_JUROValidate).
  10. Condicao de pagamento (tabVENDORCD_CONDPAGTOValidate):
    • ST_CONDPAGTO='D' (data livre) → habilita edicao manual do vencimento;
    • ST_CONDPAGTO='P' (parcelada) → preenche vencimento com DT_CONTRATO + MAX(NR_DIAS) de CONDPARCELA e bloqueia edicao;
    • outros → bloqueia edicao e limpa vencimento;
    • codigo 0 → vencimento = hoje;
    • codigo 1 → exige informar a data manualmente.
  11. Geracao do NR_VENDOR (tabVENDORBeforePost): via GERA_SEQUENCIA(empresa, 'SEQ_CONTRATOVENDOR'). Se o generator nao existe, cria SEQ<EMPRESA:4d>_CONTRATOVENDOR. Loop garante que o numero gerado nao viola PK de VENDOR. Se NR_CONTRATO esta vazio, assume o mesmo numero do vendor.
  12. SAVEPOINT CONTRATO_VENDOR (btnSalvarClick): envolve todo o processo de gravacao — Post do VENDOR + INSERT direto na tabela VENDOR + INSERTs em CONTASVENDOR (uma linha por duplicata selecionada, TP_REGISTRO='O') + chamada de GRAVA_VENDOR(empresa, nr_vendor). Qualquer excecao faz ROLLBACK TO CONTRATO_VENDOR e re-levanta o erro.
  13. Confirmacao: msgCodigo C-0000 "Confirma a Baixa com Vendor ?" antes de processar.
  14. Filtro principal (btnProcurarClick): SQL sobre CONTAS com joins PESSOA, TIPOCONTA, FORMAPAGTO, BANCO, AGENCIA, CONTACORPESSOA, JURO e LEFT JOIN CONTASJUNCAO J (filtro J.CD_EMPRESA IS NULL exclui duplicatas ja com juncao 'D'); restrito a ST_CONTAS='T', NR_LANCTONOTA NOT NULL, TP_TIPOCONTA='CP', TP_DOCUMENTO &lt;&gt; 'CV'.
  15. Acesso restrito: programa.tpAcesso = 2 oculta botoes Novo/Salvar/Excluir. Botoes btnExcluir, btnAtualizar, btnImprimir sao sempre ocultos (funcao nao implementada).
  16. Campos preservados entre sessoes: ao abrir, a tela recupera filtros do programa mas limpa NR_VENDOR, CD_FINANCEIRA, DT_CONTRATO, DT_VENCIMENTO, NR_CONTRATO, VL_CONTRATO e VL_JURO do VENDOR para forcar entrada nova.

Datasets e SQL​

DatasetDescricaoTabelas
tabEmpresaFiltros em memoria da empresa selecionada (datas emissao/vencimento, tipo conta, historicos, conta saldo, nome arquivo, flags ST_ORIGEM/ST_PROCESSO/PC_JURO)EMPRESA (lookup via Validate)
tabPESSOAGrid de pessoas filtradas (in-memory) — aceita multiplos registrosPESSOA (lookup via Validate)
tabTIPOCONTAGrid de tipos de conta filtrados (in-memory)TIPOCONTA (lookup via Validate)
tabDOCUMENTOSGrid de documentos/lancamentos para filtro (in-memory)-
tabFILTROTotalizadores do filtro: CD_PESSOA, CD_TIPOCONTA, CD_BANCO, CD_AGENCIA, CD_FORMAPAGTO, CD_HISTORICO, CD_HISTJURO, CD_HISTCONTRA, VL_DOCUMENTO, VL_JURO, VL_SALDOBANCO, AGENCIA, FORMAPAGTO, BOLETO, HISTORICO, CONDPAGTO (via Validates)
tabCONTASResultado da consulta (btnProcurar) — duplicatas CP abertas com STATUS calculado para marcar/desmarcarCONTAS (+ PESSOA, TIPOCONTA, FORMAPAGTO, BANCO, AGENCIA, CONTACORPESSOA, JURO, CONTASJUNCAO)
tabDUPLICATASEspelho de tabCONTAS (campos similares) — uso residualCONTAS
tabVENDORCabecalho do contrato de vendor em edicao: CD_EMPRESA, NR_VENDOR, CD_FINANCEIRA, CD_CONDPAGTO, NR_CONTRATO, DT_CONTRATO, DT_VENCIMENTO, VL_CONTRATO, VL_JURO, CD_CONTAJUROINCORRER, CD_CONTAJURODESPESA, CD_TIPOCONTA, CD_HISTORICOVENDOR (INSERT via ExecUpdate em btnSalvar)

SQL principal — consulta de duplicatas (btnProcurarClick):

SELECT DISTINCT CONTAS.CD_EMPRESA, CONTAS.NR_LANCAMENTO, CONTAS.CD_PESSOA,
CONTAS.CD_TIPOCONTA, CONTAS.NR_PARCELA, CONTAS.NR_DOCUMENTO,
PESSOA.NM_PESSOA, TIPOCONTA.DS_TIPOCONTA, CONTAS.VL_DOCUMENTO,
CONTAS.VL_SALDO, CONTAS.ST_CONTAS, CONTAS.DT_LANCAMENTO,
CONTAS.DT_VENCIMENTO, CONTAS.DT_LIQUIDACAO, CONTAS.CD_FORMAPAGTO,
FORMAPAGTO.DS_FORMAPAGTO, CONTAS.CD_BANCO, BANCO.DG_BANCO,
BANCO.DS_BANCO, CONTAS.CD_AGENCIA, AGENCIA.DG_AGENCIA,
CONTAS.NR_CONTACOR, CONTACORPESSOA.DG_CONTACOR,
CONTAS.CD_JURO, JURO.DS_JURO, CONTAS.TP_DOCUMENTO,
CONTAS.NR_LANCTONOTA, CONTAS.CD_SERIE, CONTAS.TP_CONTAS,
CAST(NULL AS VARCHAR(1)) STATUS
FROM CONTAS
INNER JOIN PESSOA ON (PESSOA.CD_PESSOA = CONTAS.CD_PESSOA)
INNER JOIN TIPOCONTA ON (TIPOCONTA.CD_TIPOCONTA = CONTAS.CD_TIPOCONTA)
LEFT JOIN FORMAPAGTO ON (FORMAPAGTO.CD_FORMAPAGTO = CONTAS.CD_FORMAPAGTO)
LEFT JOIN BANCO ON (BANCO.CD_BANCO = CONTAS.CD_BANCO)
LEFT JOIN AGENCIA ON (AGENCIA.CD_BANCO = CONTAS.CD_BANCO AND AGENCIA.CD_AGENCIA = CONTAS.CD_AGENCIA)
LEFT JOIN CONTACORPESSOA ON (CONTACORPESSOA.CD_BANCO = CONTAS.CD_BANCO AND ... AND CONTACORPESSOA.CD_PESSOA = CONTAS.CD_PESSOA)
LEFT JOIN JURO ON (JURO.CD_JURO = CONTAS.CD_JURO)
LEFT JOIN CONTASJUNCAO J ON (CONTAS.CD_EMPRESA = J.CD_EMPRORIG AND ... AND J.TP_JUNCAO = 'D')
WHERE CONTAS.ST_CONTAS = 'T'
AND CONTAS.NR_LANCTONOTA IS NOT NULL
AND J.CD_EMPRESA IS NULL
AND TIPOCONTA.TP_TIPOCONTA = 'CP'
AND CONTAS.TP_DOCUMENTO &lt;&gt; 'CV'
{+ filtros dinamicos: empresa, DT_LANCAMENTO, DT_VENCIMENTO, CD_PESSOA IN (..), NR_DOCUMENTO IN (..), NR_LANCAMENTO IN (..), CD_TIPOCONTA IN (..)}
ORDER BY <cmbOrdem>

INSERT em VENDOR (btnSalvarClick):

INSERT INTO VENDOR (CD_CONDPAGTO, CD_TIPOCONTA, CD_CONTAJURODESPESA, CD_CONTAJUROINCORRER,
CD_EMPRESA, CD_FINANCEIRA, DT_CONTRATO, DT_REGISTRO, NR_CONTRATO, NR_VENDOR,
VL_CONTRATO, DT_VENCIMENTO, VL_JURO, CD_HISTORICO)
VALUES (..., 'NOW', ...)

INSERT em CONTASVENDOR (uma linha por duplicata selecionada):

INSERT INTO CONTASVENDOR (CD_EMPRESA, NR_LANCAMENTO, CD_TIPOCONTA, CD_PESSOA, NR_PARCELA,
CD_EMPRVENDOR, NR_VENDOR, TP_REGISTRO, DT_REGISTRO)
VALUES (..., 'O', 'NOW')

Procedure de baixa:

SELECT O_DS_MENSAGEM FROM GRAVA_VENDOR(<CD_EMPRESA>, <NR_VENDOR>)

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
CONTASDELETE, INSERT, SELECT, UPDATE
CONTASVENDORINSERT
PESSOADELETE, INSERT, SELECT, UPDATE
TIPOCONTADELETE, INSERT, SELECT, UPDATE
VENDORDELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
AGENCIASELECT
BANCOSELECT
BOLETOSELECT
CONDPAGTOSELECT
CONDPARCELASELECT
CONTACORPESSOASELECT
CONTASHISTORICOSELECT
CONTASJUNCAOSELECT
EMPRESASELECT
FORMAPAGTOSELECT
HISTORICOSELECT
JUROSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
GERA_SEQUENCIASEQUENCIA (SELECT/UPDATE)
GRAVA_VENDORAGENCIA (SELECT), ALIQUOTA (SELECT), AVISOSCPC (INSERT), BANCO (SELECT), CHEQUE (SELECT), COMISSAOCONTAS (INSERT) +47
LISTA_HISTORICOSHISTORICO (SELECT), TIPOCONTA (SELECT)
VIEW_PARMSALDOEMPRESA (SELECT), PARMFINANC (SELECT), PARMSALDO (SELECT), SESSAO (INSERT/SELECT), USUARIOCONTASALDO (SELECT)
VIEW_PLANOCONTASCENTROCUSTO (SELECT), CONTASPESSOA (SELECT), PARMCONTABIL (SELECT), PARMSISTEMA (SELECT), PLANOCONTAS (SELECT), PLANOEMPRESA (SELECT)

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
AGENCIASELECT
ALIQUOTASELECT
AVISOSCPCINSERT
BANCOSELECT
CENTROCUSTOSELECT
CHEQUESELECT
COMISSAOCONTASINSERT
CONDPAGTOSELECT
CONTASSELECT, UPDATE
CONTASCTBDELETE, INSERT, SELECT
CONTASHISTORICOSELECT
CONTASHISTORICOCTBDELETE, INSERT, SELECT
CONTASPESSOASELECT
CONTASVENDORINSERT, SELECT
CUPOMFISCALSELECT, UPDATE
DESTINOREPARCELAMENTOSELECT
DEVOLUCAODELETE, SELECT
EMPRESASELECT
ENDERECOPESSOASELECT
FORMAPAGTOSELECT
...+39 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
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
MFC024CONTAS
...+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
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
MCB017Reprocessamento de Centro de CustoCONTAS
...+323 telas