Pular para o conteúdo principal

Parâmetro de Bloqueio de Nota Fiscal

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (label "Bloqueio Nota Fiscal") Tabela: PARMFATUR.ST_BLOQUEIONF Valor padrão: N (Não Bloqueia)

Define qual política de bloqueio de crédito e/ou preço será aplicada ao salvar/confirmar Notas Fiscais. A verificação é executada via procedure VERIFICA_CREDITO e, adicionalmente, por regras locais nos módulos que validam o valor unitário frente à tabela de preço / tabela mínima do vendedor.

Telas impactadas​

MóduloCódigoDescrição
NF SaídaMNF002Emissão de NF de saída (lê o parâmetro via BuscaParametros_MNF002)
NF EntradaMNF013NF de entrada — validação Verifica_CreditoTabela
NF Outros / DevoluçãoMNF014NF devolução / outros tipos
NF Saída SimplificadaMNF008NF de saída simplificada
PDV / Frente de CaixaMNF017Frente de caixa (usa iST_BLOQUEIONF na função Verifica_CreditoTabela)
Geração de NF por OrdemMPD011Gera NF a partir de ordens (unit UdmNFORDEM)
Cotação / ComprasMCO006Cotação (busca o parâmetro junto à PARMFATUR)

Procedures impactadas​

ProcedureArquivoDescrição
VERIFICA_CREDITOScripts/VERIFICA_CREDITO.sqlRecebe o valor de ST_BLOQUEIONF no parâmetro V_ST_BLOQUEIO e aplica as regras de crédito da pessoa, duplicatas em atraso, limite acumulado e duplicatas liquidadas após vencimento.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_BLOQUEIONFConfiguração do tipo de bloqueio aplicado às Notas Fiscais
PESSOA / VIEW_CREDITOPESSOA.VL_CREDITOLimite de crédito da pessoa
VIEW_CREDITOPESSOA.VL_CREDITOACUMLimite de crédito acumulado
VIEW_CREDITOPESSOA.NR_DIASATRASODias de atraso permitidos pela pessoa
VIEW_CREDITOPESSOA.NR_MAIORVENCMaior dia de atraso em aberto para a pessoa
CONTAS.ST_CONTAS, DT_LIQUIDACAO, DT_VENCIMENTOUsados para a regra "Dupl. Liquid. após Vencto"
ITEMNOTA.VL_UNITARIO, VL_PRECOUsados para comparar valor unitário × tabela de preço
PARMTABPRECO / ITEMTABPRECOUsados na regra de Tabela Mínima do Vendedor
NOTA.ST_CONDPAGTOSe a nota é à Vista (V) a verificação é pulada
PARMFATUR.TP_LIMITECREDITOGlobal (S) ignora CD_EMPRESA na contagem de duplicatas liquidadas

Opções disponíveis​

N - Não Bloqueia​

O que fazDetalhe
Executa VERIFICA_CREDITO?Sim, mas a própria procedure sai sem validar (if V_ST_BLOQUEIO <> 'N')
Bloqueia por preço?Não
Bloqueia por crédito/atraso?Não

Simulação passo a passo​

  1. MFA001 → Opção 1 → Bloqueio NF = "Não Bloqueia".
  2. Salve os parâmetros (F6).
  3. Abra a NF de saída (MNF002).
  4. Selecione um cliente com duplicatas em atraso e limite estourado.
  5. Lance itens com valor unitário abaixo da tabela de preço.
  6. Confirme a nota.

Resultado esperado: A nota é confirmada normalmente. Nenhum bloqueio é aplicado. Este é o valor padrão ao inserir um registro novo em PARMFATUR (UdmMFA001.pas:437 → tabPARMFATURST_BLOQUEIONF.AsString := 'N').


D - Duplicatas em Atraso​

O que fazDetalhe
Valida em VERIFICA_CREDITO?Sim, no bloco V_ST_BLOQUEIO in ('D','A','O')
CritérioNR_MAIORVENC > NR_DIASATRASO cadastrado para a pessoa
Bloqueia por crédito acumulado?Não
Bloqueia por preço?Não

