Pular para o conteúdo principal

Parâmetro de Validação de Bloqueio na Nota quando o Pedido já foi Liberado

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (combo cmbST_BLOQNOTAPEDJABLOQ - UMFA001.dfm linha 7304) Caption: "Valida Bloq. Nota com Pedido já Liberado" Tabela: PARMFATUR.ST_BLOQNOTAPEDJABLOQ Valor padrão: S (Sim - reavaliar bloqueios na nota) - definido em UdmMFA001.pas linha 530 (AfterInsert)

Controla se, ao gerar a Nota Fiscal a partir de um Pedido que já passou pelas regras de bloqueio (e eventualmente foi liberado por autorizador), o sistema deve reavaliar todas as regras de bloqueio (crédito, duplicatas em atraso, preço mínimo, desconto máximo, etc.) na NF, ou confiar na análise já feita no pedido e pular essas validações.

Tecnicamente, este parâmetro decide o valor da flag iPedidoBloqueado que é enviada como 6º parâmetro (I_ST_PEDIDO) para a procedure VERIFICA_BLOQUEIO. Quando I_ST_PEDIDO = 'S', a procedure ignora a maioria dos blocos IF ( I_ST_PEDIDO = 'N' AND ... ) dentro dela, evitando duplicação de análise sobre o mesmo negócio.

Telas impactadas​

MóduloCódigoDescrição
Parâmetros FaturamentoMFA001Tela de configuração (combo principal, campo persistente e CRUD SQL)
Nota Fiscal SaídaMNF002Faturamento de NF a partir de pedido: lê ST_BLOQNOTAPEDJABLOQ em UMNF002.pas linhas 2365 e 2844 e usa iPedidoBloqueado em VERIFICA_BLOQUEIO (linha 3655)
Conhecimento de Transporte (CT-e)MNF008Lê ST_BLOQNOTAPEDJABLOQ no SELECT da PARMFATUR em UdmMNF008.pas linha 769
NF Ordem (Pedidos)MPD011Leitura em UdmMPD011.pas linha 1582; uso em UdmNFORDEM.pas linhas 755-758 e UNFORDEM.pas linhas 776, 787
NF Ordem (Recapadora)MRC020Uso em UdmMRC020NFORDEM.pas linhas 1174-1177 e UMRC020NFORDEM.pas linha 915
NF Pré-Emitida (Coleta)MCO006Leitura no SELECT da PARMFATUR em UdmMCO006.pas linha 2113

Procedures impactadas​

ProcedureArquivoDescrição
VERIFICA_BLOQUEIOScripts/VERIFICA_BLOQUEIO.sqlProcedure central que decide se a NF/pedido deve ser bloqueado. O 6º parâmetro I_ST_PEDIDO recebe o valor de iPedidoBloqueado calculado a partir de ST_BLOQNOTAPEDJABLOQ. Quando I_ST_PEDIDO='S', a procedure pula as validações de crédito (linha 818), desconto máximo por pessoa (linha 964), desconto por usuário (linha 979), desconto por subgrupo (linha 992), preço mínimo/desconto do produto (linhas 1019, 1052, 1065, 1078), tabela do vendedor (linha 1111), desconto por faixa de média (linha 1140), preço mínimo/máximo (linha 1173), desconto máximo da condição de pagamento (linha 1222) e valor mínimo do pedido (linha 1281).

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_BLOQNOTAPEDJABLOQS = sempre revalidar bloqueios na nota; N = não revalidar se o pedido já estava bloqueado/liberado
PEDIDO.DS_BLOQUEIOLido via tabPEDIDODS_BLOQUEIO / tabNFORDEM.DS_BLOQUEIO — se contiver texto, o pedido já passou por análise de bloqueio; combinado com ST_BLOQNOTAPEDJABLOQ='N' ativa o "pular validação"
iPedidoBloqueado (variável Delphi)Flag transportada para VERIFICA_BLOQUEIO no 6º parâmetro (I_ST_PEDIDO). Inicializada em 'N' e só sobe para 'S' quando o pedido tem bloqueio registrado E ST_BLOQNOTAPEDJABLOQ='N'
VERIFICA_BLOQUEIO.I_ST_PEDIDO6º parâmetro da procedure que recebe iPedidoBloqueado; seu valor liga/desliga blocos inteiros de validação

Opções disponíveis​

S - Sim (reavaliar bloqueios na nota - padrão)​

O que fazDetalhe
iPedidoBloqueadoPermanece em 'N' (valor inicial)
VERIFICA_BLOQUEIO.I_ST_PEDIDORecebe 'N' → procedure executa todas as validações (crédito, duplicatas, desconto máximo, preço mínimo, tabela de preço, vendedor, faixa de média, valor mínimo do pedido, condição de pagamento)
Pedidos já liberados manualmenteMesmo que tenham DS_BLOQUEIO preenchido, a NF volta a aplicar todas as regras — podendo bloquear a nota novamente
Uso recomendadoControle fiscal rigoroso: validações precisam ser sempre atuais (ex.: condições de crédito mudam entre pedido e faturamento)

