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 viaGERA_SEQUENCIA('SEQ_CONTRATOVENDOR'), criando o generatorSEQ<EMPRESA>_CONTRATOVENDORcaso ainda nao exista. - Persistir o contrato em
VENDOR, vincular cada duplicata selecionada emCONTASVENDOR(TP_REGISTRO='O' = origem) e processar a baixa/geracao de novos documentos pela procedureGRAVA_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)
| Botao | Hint | Atalho |
|---|---|---|
| Novo Registro | Novo Registro <F5> | F5 |
| Salvar Alteracoes | Salvar Alteracoes <F6> | F6 |
| Excluir Registro (oculto) | Excluir Registro <F7> | F7 |
| Cancelar Registro | Cancelar Registro <F4> | F4 |
| Consultar | Consultar <F3> | F3 |
| Atualizar Registros (oculto) | Atualizar Registros <F2> | F2 |
| Imprimir (oculto) | Imprimir <F8> | F8 |
| Sair | Sair <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
- Financeira (codigo + nome) — lookup F9 via
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 (generatorSEQ<EMPRESA>_CONTRATOVENDOR) e viewsVIEW_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 deCONDPARCELA. Caso surjam novos controles viaPARMFINANC/PARMFATUR, registrar aqui.
Regras de Negocio
- 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. - Historico do contrato: deve estar ativo, ser do tipo 'U' (Duplicata) e natureza 'R' (Recebimento) (
tabVENDORCD_HISTORICOValidate). - Historico do filtro (juro): deve estar ativo, ser tipo 'J' (Juro) e natureza 'R' (
tabFILTROCD_HISTJUROValidate). - Historico da empresa (desconto): deve ser tipo 'A' (Adiantamento), natureza 'R' e possuir contra-partida (
CD_HISTCONT) ativa (tabEmpresaCD_HISTORICOValidate). - Tipo de conta do filtro: deve ser 'AC' (Desconto de Duplicata / Adiantamento Cliente) (
tabFILTROCD_TIPOCONTAValidate,tabEmpresaCD_TIPOCONTAValidate). - Financeira ativa: a pessoa informada como financeira deve existir em
PESSOAe estar ativa (tabVENDORCD_FINANCEIRAValidate). - Valor do contrato > total das duplicatas (arredondado a 2 casas): validado no
tabVENDORVL_CONTRATOValidatee reafirmado nobtnSalvarClick. Violar geraE-0000"O Valor do Contrato de Vendor deve ser Maior que o Total das Duplicatas". - Juro calculado automaticamente:
VL_JURO = VL_CONTRATO - VL_DOCUMENTO (total selecionado). - Saldo do filtro:
VL_SALDO = VL_DOCUMENTO - VL_JURO(recalculado emtabFILTROVL_DOCUMENTOValidateetabFILTROVL_JUROValidate). - Condicao de pagamento (
tabVENDORCD_CONDPAGTOValidate):ST_CONDPAGTO='D'(data livre) → habilita edicao manual do vencimento;ST_CONDPAGTO='P'(parcelada) → preenche vencimento comDT_CONTRATO + MAX(NR_DIAS)deCONDPARCELAe bloqueia edicao;- outros → bloqueia edicao e limpa vencimento;
- codigo 0 → vencimento = hoje;
- codigo 1 → exige informar a data manualmente.
- Geracao do NR_VENDOR (
tabVENDORBeforePost): viaGERA_SEQUENCIA(empresa, 'SEQ_CONTRATOVENDOR'). Se o generator nao existe, criaSEQ<EMPRESA:4d>_CONTRATOVENDOR. Loop garante que o numero gerado nao viola PK deVENDOR. SeNR_CONTRATOesta vazio, assume o mesmo numero do vendor. - SAVEPOINT
CONTRATO_VENDOR(btnSalvarClick): envolve todo o processo de gravacao —Postdo VENDOR +INSERTdireto na tabelaVENDOR+INSERTs emCONTASVENDOR(uma linha por duplicata selecionada,TP_REGISTRO='O') + chamada deGRAVA_VENDOR(empresa, nr_vendor). Qualquer excecao fazROLLBACK TO CONTRATO_VENDORe re-levanta o erro. - Confirmacao: msgCodigo
C-0000"Confirma a Baixa com Vendor ?" antes de processar. - Filtro principal (
btnProcurarClick): SQL sobreCONTAScom joinsPESSOA,TIPOCONTA,FORMAPAGTO,BANCO,AGENCIA,CONTACORPESSOA,JUROeLEFT JOIN CONTASJUNCAO J(filtroJ.CD_EMPRESA IS NULLexclui duplicatas ja com juncao 'D'); restrito aST_CONTAS='T',NR_LANCTONOTA NOT NULL,TP_TIPOCONTA='CP',TP_DOCUMENTO <> 'CV'. - Acesso restrito:
programa.tpAcesso = 2oculta botoes Novo/Salvar/Excluir. BotoesbtnExcluir,btnAtualizar,btnImprimirsao sempre ocultos (funcao nao implementada). - 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_CONTRATOeVL_JUROdoVENDORpara forcar entrada nova.
Datasets e SQL
| Dataset | Descricao | Tabelas |
|---|---|---|
tabEmpresa | Filtros 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) |
tabPESSOA | Grid de pessoas filtradas (in-memory) — aceita multiplos registros | PESSOA (lookup via Validate) |
tabTIPOCONTA | Grid de tipos de conta filtrados (in-memory) | TIPOCONTA (lookup via Validate) |
tabDOCUMENTOS | Grid de documentos/lancamentos para filtro (in-memory) | - |
tabFILTRO | Totalizadores do filtro: CD_PESSOA, CD_TIPOCONTA, CD_BANCO, CD_AGENCIA, CD_FORMAPAGTO, CD_HISTORICO, CD_HISTJURO, CD_HISTCONTRA, VL_DOCUMENTO, VL_JURO, VL_SALDO | BANCO, AGENCIA, FORMAPAGTO, BOLETO, HISTORICO, CONDPAGTO (via Validates) |
tabCONTAS | Resultado da consulta (btnProcurar) — duplicatas CP abertas com STATUS calculado para marcar/desmarcar | CONTAS (+ PESSOA, TIPOCONTA, FORMAPAGTO, BANCO, AGENCIA, CONTACORPESSOA, JURO, CONTASJUNCAO) |
tabDUPLICATAS | Espelho de tabCONTAS (campos similares) — uso residual | CONTAS |
tabVENDOR | Cabecalho 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_HISTORICO | VENDOR (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 <> '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)
| Tabela | Operacoes |
|---|---|
| CONTAS | DELETE, INSERT, SELECT, UPDATE |
| CONTASVENDOR | INSERT |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
| TIPOCONTA | DELETE, INSERT, SELECT, UPDATE |
| VENDOR | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AGENCIA | SELECT |
| BANCO | SELECT |
| BOLETO | SELECT |
| CONDPAGTO | SELECT |
| CONDPARCELA | SELECT |
| CONTACORPESSOA | SELECT |
| CONTASHISTORICO | SELECT |
| CONTASJUNCAO | SELECT |
| EMPRESA | SELECT |
| FORMAPAGTO | SELECT |
| HISTORICO | SELECT |
| JURO | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| GERA_SEQUENCIA | SEQUENCIA (SELECT/UPDATE) |
| GRAVA_VENDOR | AGENCIA (SELECT), ALIQUOTA (SELECT), AVISOSCPC (INSERT), BANCO (SELECT), CHEQUE (SELECT), COMISSAOCONTAS (INSERT) +47 |
| LISTA_HISTORICOS | HISTORICO (SELECT), TIPOCONTA (SELECT) |
| VIEW_PARMSALDO | EMPRESA (SELECT), PARMFINANC (SELECT), PARMSALDO (SELECT), SESSAO (INSERT/SELECT), USUARIOCONTASALDO (SELECT) |
| VIEW_PLANOCONTAS | CENTROCUSTO (SELECT), CONTASPESSOA (SELECT), PARMCONTABIL (SELECT), PARMSISTEMA (SELECT), PLANOCONTAS (SELECT), PLANOEMPRESA (SELECT) |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| AGENCIA | SELECT |
| ALIQUOTA | SELECT |
| AVISOSCPC | INSERT |
| BANCO | SELECT |
| CENTROCUSTO | SELECT |
| CHEQUE | SELECT |
| COMISSAOCONTAS | INSERT |
| CONDPAGTO | SELECT |
| CONTAS | SELECT, UPDATE |
| CONTASCTB | DELETE, INSERT, SELECT |
| CONTASHISTORICO | SELECT |
| CONTASHISTORICOCTB | DELETE, INSERT, SELECT |
| CONTASPESSOA | SELECT |
| CONTASVENDOR | INSERT, SELECT |
| CUPOMFISCAL | SELECT, UPDATE |
| DESTINOREPARCELAMENTO | SELECT |
| DEVOLUCAO | DELETE, SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| FORMAPAGTO | SELECT |
| ... | +39 tabelas |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
jCaixa | CONTAS | |
| MFC028 | CONTAS | |
| CFC006 | Consulta Fatura (Agrupamento de Notas) | CONTAS |
| MFC033 | Gerenciamento Boleto Rápido Junsoft | CONTAS |
| TRC037 | CONTAS | |
JunsoftAPIBoletos | CONTAS | |
| MPD094 | CONTAS | |
| MNF019 | Gerenciamento de Notas Geral/Mestra | CONTAS |
| MFC003 | Lançamento de Caixa Avulso / Cheque | CONTAS |
JunsoftServiceFatApp | CONTAS | |
| MNF032 | Importação de XML Transmitido | CONTAS |
| CFC008 | Controle de Cobrança | CONTAS |
| MFC019 | Reparcelamento de Contas | CONTAS |
| MNF027 | Cancelamento de Notas Fiscais | CONTAS |
| MRC030 | CONTAS | |
| MCA007 | Condenação de Leite | CONTAS |
| MFC016 | Fatura ( Agrupamento de Notas Fiscais ) | CONTAS |
| MRC021 | Cancelamento de Ordem de carregamento Recapadora | CONTAS |
| CFC009 | Consulta/Cancelamento de Reparcelamento | CONTAS |
| MNF029 | CONTAS | |
| TFA067 | Contratos e Licenças de Software | CONTAS |
| MFC009 | Alteração de Duplicatas | CONTAS |
| MFC036 | Liberação de Contas a Pagar | CONTAS |
| CPD008 | CONTAS | |
| MNF005 | Cancelamento de Notas Fiscais | CONTAS |
| MFC023 | Duplicata / Adiantamento por Obra | CONTAS |
| CFC012 | CONTAS | |
| MFC030 | CONTAS | |
| MFC012 | Agrupamento de Contas | CONTAS |
| MFC024 | CONTAS | |
| ... | +74 telas |
Dependencias Eferentes (quem consome dados desta tela)
Telas que leem tabelas escritas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| RNF021 | Resumo Diário | CONTAS |
| MPD094 | CONTAS | |
| RFC021 | Movimentação por Histórico | CONTAS |
| RTR008 | Relatório de Viagens | CONTAS |
| MFC020 | Transferência de Caixa / Banco | CONTAS |
| LNF500 | CONTAS | |
| LCX032 | CONTAS | |
| MNF027 | Cancelamento de Notas Fiscais | CONTAS |
| LCX026 | CONTAS | |
MCA007 | Condenação de Leite | CONTAS |
LDP006 | CONTAS | |
| MRC021 | Cancelamento de Ordem de carregamento Recapadora | CONTAS |
| TFA067 | Contratos e Licenças de Software | CONTAS |
TRD016 | CONTAS | |
LDP015 | CONTAS | |
| MFC009 | Alteração de Duplicatas | CONTAS |
| LCX021 | CONTAS | |
| MFC036 | Liberação de Contas a Pagar | CONTAS |
| MNF005 | Cancelamento de Notas Fiscais | CONTAS |
| RFC046 | CONTAS | |
| MFC030 | CONTAS | |
| LNF015 | CONTAS | |
LDP011 | CONTAS | |
| MFC024 | CONTAS | |
| MFC027 | Gerenciamento Conciliação Bancária | CONTAS |
| LCX022 | CONTAS | |
| CNF008 | Demonstrativo de Margens sobre Vendas | CONTAS |
| LNF168 | CONTAS | |
jCaptacao | CONTAS | |
| MCB017 | Reprocessamento de Centro de Custo | CONTAS |
| ... | +323 telas |