Simulação passo a passo​

  1. MFA001 → ST_BLOQUEIONF = "Duplicatas em Atraso".
  2. Em TFA008/crédito, cadastre NR_DIASATRASO = 5 para o cliente X.
  3. Garanta que o cliente X tem uma duplicata vencida há 10 dias.
  4. Em MNF002 gere NF para X e confirme.

Resultado esperado: Mensagem "A Pessoa possui Duplicatas com Atraso acima do Limite." informando os dias da duplicata em atraso e o limite permitido. A nota não é salva.


C - Limite de Crédito​

O que fazDetalhe
Valida em VERIFICA_CREDITO?Sim, no bloco V_ST_BLOQUEIO in ('C','A','O','Q')
CritérioVL_DOCUMENTO > VL_CREDITO da pessoa

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Limite de Crédito".
  2. Cliente X com VL_CREDITO = 1.000,00 em VIEW_CREDITOPESSOA.
  3. Emita NF de R$ 1.500,00 para X.

Resultado esperado: "Ultrapassou o Limite de Crédito da Pessoa. Valor Documento.: 1500,00. Valor do Limite.: 1000,00". Nota não é salva.


T - Limite Crédito Acumulado​

O que fazDetalhe
Valida em VERIFICA_CREDITO?Sim, bloco V_ST_BLOQUEIO in ('T','A','O')
Critério(VL_DUPVENC + VL_DUPAVENC + VL_DOCUMENTO) > VL_CREDITOACUM
Diferença de 'C'Soma o saldo já aberto (dupl. vencidas e a vencer) ao valor do novo documento

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Limite Crédito Acumulado".
  2. Cliente X com VL_CREDITOACUM = 5.000,00 e duplicatas em aberto somando R$ 4.500,00.
  3. Emita NF de R$ 1.000,00 para X.

Resultado esperado: "Ultrapassou o Limite de Crédito Acumulado da Pessoa. Valor Total Pendente.: 5500,00. Valor do Limite Acumulado.: 5000,00".


B - Limite e Dupl. em Atraso​

O que fazDetalhe
Tipo de validaçãoNão é tratado diretamente nos in (...) da procedure VERIFICA_CREDITO
Efeito práticoComo não cai em nenhum in (...) (C, D, T, A, O, L, Q), nenhuma mensagem de bloqueio é disparada pela procedure

Observação: A opção B está cadastrada no ComboBox (UMFA001.dfm:6528) mas a procedure VERIFICA_CREDITO não tem branch para o código 'B'. Verificar comportamento no banco antes de usar em produção.

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Limite e Dupl. em Atraso".
  2. Emita NF para cliente com crédito estourado e duplicatas atrasadas.

Resultado esperado: Nenhuma mensagem é exibida (procedure passa sem cair em nenhum in).


P - Tabela de Preço​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Não — opção 'P' não está em nenhum in (...)
Validação adicionalSim, nos módulos de NF: se existir CD_TABPRECO e VL_UNITARIO < VL_PRECO da tabela, bloqueia
Arquivos que aplicam a regraMNF013/UdmMNF013.pas:1626, MPD011/UdmNFORDEM.pas:2455

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Tabela de Preço".
  2. Cadastre produto Y na tabela com VL_PRECO = 20,00.
  3. Em MNF013 (NF entrada) gere NF lançando produto Y com VL_UNITARIO = 18,00.
  4. Tente salvar.

Resultado esperado: Mensagem "O Valor Unitário do Produto está abaixo da Tabela de Preço. Valor Unitário.: 18,00. Valor Tabela de Preço.: 20,00". Nota não é salva.


V - Tabela Mínima Vendedor​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Não — opção 'V' não está em nenhum in (...)
Validação adicionalSim: compara VL_PRECO do item com o preço mínimo da tabela do vendedor (PARMTABPRECO/ITEMTABPRECO)
ArquivoMNF017/UdmMNF017.pas:1411 (só atua se CD_VENDEDOR <> '')

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Tabela Mínima Vendedor".
  2. Vincule o vendedor V1 a uma tabela de preço mínima onde o produto Y tem VL_PRECO = 50,00.
  3. Em MNF017 (PDV) gere venda com vendedor V1 e produto Y por R$ 40,00.

