Pular para o conteúdo principal

VL_LIMITECREDACUMULADO - Limite de Crédito Acumulado (Alçada do Usuário)

Tela de configuração: ADM012 - Parâmetros do Usuário Localização: Aba Lib. Venda (Alçada) — campo "Pesquisar" Tabela: PARMUSUARIO.VL_LIMITECREDACUMULADO — NUMERIC(15,2) Valor padrão: NULL

Resumo​

Define o teto em R$ do usuário logado para liberação de vendas bloqueadas por crédito acumulado (limite total pendente do cliente). Só é consultado quando o parâmetro TP_MODELOBLOQUEIO (configurado em MFA001 - Parâmetros de Faturamento, aba Parâmetros → Ambos) está em modelo de alçada (A ou L).

Telas impactadas​

TelaContexto
ADM012 / PARMUSUARIOOnde o campo é editado (aba Lib. Venda)
TFA002 / CréditoValida na alteração manual do valor acumulado do cliente
MFA001 / Parâmetros de FaturamentoTP_MODELOBLOQUEIO controla se a aba Lib. Venda aparece

Campos envolvidos​

CampoTabelaDescrição
VL_LIMITECREDACUMULADOPARMUSUARIOAlçada em R$ do usuário para crédito acumulado
TP_MODELOBLOQUEIOPARMFATURModelo de bloqueio (N = Normal, A = Alçada, L = Liberação)
VL_CREDITOACUMCREDITO / VIEW_CREDITOPESSOALimite de crédito acumulado do cliente
NR_DIASATRASOPARMUSUARIOAlçada de dias de atraso do usuário (mesma aba)
PC_MAXDESCONTOPARMUSUARIOAlçada de % desconto do usuário (mesma aba)

Opções disponíveis​

O campo é numérico livre — não possui opções discretas. O comportamento varia conforme o valor preenchido (ou não) e o modelo de bloqueio ativo.

Valor preenchido (> 0) com TP_MODELOBLOQUEIO = A (Alçada)​

O que fazDetalhe
Define teto de alçadaUsuário pode liberar vendas bloqueadas por crédito acumulado até o valor informado
EditávelAceita qualquer valor > 0 (validação no OnValidate)
Exige modelo A ou LSe TP_MODELOBLOQUEIO = N, a aba Lib. Venda é ocultada e o campo é limpo pelo trigger

Simulação passo a passo​

  1. Acesse ADM012 - Parâmetros do Usuário e selecione o usuário desejado.
  2. Certifique-se de que TP_MODELOBLOQUEIO (MFA001) esteja configurado como A — a aba Lib. Venda (Alçada) ficará visível.
  3. Na aba Lib. Venda, localize o campo VL_LIMITECREDACUMULADO e digite 1500,00.
  4. Salve o registro.
  5. Na tela de faturamento (ex.: MPD003), ao faturar um pedido do Cliente Alpha cujo total pendente (R$ 1.800,00) ultrapassa o limite acumulado do cliente (R$ 1.000,00), o sistema bloqueia com tipo T.
  6. Como TP_MODELOBLOQUEIO = A e o usuário logado tem alçada de R$ 1.500,00, o sistema compara: I_VL_TOTAL (1.800) > VL_LIMITECREDACUMULADO (1.500) → ultrapassa a alçada → bloqueio é mantido.
  7. Se a alçada fosse R$ 2.000,00, então 1.800 < 2.000 → não ultrapassa → bloqueio é convertido em alçada (exige usuário com alçada superior).

Resultado esperado: O valor preenchido funciona como teto: vendas cujo excesso ultrapasse esse valor continuam bloqueadas; vendas dentro do teto podem ser liberadas pelo usuário.

Valor NULL (vazio) com TP_MODELOBLOQUEIO = A (Alçada)​

O que fazDetalhe
Sem alçadaUsuário NÃO possui teto de alçada para crédito acumulado
Comportamento fallbackO sistema aplica bloqueio direto (como modelo Normal)

Simulação passo a passo​

  1. Acesse ADM012 e deixe o campo VL_LIMITECREDACUMULADO vazio (NULL) para o usuário.
  2. Salve o registro.
  3. Na tela de faturamento, ao faturar um pedido cujo total pendente ultrapassa o limite acumulado do cliente, o sistema bloqueia diretamente com tipo T — sem conversão para alçada.