Simulação passo a passo​

  1. MFA001 → "Valida Bloq. Nota com Pedido já Liberado" = Sim
  2. Salve os parâmetros (F6)
  3. Em MPD002 cadastre um Pedido que excede o limite de crédito do cliente → campo PEDIDO.DS_BLOQUEIO recebe a descrição do bloqueio
  4. Libere o pedido via autorizador (o texto em DS_BLOQUEIO permanece como histórico, mas o pedido fica ST_BLOQUEIO <> 'S')
  5. Em MNF002 fature este pedido
  6. Durante a geração da NF, o código executa: if ((Trim(VProduto[K].Ds_Bloqueio) <> '') and (ParmFatur.Values['ST_BLOQNOTAPEDJABLOQ'] = 'N')) → falso (parâmetro é 'S'), então iPedidoBloqueado fica 'N'
  7. Ao chamar VERIFICA_BLOQUEIO(..., 'N', 'N'), a procedure percorre novamente todos os blocos de validação

Resultado esperado: Se o cliente continuar acima do limite de crédito, a NF também é bloqueada e exige nova liberação. O valor de DS_BLOQUEIO pode ser preenchido com novo motivo, exigindo autorizador novamente (via ST_LOGINBLOQUEIO em MNF002 linha 3666).


N - Não (confiar na análise do pedido)​

O que fazDetalhe
Quando PEDIDO.DS_BLOQUEIO tem textoiPedidoBloqueado é setado para 'S' (UMNF002.pas:2366, UMNF002.pas:2845, UdmNFORDEM.pas:756, UdmMRC020NFORDEM.pas:1175)
VERIFICA_BLOQUEIO.I_ST_PEDIDORecebe 'S' → procedure pula 12+ blocos de validação (IF (I_ST_PEDIDO = 'N' ...)): crédito/limite, desconto máximo (pessoa/usuário/subgrupo), preço mínimo/máximo do produto, tabela do vendedor, desconto por faixa de média, condição de pagamento, valor mínimo do pedido
Fluxo adicional em MPD011UNFORDEM.pas linha 776: if (dmNFORDEM.iPedidoBloqueado = 'N') decide se chama Verifica_CreditoTabela antes do VERIFICA_BLOQUEIO — quando iPedidoBloqueado='S', a verificação de crédito também é pulada
Uso recomendadoPedido passou por autorizador e foi liberado conscientemente — não faz sentido reaplicar as mesmas regras no momento da NF, evitando pedir autorização duas vezes para o mesmo negócio

Simulação passo a passo​

  1. MFA001 → "Valida Bloq. Nota com Pedido já Liberado" = Não
  2. Salve os parâmetros (F6)
  3. Em MPD002 cadastre um Pedido com desconto acima do máximo permitido → DS_BLOQUEIO recebe "Desconto acima do permitido..." e TP_BLOQUEIO preenchido
  4. Libere o pedido via autorizador em MNF017 (o campo DS_BLOQUEIO permanece preenchido como histórico do bloqueio já tratado)
  5. Em MNF002 fature este pedido
  6. Durante a geração da NF, o código executa: if ((Trim(VProduto[K].Ds_Bloqueio) <> '') and (ParmFatur.Values['ST_BLOQNOTAPEDJABLOQ'] = 'N')) → verdadeiro → iPedidoBloqueado := 'S'
  7. Ao chamar VERIFICA_BLOQUEIO(..., 'N', 'S'), a procedure retorna sem reavaliar as regras de desconto/crédito; apenas as validações que não têm a condição I_ST_PEDIDO='N' permanecem ativas (ex.: VERIFICA_BLOQUEIOSUBGRUPO, bloqueios administrativos independentes)

Resultado esperado: A NF não pergunta autorizador novamente pelo mesmo motivo já liberado no pedido. O usuário salva a nota sem redundância de aprovação.