Resultado esperado: "O Valor Unitário do Produto está abaixo da Tabela Mínima de Preço do Vendedor. Valor Unitário.: 40,00.". Nota não é salva.


M - Preço Mínimo e Máximo​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Não — não há branch 'M' na procedure
Uso práticoValor consta do ComboBox (UMFA001.dfm:6531) porém não há lógica direta de bloqueio por esta opção nos módulos/procedure examinados

Observação: Nenhum bloqueio efetivo foi localizado no grep para o valor 'M'. Pode depender de regra externa (gatilho/triggers) não coberta neste levantamento.


Q - Valor Líquido e Limite Crédito​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Sim — cai no in ('C','A','O','Q') (validação de VL_CREDITO)
SemânticaMesmo comportamento da opção C, só diferindo na etiqueta de uso (valor líquido)

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Valor Líquido e Limite Crédito".
  2. Emita NF com valor acima do VL_CREDITO da pessoa.

Resultado esperado: Mesma mensagem de "Ultrapassou o Limite de Crédito da Pessoa".


L - Dupl. Liquid. após Vencto​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Sim — bloco V_ST_BLOQUEIO in ('L','O')
CritérioContagem em CONTAS onde ST_CONTAS = 'L', TP_CONTAS = 'S' e (DT_LIQUIDACAO - DT_VENCIMENTO) > 10
TP_LIMITECREDITOSe 'S', desconsidera a empresa na contagem (global)

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Dupl. Liquid. após Vencto".
  2. Cliente X tem 2 duplicatas em CONTAS com ST_CONTAS='L' e quitadas 15 dias após o vencimento.
  3. Emita NF para X.

Resultado esperado: "O Cliente possui Duplicatas Liquidadas após 10 dias de Vencimento. Total de Duplicatas.: 2".


Y - Média de Vendas x Desconto​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Não — 'Y' não está nos in (...)
Uso práticoValor consta do ComboBox (UMFA001.dfm:6534), sem regra localizada na procedure nem nos módulos principais; dependente de gatilhos/outros componentes

A - Ambos - Exceto Dupl. Liquid.​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Sim — participa de ('C','A','O','Q'), ('D','A','O') e ('T','A','O')
Em termos simplesAplica todas as validações de crédito, exceto "Dupl. Liquid. após Vencto"
Validações adicionais (módulo)Também dispara a regra de 'P' (Tabela de Preço) e 'V' (Tabela Mínima Vendedor), conforme MNF013/UdmMNF013.pas:1627 e MNF017/UdmMNF017.pas:1412

Simulação passo a passo​

  1. ST_BLOQUEIONF = "Ambos - Exceto Dupl. Liquid.".
  2. Cliente X com crédito estourado → bloqueia por C.
  3. Cliente Y com duplicata em atraso → bloqueia por D.
  4. Cliente Z com valor acima do acumulado → bloqueia por T.
  5. Qualquer cliente com preço abaixo da tabela → bloqueia por P (regra local).

Resultado esperado: Primeira violação encontrada pela procedure é retornada (crédito → atraso → acumulado). Se nenhuma, o módulo aplica a regra de preço.


O - Ambos​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Sim — participa de todos os in (...): C, D, T e L
Diferença de AValida também "Dupl. Liquid. após Vencto"

Simulação passo a passo​

Cenário completo: todos os bloqueios de A + cliente com 1 duplicata quitada mais de 10 dias após o vencimento → bloqueia por L.

Resultado esperado: Qualquer das mensagens das opções C, D, T ou L será exibida, conforme a primeira violação encontrada.


X - Todas as Notas Fiscais​

O que fazDetalhe
VERIFICA_CREDITO retorna bloqueio?Não — 'X' não cai em nenhum in (...) da procedure
Uso práticoValor consta do ComboBox (UMFA001.dfm:6537); provavelmente usado em rotinas de bloqueio global fora do escopo da procedure analisada