Resultado esperado: Sem alçada configurada, o bloqueio por crédito acumulado é sempre direto (não oferece alternativa de liberação pelo próprio usuário).

TP_MODELOBLOQUEIO = N (Normal) — Campo ignorado​

O que fazDetalhe
Aba ocultaA aba Lib. Venda não é exibida na ADM012
Campo zeradoO trigger TRGPARMFATUR_BU limpa automaticamente para NULL

Simulação passo a passo​

  1. Acesse MFA001 - Parâmetros de Faturamento e configure TP_MODELOBLOQUEIO = N.
  2. Ao salvar, o trigger TRGPARMFATUR_BU executa UPDATE PARMUSUARIO SET VL_LIMITECREDACUMULADO = NULL para todos os usuários da empresa.
  3. Na ADM012, a aba Lib. Venda (Alçada) fica invisível — os campos de alçada não são exibidos.

Resultado esperado: Todos os valores de alçada são apagados e a aba desaparece. O bloqueio passa a ser sempre direto.

Exceção / Importante: Ao alternar TP_MODELOBLOQUEIO de N para A/L, os campos de alçada voltam a ser exibidos, mas os valores precisam ser re-cadastrados manualmente, pois foram limpos pelo trigger.

Validação na edição (ADM012)​

  • O evento OnValidate do campo (UdmADM012.pas:634-642) verifica que, se o campo não estiver vazio, o valor deve ser maior que zero. Caso contrário, exibe: "O Vl. Limite Crédito Acumulado deve ser maior que Zero!. Verifique!".

Validação na TFA002 (Crédito)​

  • A rotina validaValorAcumulado (UdmTFA002.pas:836-855) consulta VL_LIMITECREDACUMULADO do usuário logado ao alterar manualmente o crédito acumulado de um cliente. Se o novo valor informado ultrapassar a alçada do usuário, uma exceção é lançada com a mensagem do tipo W-0737, informando o limite máximo permitido.

Exceção / Importante: Essa validação na TFA002 só ocorre quando o usuário está na aba "Pessoa" ou "Grupo" da tela de crédito — protegendo contra alterações manuais acima da alçada.

Lógica no VALIDA_MODELOBLOQUEIOVLLIMITE​

O SQL VALIDA_MODELOBLOQUEIOVLLIMITE consulta PARMUSUARIO.VL_LIMITECREDACUMULADO do usuário logado e aplica a seguinte lógica para crédito acumulado (quando I_ST_BLOQUEIO IN ('T','A','O','B','F','G') e I_VL_CREDITOACUM IS NOT NULL):

ModeloCondição de bloqueioPapel de VL_LIMITECREDACUMULADO
N (Normal)I_VL_TOTAL > I_VL_CREDITOACUM → bloqueio diretoIgnorado
L (Liberação)I_VL_TOTAL > I_VL_CREDITOACUM → bloqueio + marcador de alçadaMarcador L é gerado (código comentado faria comparação com o teto)
A (Alçada)Se VL_LIMITECREDACUMULADO IS NOT NULL e I_VL_TOTAL > VL_LIMITECREDACUMULADO → bloqueio + marcador de alçadaTeto comparado — se I_VL_TOTAL <= VL_LIMITECREDACUMULADO, o bloqueio não é gerado
A (Alçada) com NULLSe VL_LIMITECREDACUMULADO IS NULL → bloqueio diretoSem alçada, comporta-se como Normal

Procedures impactadas​

Rotinas Delphi com referência direta ao campo​

RotinaArquivoDescrição
tabPARMUSUARIOVL_LIMITECREDACUMULADOValidatesource/ADM012/UdmADM012.pasValidação: valor deve ser > 0 se preenchido
TfrmADM013.btnDuplicaUsuarioClicksource/ADM013/UADM013.pasDuplica o campo ao copiar parâmetros de outro usuário
validaValorAcumuladosource/TFA002/UdmTFA002.pasValida alteração manual de crédito acumulado contra a alçada do usuário

Scripts SQL com referência direta ao campo​

Procedure/TriggerArquivoDescrição
TRGPARMFATUR_BUScripts/TRGPARMFATUR_BU.sqlQuando TP_MODELOBLOQUEIO = N, limpa VL_LIMITECREDACUMULADO = NULL
VALIDA_MODELOBLOQUEIOVLLIMITEScripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sqlConsulta o campo como teto de alçada para crédito acumulado