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'eTP_NATUREZA='P'), Complemento (DS_OBSERVACAO) e Mes Vencimento (DT_COMPETENCIA, formatomm/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'eVL_MENSALIDADE > 0) e habilita o campo de percentual do valor para faturar parcial (ex.: 50% da mensalidade). - Alteracao de
DT_COMPETENCIAreprocessa todos os vencimentos do grid recalculando com base no dia doDT_VENCTOPARCELAdo 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 SAVEPOINTGRAVACONTAS(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 = 2oculta Novo/Salvar/Excluir; Procurar, Imprimir e Atualizar estao sempre ocultos nesta tela.
Estrutura da Tela
Barra de ferramentas (vertical, a esquerda)
| Botao | Acao | Atalho |
|---|---|---|
| Novo Registro | Inicia nova linha no grid | F5 |
| Salvar Alteracoes | Grava lote via GRAVA_CONTAS | F6 |
| Excluir Registro | Remove linha corrente do grid | F7 |
| Cancelar Registro | (Oculto/sem handler) | F4 |
| Consultar | Oculto nesta tela | F3 |
| Atualizar Registros | Oculto nesta tela | F2 |
| Imprimir | Oculto nesta tela | F8 |
| Sair | Fecha a tela | F12 |
Grupo "Dados do Lancamento" (grpAdiantamento)
| Label | FocusControl | Campo | Observacao |
|---|---|---|---|
| Data Lancamento | edtDT_LANCAMENTO | tabFILTRO.DT_LANCAMENTO | Preenche com Date ao criar; obrigatorio |
| Historico | edtCD_HISTORICO | tabFILTRO.CD_HISTORICO | F9 abre lookup filtrado por TP_HISTORICO='U' e TP_NATUREZA='P' |
| (sem label) | edtDS_HISTORICO | tabFILTRO.DS_HISTORICO | Read-only, preenchido via lookup/validate |
| Mes Vencimento | edtDT_COMPETENCIA | tabFILTRO.DT_COMPETENCIA | Formato mm/yyyy; default IncMonth(Date,1) |
| Complemento | edtDS_COMPLEMENTO | tabFILTRO.DS_OBSERVACAO | Copiado para cada linha de CONTAS ao salvar |
Grupo "Valores por Contrato" (GroupBox1)
Grid gridContas sobre dsCONTAS com colunas:
| Título | Campo | Observacao |
|---|---|---|
| Contrato | NR_CONTRATO | F9 abre Busca(..., 'CONTRATO', ...); dispara OnValidate que puxa Pessoa, Tipo Conta, Forma Pagto, Banco, Agencia e Vencimento |
| Pessoa | CD_PESSOA | Read-only (preenchido pelo contrato); OnValidate consulta nome em PESSOA |
| (sem titulo) | NM_PESSOA | Read-only |
| Vencimento | DT_VENCIMENTO | Read-only; calculado do dia do DT_VENCTOPARCELA do contrato + DT_COMPETENCIA |
| Valor | VL_DOCUMENTO | Editavel; valida obrigatorio no BeforePost |
| Complemento | DS_OBSERVACAO | Se vazio ao salvar, assume DS_OBSERVACAO do cabecalho |
Rodape
| Label | Componente | Campo | Observacao |
|---|---|---|---|
| "Preencher com Todos os Contratos" | chkContratos | — | Checkbox que carrega grid em bloco e exibe campo de percentual |
| (campo e "do valor.") | edtPC_VALOR / lblPC_VALOR | tabFILTRO.PC_VALOR | Visivel apenas quando chkContratos marcado; aplica percentual sobre VL_DOCUMENTO no OnValidate |
| Total Informado | edtVL_TOTAL | tabFILTRO.VL_TOTAL | Read-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_CONTASdepende transitivamente dePARMFATUR,PARMFINANC,PARMCONTABIL,PARMCOMPLEMENTO,PARMDDA,PARMFISCALePARMSISTEMA(verScripts/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
- Historico obrigatorio para abrir o grid (
GroupBox1Enter): ao entrar no grid, seDT_LANCAMENTOouCD_HISTORICOnao informados, foca o campo e lancaJException E-0000— "Informe a Data de Lancamento!" / "Informe o Historico!". - Historico obrigatorio no Salvar (
btnSalvarClick): antes de iterar o grid, re-valida queedtCD_HISTORICO.Text <> ''comJException E-0000— "Obrigatorio informar o Historico!". - Validacao de Historico (
tabFILTROCD_HISTORICOValidate): historico precisa estar cadastrado ([TCB003]), ativo, terTP_HISTORICO='U'(Duplicata),TP_NATUREZA='P'(Pagamento); para adiantamento (TP_HISTORICO='A') exige Contra Partida (CD_HISTCONT) ativa. - Validacao de Contrato (
tabCONTASNR_CONTRATOValidate): exige contrato cadastrado na empresa corrente (C.CD_EMPRESA = sessao.empresa.cd_empresa) e que aMOVIMENTACAOassociada gere financeiro (M.CD_TIPOCONTAnao pode ser nulo — senao "A movimentação associada a este contrato nao gera Financeiro!"). Preenche Pessoa, Tipo Conta, Forma Pagto, Banco, Agencia e calculaDT_VENCIMENTO = dia(DT_VENCTOPARCELA)/DT_COMPETENCIA(fallback: ultimo dia do mes). - Validacao de Pessoa (
tabCONTASCD_PESSOAValidate): exige registro emPESSOA— "Pessoa nao Cadastrada [TFA001]!". - BeforePost de CONTAS (
tabCONTASBeforePost): obrigaCD_PESSOA,DT_VENCIMENTOeVL_DOCUMENTO(nao-zero) —JException E-0000. - Reprocessamento ao mudar competencia (
tabFILTRODT_COMPETENCIAValidate): percorre todas as linhas do grid e reaplicatabCONTASNR_CONTRATOValidate, recalculando cadaDT_VENCIMENTO. - Aplicacao de percentual (
tabFILTROPC_VALORValidate): multiplicaVL_DOCUMENTOde cada linha porPC_VALOR/100comRoundTo(...,0)(trunca centavos). - Preenchimento automatico via checkbox Contratos (
chkContratosClick): ao marcar, faz SELECT emPESSOAINNER JOINCONTRATOINNER JOINMOVIMENTACAOfiltrandoVL_MENSALIDADE > 0,ST_CONTRATO = 'S'e empresa corrente; setaPC_VALOR=100e exibe campo de percentual. - Transacao com SAVEPOINT (
btnSalvarClick): abreSAVEPOINT GRAVACONTAS, chamaGRAVA_CONTASpara cada linha; se a procedure retornarV_DS_MENSAGEM <> '', executaROLLBACK TO GRAVACONTASe levantaJException E-0000com a mensagem da procedure. Sucesso:UPDATE CONTAS.DS_OBSERVACAOcom complemento/observacao da linha,Commit,msgCodigo('I-0000', ['Documentos Gravados com Sucesso!']), reabre transacao e limpa formulario. - 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 sempreNULL. - Total calculado em tempo real (
gridContasKeyDownem Enter/Up/Down): somaVL_DOCUMENTOde todas as linhas e escreve emtabFILTRO.VL_TOTAL, comDisableControls/EnableControls. - Exclusao de linha (
btnExcluirClick): requer confirmacaomsgCodigo('C-0045')e faztabCONTAS.Deletelocal — nao persiste (so afeta o grid corrente). - Fechamento da tela (
FormClose):transaction.Rollbackdescarta qualquer trabalho nao salvo; libera DataModule viacaFreeesessao.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: zeraVL_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)
| Tabela | Operacoes |
|---|---|
| CONTAS | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AGENCIA | SELECT |
| BANCO | SELECT |
| CONTACORPESSOA | SELECT |
| CONTASHISTORICO | SELECT |
| CONTRATO | SELECT |
| EMPRESA | SELECT |
| FORMAPAGTO | SELECT |
| HISTORICO | SELECT |
| JURO | SELECT |
| MOVIMENTACAO | SELECT |
| PESSOA | SELECT |
| TIPOCONTA | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| GRAVA_CONTAS | AJUSTEFISCALITEMNOTA (DELETE/INSERT/SELECT), ALIQUOTA (SELECT), BOLETO (SELECT), CODRECEITA (SELECT), CONDPAGTO (SELECT), CONDPARCELA (SELECT) +64 |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| AJUSTEFISCALITEMNOTA | DELETE, INSERT, SELECT |
| ALIQUOTA | SELECT |
| BOLETO | SELECT |
| CODRECEITA | SELECT |
| CONDPAGTO | SELECT |
| CONDPARCELA | SELECT |
| CONTAS | INSERT, SELECT, UPDATE |
| CONTASBLOQFINANC | SELECT |
| CONTASCTB | DELETE, INSERT, SELECT |
| CONTASHISTORICO | INSERT, SELECT |
| CONTASHISTORICOCC | SELECT |
| CONTASHISTORICOCTB | DELETE, INSERT, SELECT |
| CONTASJUNCAO | SELECT |
| CONTASPESSOA | INSERT, SELECT |
| CONTAS_MOVTOCONTABIL | SELECT |
| CREDITO | SELECT, UPDATE |
| CUPOMFISCAL | SELECT, UPDATE |
| DESTINOREPARCELAMENTO | SELECT |
| DEVOLUCAO | DELETE, SELECT |
| EMPRESA | SELECT |
| ... | +50 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 |
| MFC021 | 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 |
| ... | +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 |
| MFC021 | 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 | |
| ... | +323 telas |