Regra Geral​

  • A verificação sempre é pulada quando a nota é à vista (NOTA.ST_CONDPAGTO = 'V') — ver VERIFICA_CREDITO.sql:24.
  • O valor padrão em novo cadastro é 'N' (UdmMFA001.pas:437).
  • O parâmetro é obrigatório: se ficar vazio, o BeforePost do datamodule lança "É Obrigatório Informar o Status do Bloqueio de Notas Fiscais!" (UdmMFA001.pas:919-923).
  • As opções P, V e A também disparam validações locais (não via procedure) que comparam o valor unitário ou o preço do item com a tabela padrão (P/A) ou com a tabela mínima do vendedor (V/A).
  • O parâmetro compartilha o mesmo motor com ST_BLOQUEIOPED (bloqueio de Pedidos) — ambos passam por VERIFICA_CREDITO.

Tabela Comparativa Resumida​

OpçãoDescriçãoCréditoAtrasoAcumuladoDupl. Liquid.Preço x TabelaPreço x Tab. Mín. Vendedor
NNão Bloqueia------
DDuplicatas em Atraso-Sim----
CLimite de CréditoSim-----
TLimite Crédito Acumulado--Sim---
BLimite e Dupl. em Atraso??----
PTabela de Preço----Sim-
VTabela Mínima Vendedor-----Sim
MPreço Mínimo e Máximo------
QValor Líquido e Limite CréditoSim-----
LDupl. Liquid. após Vencto---Sim--
YMédia de Vendas x Desconto------
AAmbos - Exceto Dupl. Liquid.SimSimSim-SimSim
OAmbosSimSimSimSim--
XTodas as NFs------

Legenda: ? = opção não mapeada na procedure VERIFICA_CREDITO analisada.


Referências no Código Fonte​

ArquivoLinhasFunção
source/MFA001/UMFA001.dfm6504-6542ComboBox cmbST_BLOQUEIONF com os 14 valores disponíveis
source/MFA001/UMFA001.pas375Declaração de cmbST_BLOQUEIONF: TwwDBComboBox
source/MFA001/UdmMFA001.pas34Campo tabPARMFATURST_BLOQUEIONF: TStringField
source/MFA001/UdmMFA001.pas437Valor padrão 'N' em AfterInsert
source/MFA001/UdmMFA001.pas919-923Validação obrigatória em BeforePost
source/MFA001/UdmMFA001.dfm670-675, 2341, 2486, 2701, 2957Definição/DML do campo no dataset
source/MNF002/UdmMNF002.pas10491BuscaParametros_MNF002 inclui ST_BLOQUEIONF na leitura de PARMFATUR
source/MNF008/UdmMNF008.pas475, 651, 667, 756Armazena iST_BLOQUEIONF a partir de PARMFATUR
source/MNF013/UdmMNF013.pas534, 698, 712, 1619, 1626-1627Usa o parâmetro em VERIFICA_CREDITO e regra de preço 'P'/'A'
source/MNF014/UdmMNF014.pas268, 322, 335Armazena iST_BLOQUEIONF
source/MNF017/UdmMNF017.pas276, 1378, 1411-1412Usa o parâmetro no Verifica_CreditoTabela e na regra 'V'/'A'
source/MNF017/UMNF017.pas161, 186Leitura inicial do parâmetro em PARMFATUR
source/MPD011/UdmNFORDEM.pas2448, 2455-2456, 2488Usa parmfatur.values['ST_BLOQUEIONF'] em VERIFICA_CREDITO e regra de preço
source/MCO006/UdmMCO006.pas2100Lê P.ST_BLOQUEIONF de PARMFATUR
source/CPD009/UdmCPD009.dfm300, 363, 447, 531DML da cópia/ajuste de parâmetros (SELECT/INSERT/UPDATE)
Scripts/VERIFICA_CREDITO.sql7Parâmetro V_ST_BLOQUEIO
Scripts/VERIFICA_CREDITO.sql24Short-circuit V_ST_BLOQUEIO <> 'N'
Scripts/VERIFICA_CREDITO.sql38-46Branch ('C','A','O','Q') — Limite de Crédito
Scripts/VERIFICA_CREDITO.sql49-57Branch ('D','A','O') — Duplicatas em Atraso
Scripts/VERIFICA_CREDITO.sql60-69Branch ('T','A','O') — Limite Acumulado
Scripts/VERIFICA_CREDITO.sql72-99Branch ('L','O') — Dupl. Liquid. após Vencto