Interação com outros parâmetros​

  • ST_PEDVENDA: define como o pedido é integrado à NF (bruto, líquido por imposto, etc.) — ST_BLOQNOTAPEDJABLOQ opera sobre o fluxo iniciado por ST_PEDVENDA <> 'N', ou seja, só tem efeito quando há integração Pedido → NF. Se ST_PEDVENDA='N', não há pedido de origem para herdar/reavaliar bloqueio. Veja ST_PEDVENDA.
  • ST_BLOQUEIOPED: define quais regras de bloqueio aplicar no pedido (C, V, X, Y, A, F, etc.). ST_BLOQNOTAPEDJABLOQ age no momento seguinte: decide se essas mesmas regras voltam a rodar quando a NF é gerada. Veja ST_BLOQUEIOPED.
  • ST_LOGINBLOQUEIO: quando a NF acaba sendo bloqueada (porque ST_BLOQNOTAPEDJABLOQ='S' reexecutou as regras), ST_LOGINBLOQUEIO='S' força abertura da tela TfrmAUTORIZACAO em MNF002 linha 3666, exigindo login de autorizador para continuar.
  • ST_ALTERAPEDIDOBLOQ e ST_SEPARABLOQUEIOPED: também afetam o fluxo de bloqueio mas operam no pedido (não interagem diretamente aqui).

Tabela Comparativa Resumida​

OpçãoDescriçãoiPedidoBloqueado enviadoVERIFICA_BLOQUEIO revalida regras na NF?Pedido liberado exige nova autorização na NF?
SSim (reavaliar) — padrão'N'Sim — executa todos os blocos IF (I_ST_PEDIDO='N')Sim, se as condições ainda indicarem bloqueio
NNão (confiar no pedido)'S' (quando DS_BLOQUEIO preenchido)Não — pula os blocos de crédito/desconto/preço/tabelaNão — aproveita a liberação já feita no pedido

Referências no Código Fonte​

ArquivoLinhasFunção
source/MFA001/UMFA001.dfm6355-6369, 7304-7330Label "Valida Bloq. Nota com Pedido já Liberado" e TwwDBComboBox cmbST_BLOQNOTAPEDJABLOQ com Items.Strings = ('Sim'#9'S' / 'Não'#9'N')
source/MFA001/UdmMFA001.pas227, 530Declaração do campo persistente e default 'S' no AfterInsert
source/MFA001/UdmMFA001.dfm242, 1654-1659, 2414, 2584, 2822, 3122Campo no SELECT, TStringField, INSERT INTO PARMFATUR, UPDATE PARMFATUR
source/MFA001/UMFA001.pas405Declaração do ComboBox (cmbST_BLOQNOTAPEDJABLOQ: TwwDBComboBox)
source/MNF002/UMNF002.pas2364-2366Bloco que seta dmMNF002.iPedidoBloqueado := 'S' em CarregaPedido (array) quando Ds_Bloqueio preenchido e ST_BLOQNOTAPEDJABLOQ='N'
source/MNF002/UMNF002.pas2843-2845Mesmo bloco em outro caminho de integração (leitura via tabPEDIDODS_BLOQUEIO)
source/MNF002/UMNF002.pas3647-3655Chamada de VERIFICA_BLOQUEIO passando iPedidoBloqueado no 6º parâmetro
source/MNF002/UdmMNF002.pas833, 3637Declaração e inicialização iPedidoBloqueado := 'N'
source/MNF002/UdmMNF002.pas10504SELECT ST_BLOQNOTAPEDJABLOQ da PARMFATUR
source/MNF008/UdmMNF008.pas769SELECT ST_BLOQNOTAPEDJABLOQ da PARMFATUR (CT-e)
source/MPD011/UdmMPD011.pas1582SELECT ST_BLOQNOTAPEDJABLOQ (ordem de carregamento)
source/MPD011/UdmNFORDEM.pas331, 754-758Declaração de iPedidoBloqueado e decisão 'S'/'N' com base em ST_BLOQNOTAPEDJABLOQ e NFORDEM.DS_BLOQUEIO
source/MPD011/UdmNFORDEM.pas2574Inicialização iPedidoBloqueado := 'N'
source/MPD011/UNFORDEM.pas776, 787Skip de Verifica_CreditoTabela quando iPedidoBloqueado<>'N'; passagem no 6º parâmetro de VERIFICA_BLOQUEIO
source/MRC020/UdmMRC020NFORDEM.pas440, 1173-1177, 2959Declaração, decisão e reinicialização de iPedidoBloqueado
source/MRC020/UMRC020NFORDEM.pas915Chamada de VERIFICA_BLOQUEIO com iPedidoBloqueado
source/MCO006/UdmMCO006.pas2113SELECT ST_BLOQNOTAPEDJABLOQ da PARMFATUR (pré-emissão)
Scripts/VERIFICA_BLOQUEIO.sql96º parâmetro I_ST_PEDIDO varchar(1) — recebe o valor de iPedidoBloqueado
Scripts/VERIFICA_BLOQUEIO.sql177, 818, 964, 979, 992, 1019, 1052, 1065, 1078, 1111, 1140, 1173, 1222, 1281Blocos condicionais IF (I_ST_PEDIDO = 'N' ...) que são pulados quando o pedido já estava bloqueado e ST_BLOQNOTAPEDJABLOQ='N'