ST_CONTROLETFA002 - Controle de Crédito do Cliente
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 → "Controle de Crédito Cliente [TFA002]" Tabela:
PARMFATUR.ST_CONTROLETFA002Valor padrão:A(Automático)
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Limite de Crédito | TFA002 | Cadastro/manutenção do limite de crédito por pessoa/grupo |
| Parâmetros de Faturamento | MFA001 | Define o modo de controle |
Procedures impactadas
| Procedure / View | Onde é usado | Uso |
|---|---|---|
VIEW_CREDITOPESSOA | Consulta de crédito da pessoa (cliente) | Lê ST_CONTROLETFA002 em PARMFATUR para decidir se calcula o crédito dinamicamente a partir de CONTAS/PEDIDO (modo Automático A / NULL) ou apenas lê o cadastro manual em CREDITO / CREDITOGRUPO (modo Manual M). Esta view é consumida por toda validação de crédito no ERP (pedido, nota, financeiro). |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_CONTROLETFA002 | Define o modo de apuração do crédito ('A' = automático, 'M' = manual) |
CREDITO.VL_CREDITO / VL_CREDITOACUM | Valores de crédito cadastrados manualmente para a pessoa |
CREDITOGRUPO.VL_CREDITO / VL_CREDITOACUM | Valores de crédito cadastrados para o grupo financeiro |
CONTAS.VL_SALDO, DT_VENCIMENTO | Duplicatas utilizadas no cálculo automático de atraso / a vencer |
TIPOCONTA.ST_VALIDACREDITO | Flag que define quais tipos de conta entram no cálculo de crédito |
PEDIDO / ITEMPEDIDO | Origem da média de vendas no modo automático |
PARTICIPANTELIMITECREDITO.CD_PARTICIPANTE | Relaciona pessoas ao grupo financeiro |
Opções disponíveis
A - Automático
| O que faz | Detalhe |
|---|---|
| Origem dos dados de crédito | Calculado em tempo real pela procedure VIEW_CREDITOPESSOA a partir das tabelas CONTAS, PEDIDO e ITEMPEDIDO |
| Duplicatas vencidas | Soma VL_SALDO de CONTAS onde ST_CONTAS IN ('T','P'), TP_CONTAS = 'S' e DT_VENCIMENTO < CURRENT_DATE (apenas tipos com TIPOCONTA.ST_VALIDACREDITO = 'S') |
| Duplicatas a vencer | Mesma lógica para DT_VENCIMENTO >= CURRENT_DATE |
| Média mensal | Calculada a partir dos pedidos ativos (ST_PEDIDO = 'A', TP_PEDIDO = 'S') dividida pelo número de meses |
| Limite (VL_CREDITO) | Lido de CREDITO (pessoa) ou CREDITOGRUPO (se participar de grupo financeiro) |
| Uso principal | Empresas que querem enxergar atraso/dívida sempre atualizados, sem depender de rotina batch |
Simulação passo a passo
- MFA001 → Faturamento → Opção 2 → Controle de Crédito Cliente [TFA002] = "Automático"
- Salve os parâmetros (F6)
- Abra TFA002 (Limite de Crédito) para um cliente que já tem duplicatas em aberto em
CONTAS - O sistema exibe:
NR_DIASATRASOcalculado pela maior diferençaCURRENT_DATE - DT_VENCIMENTOVL_DUPVENC/NR_DUPVENCsomados em tempo realVL_DUPAVENC/NR_DUPAVENCsomados em tempo realVL_DUPMEDIAcalculado sobrePEDIDO + ITEMPEDIDO
- Lance uma nova duplicata manual em CONTAS e reconsulte o cliente → os valores de atraso/a vencer mudam imediatamente
Resultado esperado: Os indicadores de crédito (dias de atraso, duplicatas vencidas e a vencer, média de venda) são sempre recalculados "ao vivo" a partir do movimento real.
M - Manual
| O que faz | Detalhe |
|---|---|
| Origem dos dados de crédito | Lê diretamente de CREDITO (pessoa sem grupo) ou CREDITOGRUPO (pessoa em grupo financeiro) |
| Duplicatas vencidas / a vencer | Lidos dos campos VL_DUPVENC, NR_DUPVENC, VL_DUPAVENC, NR_DUPAVENC gravados no cadastro |
| Dias de atraso | Lido de NR_DIASATRASO gravado (não recalculado) |
| Limite (VL_CREDITO) | Lido de CREDITO / CREDITOGRUPO |
| Uso principal | Empresas que atualizam as estatísticas de crédito via rotina controlada (batch/import) e não querem que o sistema calcule em tempo real |
Simulação passo a passo
- MFA001 → Faturamento → Opção 2 → Controle de Crédito Cliente [TFA002] = "Manual"
- Salve os parâmetros (F6)
- Abra TFA002 para um cliente e grave manualmente:
VL_CREDITO = 10.000,00NR_DIASATRASO = 5VL_DUPVENC = 1.500,00
- Lance uma nova duplicata vencida em CONTAS para esse cliente (por fora do TFA002)
- Reconsulte o cliente em TFA002 → os valores continuam exatamente como gravados (5 dias, R$ 1.500,00), ignorando a nova duplicata
Resultado esperado: O crédito da pessoa depende de ser alimentado/atualizado manualmente (ou por rotina externa). A view nunca recalcula em cima das duplicatas ou pedidos reais.
Regra Técnica Implementada
No corpo de VIEW_CREDITOPESSOA (arquivo Scripts/VIEW_CREDITOPESSOA.sql, linhas 35-38 e 67/199), o controle é lido assim:
SELECT P.TP_LIMITECREDITO, P.ST_CONTROLETFA002
FROM PARMFATUR P
WHERE P.CD_EMPRESA = :I_CD_EMPRESA
INTO :V_TP_LIMITECREDITO, :V_ST_CONTROLETFA002;
...
IF ((V_ST_CONTROLETFA002 IS NULL) OR (V_ST_CONTROLETFA002 = 'A')) THEN
-- [Automático] recalcula atraso, vencidas, a vencer e média a partir de CONTAS/PEDIDO
ELSE
-- [Manual] lê direto de CREDITO / CREDITOGRUPO
Observação:
NULLé tratado como'A'(Automático) por segurança — empresas antigas que nunca configuraram o parâmetro funcionam como se estivessem no modo Automático.
Tabela Comparativa Resumida
| Opção | Descrição | Atraso/Vencidas/Média | Limite (VL_CREDITO) | Depende de rotina manual? |
|---|---|---|---|---|
| A | Automático | Calculado em tempo real (CONTAS + PEDIDO) | CREDITO/CREDITOGRUPO | Não |
| M | Manual | Lido dos campos gravados (não recalcula) | CREDITO/CREDITOGRUPO | Sim |
Referências no Código Fonte
Delphi
source/MFA001/UMFA001.dfm(linha 4798-4824): ComboBoxcmbST_MOSTRACOMISSAO2comDataField = 'ST_CONTROLETFA002',Items.Strings = ('Automático'#9'A', 'Manual'#9'M')source/MFA001/UMFA001.dfm(linha 4034-4047): Labellbl78comCaption = 'Controle de Crédito Cliente [TFA002]'na abapagFatOp2("Opção 2")source/MFA001/UdmMFA001.pas(linha 281): Declaração do campotabPARMFATURST_CONTROLETFA002: TStringFieldsource/MFA001/UdmMFA001.pas(linha 571): Valor padrão'A'atribuído noAfterInsert(Chamado 220790 — Thiago Cousseau, 14/02/2019)source/MFA001/UdmMFA001.dfm(linhas 290, 1963-1965, 2445, 2617, 2874, 3170): SELECT/INSERT/UPDATE doTFDQuerytabPARMFATUR
SQL (Firebird)
Scripts/VIEW_CREDITOPESSOA.sql(linhas 26, 35-38, 67, 199): Procedure/view responsável por toda a lógica condicional. Decide se calcula em tempo real (A/NULL) ou lê do cadastro (M).