Tipo do Limite de Crédito
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas → Limite de Crédito Tabela:
PARMFATUR.TP_LIMITECREDITOValor padrão:N(Por Empresa)
Define o escopo de controle do limite de crédito das pessoas (clientes): se cada empresa do grupo possui seu próprio limite independente (N - Por Empresa) ou se o limite é único e compartilhado entre todas as empresas que também possuem TP_LIMITECREDITO = 'S' (S - Global). Afeta a gravação/replicação dos registros nas tabelas CREDITO, CREDITOGRUPO e CREDITOPERIODICO, além da lógica de verificação de duplicatas atrasadas no bloqueio de crédito.
Telas impactadas
| Módulo | Código | Descrição | Referência no código |
|---|---|---|---|
| Parâmetros de Faturamento | MFA001 | Tela de configuração do parâmetro (ComboBox cmbTP_LIMITECREDITO) | source/MFA001/UMFA001.dfm:6674 |
| Limite de Crédito por Pessoa | TFA002 | Ao salvar limite de crédito por pessoa/grupo, replica para demais empresas com limite Global | source/TFA002/UTFA002.pas:351, 709, 779; source/TFA002/UdmTFA002.pas:511, 686, 1334, 1433 |
| Crédito Periódico | TFA063 | Ao gravar crédito periódico, replica para demais empresas quando Global | source/TFA063/UdmTFA063.pas:144 |
| Cadastro de Pessoa | CPD009 | SELECT/INSERT/UPDATE de PARMFATUR via query interna | source/CPD009/UdmCPD009.dfm:384, 480, 550 |
| Integração ESTABIL | RCA006 | SELECT/INSERT/UPDATE de PARMFATUR via query interna | source/RCA006/UdmRCA006.dfm:3133, 3229, 3299 |
Procedures impactadas
| Objeto | Arquivo | Tipo | Descrição |
|---|---|---|---|
VERIFICA_CREDITO | Scripts/VERIFICA_CREDITO.sql | Procedure | Valida limite de crédito na emissão de pedidos/NFs. Se Global (S), zera CD_EMPRESA ao contar duplicatas liquidadas após 10 dias |
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql | Procedure | Validação central de bloqueio no faturamento. Lê TP_LIMITECREDITO junto com demais parâmetros da PARMFATUR (linha 143) e zera CD_EMPRESA ao verificar duplicatas atrasadas quando Global (linha 846) |
GERA_CREDITO | Scripts/GERA_CREDITO.sql | Procedure | Consolida informações de crédito da pessoa. Se Global, desconsidera CD_EMPRESA na busca da CREDITO |
VIEW_CREDITO_ESTABIL | Scripts/VIEW_CREDITO_ESTABIL.sql | Procedure | Integração ESTABIL → ERP. Filtra por PARMFATUR.TP_LIMITECREDITO = 'S' para replicar entre empresas Globais |
VIEW_CREDITOPESSOA | Scripts/VIEW_CREDITOPESSOA.sql | View (Procedure) | Retorna dados de crédito da pessoa respeitando o escopo (Global/Empresa) |
TRGAI_PESSOA | Scripts/TRGAI_PESSOA.sql | Trigger | AFTER INSERT em PESSOA. Se Global, cria registros em CREDITO para todas as empresas com TP_LIMITECREDITO = 'S' |
TRGAIUD_CONTAS | Scripts/TRGAIUD_CONTAS.sql | Trigger | AFTER INSERT/UPDATE/DELETE em CONTAS. Atualiza DT_REGISTRO de CREDITO sem filtrar por CD_EMPRESA quando Global |
CREDITOPERIODICO_AI0 | Scripts/CREDITOPERIODICO_AI0.sql | Trigger | AFTER INSERT em CREDITOPERIODICO. Se Global, replica para as demais empresas com TP_LIMITECREDITO = 'S' |
CREDITOPERIODICOGRUPO_AI0 | Scripts/CREDITOPERIODICOGRUPO_AI0.sql | Trigger | AFTER INSERT em CREDITOPERIODICOGRUPO. Mesma lógica da CREDITOPERIODICO_AI0 para o grupo |
Campos envolvidos
| Tabela | Campo | Observação |
|---|---|---|
PARMFATUR | TP_LIMITECREDITO | Parâmetro (S/N) por empresa |
CREDITO | CD_EMPRESA, CD_PESSOA, VL_CREDITO, VL_CREDITOACUM, NR_DIASATRASO | Dados de crédito da pessoa. Quando Global, replicado em todas empresas Globais |
CREDITOGRUPO | CD_EMPRESA, CD_PESSOA, VL_CREDITO, ... | Dados de crédito por grupo. Mesma lógica de replicação |
CREDITOPERIODICO | CD_EMPRESA, CD_PESSOA, DT_INICIAL, DT_FINAL, ... | Limite por período, replica se Global |
CREDITOPERIODICOGRUPO | idem | idem ao anterior, para grupo |
PARTICIPANTELIMITECREDITO | CD_EMPRESA, CD_PESSOA, CD_PARTICIPANTE, CD_EMPRPARTICIPANTE | Participantes do grupo de limite |
CONTAS | CD_EMPRESA, CD_PESSOA, DT_LIQUIDACAO, DT_VENCIMENTO, ST_CONTAS, TP_CONTAS | Usada no cálculo de duplicatas atrasadas |
Opções disponíveis
N - Por Empresa (padrão)
| O que faz | Detalhe |
|---|---|
| Cada empresa possui seu próprio limite de crédito por pessoa | Limites e saldo são isolados por CD_EMPRESA |
| Gravação da TFA002 | Somente grava CREDITO da empresa logada, sem replicar |
VERIFICA_CREDITO / VERIFICA_BLOQUEIO | Mantém filtro CONTAS.CD_EMPRESA = :V_CD_EMPRESA ao contar duplicatas liquidadas atrasadas |
Trigger TRGAI_PESSOA | Ao criar pessoa, não replica registro de CREDITO para outras empresas |
Trigger TRGAIUD_CONTAS | Atualiza CREDITO.DT_REGISTRO filtrando por CD_EMPRESA = NEW.CD_EMPRESA |
| Integração ESTABIL | VIEW_CREDITO_ESTABIL só processa quando empresa tem Global (S), portanto em N não participa da consolidação |
Simulação passo a passo
- No MFA001, aba Opção 1, campo Limite de Crédito =
Por Empresa. - Na TFA002, inclua limite para a pessoa
Joãona empresa1:VL_CREDITO = 5.000,00. - Troque para empresa
2e informe para a mesma pessoaJoãoum limite diferente:VL_CREDITO = 2.000,00. - Ao emitir pedido na empresa
1,VERIFICA_CREDITOconsultaCREDITOsomente da empresa1(limite 5.000). Na empresa2, consulta somente empresa2(limite 2.000). - Duplicatas liquidadas atrasadas são contadas somente da empresa corrente.
Resultado esperado: limites independentes por empresa. O cadastro de CREDITO em uma empresa não replica para as outras.
S - Global
| O que faz | Detalhe |
|---|---|
| O limite de crédito é compartilhado entre as empresas marcadas como Globais | Gravações da TFA002 são replicadas para todas as empresas com PARMFATUR.TP_LIMITECREDITO = 'S' |
| Gravação da TFA002 | Após post do CREDITO/CREDITOGRUPO, faz UPDATE OR INSERT em todas as demais empresas Globais (source/TFA002/UTFA002.pas:709-742, 779-812, UdmTFA002.pas:516-540, 1339-1363) |
VERIFICA_CREDITO | Ao contar duplicatas liquidadas atrasadas, zera V_CD_EMPRESA = NULL → conta em todas as empresas |
VERIFICA_BLOQUEIO | Mesma lógica: IF (V_TP_LIMITECREDITO = 'S') THEN V_CD_EMPRESA = NULL (linha 846) antes do COUNT na CONTAS |
Trigger TRGAI_PESSOA | Ao inserir pessoa na empresa Global, insere CREDITO para todas as empresas Globais com os valores padrão do PARMFATUR |
Trigger TRGAIUD_CONTAS | Atualiza CREDITO.DT_REGISTRO para todas as ocorrências da pessoa (sem filtro de CD_EMPRESA) |
Triggers CREDITOPERIODICO_AI0 / CREDITOPERIODICOGRUPO_AI0 | Quando a DT_REGISTRO = '01.01.2000 00:00:00' (marcação da TFA002), replicam o registro para as demais empresas Globais |
Integração ESTABIL (VIEW_CREDITO_ESTABIL) | Só processa contas de empresas com TP_LIMITECREDITO = 'S' (Global) |
| Interface TFA002 | Label lblCD_COLCSVEMPRESA fica em estilo Bold quando N; quando S, o campo empresa vira read-only e ganha estilo cinza (source/TFA002/UTFA002.pas:351-361) |
Simulação passo a passo
- No MFA001, aba Opção 1, campo Limite de Crédito =
Global, tanto para empresa1quanto empresa2. - Na TFA002, inclua limite para a pessoa
João:VL_CREDITO = 5.000,00na empresa1. - Ao salvar, o código de
btnSalvarClick(UTFA002.pas:709) detectaTP_LIMITECREDITO = 'S'e executaUPDATE OR INSERT INTO CREDITOpara todas as empresas Globais (empresa2também passa a ter limite 5.000,00). - Ao emitir pedido na empresa
2,VERIFICA_CREDITOprocura duplicatas liquidadas atrasadas sem filtrar porCD_EMPRESA(V_CD_EMPRESA = NULL) → soma duplicatas de todas as empresas. - Se uma nova pessoa for inserida na
PESSOA, a triggerTRGAI_PESSOAcria automaticamente registros emCREDITOpara empresa1e empresa2, com os valoresVL_CREDITO,VL_CREDITOACUMeNR_DIASATRASOcopiados doPARMFATURda empresa Global logada.
Resultado esperado: limite único e saldo consolidado entre empresas Globais. Alterações/inclusões propagam-se automaticamente. Empresas com TP_LIMITECREDITO = 'N' ficam fora da consolidação, mesmo coexistindo no mesmo banco.
Tabela Comparativa Resumida
| Aspecto | N - Por Empresa (padrão) | S - Global |
|---|---|---|
| Escopo do limite | Isolado por empresa | Compartilhado entre empresas Globais |
| TFA002 ao salvar | Grava só na empresa corrente | Replica para demais empresas Globais |
Trigger TRGAI_PESSOA | Só insere CREDITO da empresa logada | Insere CREDITO para todas as empresas Globais |
TRGAIUD_CONTAS | UPDATE CREDITO WHERE CD_EMPRESA = ... | UPDATE CREDITO WHERE CD_PESSOA = ... (sem CD_EMPRESA) |
Duplicatas atrasadas na VERIFICA_CREDITO/VERIFICA_BLOQUEIO | Só da empresa corrente | Soma de todas as empresas (CD_EMPRESA = NULL) |
CREDITOPERIODICO_AI0 / CREDITOPERIODICOGRUPO_AI0 | Não replica | Replica para demais empresas Globais |
Integração VIEW_CREDITO_ESTABIL | Não entra na consolidação | Participa |
| UI TFA002 - campo empresa | Editável | Read-only, cinza |
Referências no Código Fonte
Delphi
| Arquivo | Linhas | Função |
|---|---|---|
source/MFA001/UMFA001.dfm | 6032, 6674-6700 | ComboBox cmbTP_LIMITECREDITO com Items.Strings = ('Por Empresa'#9'N', 'Global'#9'S') |
source/MFA001/UdmMFA001.pas | 82, 460 | Declaração tabPARMFATURTP_LIMITECREDITO: TStringField; valor padrão no AfterInsert: := 'N' |
source/MFA001/UMFA001.pas | 381 | Declaração do componente cmbTP_LIMITECREDITO no Form |
source/TFA002/UTFA002.pas | 351, 709, 779, 1152 | Ajuste de UI (label bold); replicação de CREDITO e CREDITOGRUPO entre empresas Globais; filtro por TP_LIMITECREDITO = 'S' na validação de participantes |
source/TFA002/UdmTFA002.pas | 511-540, 686-715, 1334-1363, 1433+ | tabCREDITOBeforePost, tabPERIODOBeforePost, tabCREDITOGRUPOBeforePost, tabPERIODOGRUPOBeforePost - replicam para demais empresas Globais |
source/TFA063/UdmTFA063.pas | 144-170 | tabCREDITOBeforePost - ao mudar crédito periódico com Global, atualiza CREDITO de todas as demais empresas |
source/RCA006/UdmRCA006.dfm | 3133, 3229, 3299 | Query INSERT/UPDATE/SELECT incluindo TP_LIMITECREDITO para sincronizar parâmetros |
source/CPD009/UdmCPD009.dfm | 384, 480, 550 | Query INSERT/UPDATE/SELECT de PARMFATUR incluindo TP_LIMITECREDITO |
SQL (Scripts)
| Arquivo | Linhas | Função |
|---|---|---|
Scripts/VERIFICA_CREDITO.sql | 19, 75-82 | Lê TP_LIMITECREDITO; se 'S', V_CD_EMPRESA = null antes de contar duplicatas atrasadas |
Scripts/VERIFICA_BLOQUEIO.sql | 25, 143-152, 725, 846-849 | Lê TP_LIMITECREDITO junto com demais parâmetros; usa no bloco de participantes (V_ST_PARTICIPANTEGRUPO IS NULL AND V_TP_LIMITECREDITO = 'S') e ao zerar V_CD_EMPRESA para contar duplicatas liquidadas atrasadas |
Scripts/GERA_CREDITO.sql | 14, 26-40 | Lê TP_LIMITECREDITO; se 'S', ignora filtro CD_EMPRESA em CREDITO |
Scripts/VIEW_CREDITO_ESTABIL.sql | 22-26 | Só processa empresa com TP_LIMITECREDITO = 'S' |
Scripts/VIEW_CREDITOPESSOA.sql | 23, 35-41 | Retorna dados de CREDITO da pessoa respeitando o escopo (Global/Empresa) |
Scripts/TRGAI_PESSOA.sql | 7, 17-31, 25 | AFTER INSERT em PESSOA: se Global, insere CREDITO para todas as empresas Globais |
Scripts/TRGAIUD_CONTAS.sql | 9, 87-102 | AFTER INSERT/UPDATE/DELETE em CONTAS: se Global atualiza CREDITO.DT_REGISTRO sem filtro de empresa |
Scripts/CREDITOPERIODICO_AI0.sql | 7, 16-35 | AFTER INSERT em CREDITOPERIODICO: se Global, replica o registro para demais empresas Globais |
Scripts/CREDITOPERIODICOGRUPO_AI0.sql | 7, 16-35 | AFTER INSERT em CREDITOPERIODICOGRUPO: mesma replicação para grupo |