Parâmetro de Bloqueio de Pedidos / Ordens de Serviço
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label "Bloqueio Pedido", combo
cmbST_BLOQUEIOPED- UMFA001.dfm linha 8261) Tabela:PARMFATUR.ST_BLOQUEIOPEDValor padrão:N(Não Bloqueia) - definido emUdmMFA001.paslinha 438 (AfterInsert) Obrigatório no BeforePost: sim - valida emUdmMFA001.paslinha 925 (mensagem "É Obrigatório Informar o Status do Bloqueio de Pedidos!")
Controla quando e por que motivo um Pedido de Venda, Pedido de Compra, Orçamento ou Ordem de Serviço será bloqueado automaticamente. O valor escolhido define quais regras (limite de crédito, duplicatas em atraso, preço mínimo da tabela, etc.) serão aplicadas pela procedure VERIFICA_BLOQUEIO.
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Parâmetros Faturamento | MFA001 | Tela de configuração (combo principal) |
| Pedido de Venda | MPD002 | Leitura em UdmMPD002.pas linhas 1363, 1372, 1654, 1937, 2073, 2119, 5737; UMPD002.pas linhas 3818, 3829, 6813 |
| Pedido de Venda (Simplificado) | MPD005 | UdmMPD005.pas linhas 244, 374, 392 |
| Pedido Outro Tipo | MPD017 | UdmMPD017.pas linhas 148, 211, 226 |
| Orçamento | MPD018 | UdmMPD018.pas linhas 245, 286, 301, 842 |
| Pedido Mobile | MPD020 | UdmMPD020.pas linhas 237, 318, 346 |
| Painel/Roteirização Pedidos | MPD081 | UdmMPD081.pas linha 90 (campo persistente); UMPD081.pas linhas 552, 593, 618, 656, 878, 889 |
| Pedido Compra | MPD092 | UdmMPD092.pas linhas 235, 277, 290, 810 |
| Validação de Pedidos (lote) | MPD010 | UMPD010.pas linhas 1400, 1410, 1415, 1420, 1499, 1509, 1514, 1519 |
| NF Saída/Entrada | MNF017 | UdmMNF017.pas linha 276; UMNF017.pas linhas 162, 188, 1378-1380 |
| Ordem de Serviço | MOF001 | UdmMOF001.pas linhas 439, 723, 742; UMOF001.pas linhas 3032, 3043 |
| Ordem de Serviço (Outra) | MOF002 | UdmMOF002.pas linhas 191, 295, 312 |
| Ordem de Serviço (Outra) | MOF006 | UdmMOF006.pas linhas 233, 296, 312 |
| OS com Pagamento | MOF008 | UMOF008.pas linhas 804, 815 |
| Recap - Armazenamento | MRC025 | UMRC025.pas linha 2141 |
| Recap - Agenda | MRC026 | UMRC026.pas linha 1362 |
| Recap - Pedido Pneu | MRC040 | UdmMRC040.pas linha 80 (campo persistente); UdmMRC040.dfm linhas 77, 272 |
| Recap - Liberação | MRC001 | UformMRC001.pas linha 81 |
| Histórico Pedido | jCommon/HistoricoPedido | UdmHistoricoPedido.pas linha 143 |
Procedures impactadas
Procedures SQL que consomem PARMFATUR.ST_BLOQUEIOPED
| Procedure | Arquivo | Descrição |
|---|---|---|
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql | Procedure central de validação de bloqueio. Lê ST_BLOQUEIOPED na linha 143-152 e atribui a V_ST_BLOQUEIO para documentos P (Pedido), R (Recap) e O (OS com bloqueio pelo pedido) - linhas 173, 277, 350-355 |
GERA_PEDIDOCOTACAOPECA | Scripts/GERA_PEDIDOCOTACAOPECA.sql | Ao gerar pedido a partir de cotação, se PARMCOMPRA.ST_BLOQUEIOPED = 'S' + módulo = MCO008, grava pedido com ST_PEDIDO='B', TP_BLOQUEIO='C' (linhas 47, 67, 72, 382-393). Atenção: consulta coluna homônima da PARMCOMPRA (configurada em MFA004), não de PARMFATUR. |
VALIDA_MODELOBLOQUEIOVLLIMITE | Scripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sql | Chamada pela VERIFICA_BLOQUEIO com o valor de V_ST_BLOQUEIO. Dispara validação de limite de crédito se o código estiver em ('C','A','O','Q','B','F','G') (linha 40) e de limite acumulado se em ('T','A','O','B','F','G') (linha 108) |
VALIDA_MODELOBLOQUEIODIASATRASO | Scripts/VALIDA_MODELOBLOQUEIODIASATRASO.sql | Valida dias de atraso se V_ST_BLOQUEIO estiver em ('D','A','O','Q','B','Y','E','G') (linha 37) |
VERIFICA_BLOQUEIOSUBGRUPO | referenciada em VERIFICA_BLOQUEIO.sql linha 177 | Valida bloqueios por subgrupo quando ST_SEPARABLOQUEIOPED = 'S' |
RETORNA_MOTIVOBLOQUEIO | referenciada em VERIFICA_BLOQUEIO.sql linha 674 | Monta descrição amigável dos motivos do bloqueio |
Campos/Panels de UI relacionados em outras telas
MFA001.cmbST_BLOQUEIOPED- combo principal (DataFieldST_BLOQUEIOPEDdaPARMFATUR)MFA004.cmbST_BLOQUEIOPED- combo homônimo mas distinto vinculado aPARMCOMPRA.ST_BLOQUEIOPED(valores S/N - "Bloqueia Pedidos de Cotação [MCO008]" -UframeMFA004.dfmlinhas 203-204, 584-594)
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_BLOQUEIOPED | PARMFATUR | O parâmetro em si (DOM_CHAR1) |
ST_BLOQUEIONF | PARMFATUR | Parâmetro equivalente para Notas Fiscais - quando I_TP_DOCTO='N' (nota), a VERIFICA_BLOQUEIO usa este em vez de ST_BLOQUEIOPED |
ST_SEPARABLOQUEIOPED | PARMFATUR | Se S, separa subgrupos e grava PEDIDO.TP_BLOQUEIO='F' para bloqueio por crédito em venda bloqueada (VERIFICA_BLOQUEIO linhas 551-556) |
TP_MODELOBLOQUEIO | PARMFATUR | Se diferente de N, combina com PARMUSUARIO.PC_MAXDESCONTO para alçada de liberação |
TP_BLOQSUBGRUPO | PARMFATUR | Modo de bloqueio por subgrupo |
PC_DESCONTOPED | PARMFATUR | Desconto máximo aplicado quando o parâmetro aciona validação de desconto |
PC_MARGEMSEGURANCA | PARMFATUR | Margem de segurança sobre o custo |
CD_TABCOMPRA | PARMFATUR | Tabela de compra usada para checar margem |
VL_MINIMOPEDIDO | PARMFATUR | Valor mínimo do pedido |
PEDIDO.ST_PEDIDO / PEDIDO.TP_BLOQUEIO / PEDIDO.DS_BLOQUEIO | PEDIDO | Campos gravados quando o pedido é bloqueado |
ORDEMSERVICO.ST_ORDEMSERVICO | ORDEMSERVICO | Marcado como B ao bloquear OS por análise de crédito |
Opções disponíveis
N - Não Bloqueia
| O que faz | Detalhe |
|---|---|
| Aplica alguma regra de bloqueio? | Não |
| Permite validar cupom de terceiro, cond. de pagamento, forma de pagamento? | Sim (essas validações são independentes de V_ST_BLOQUEIO) |
| Comportamento do MPD010 | Lote "Validar Pedidos" ignora o pedido (if iST_BLOQUEIOPED <> 'N' - linhas 1420 e 1519 de UMPD010.pas) |
| É o valor padrão ao inserir novo registro? | Sim (UdmMFA001.pas linha 438) |
Simulação passo a passo
- MFA001 → Parâmetros → Ambos → Opção 1 → ST_BLOQUEIOPED = "Não Bloqueia"
- Salve (F6)
- Lance um Pedido de Venda (MPD002) para um cliente inadimplente, com preço abaixo da tabela e duplicatas vencidas
- Salve o pedido → salva normalmente sem bloqueio de crédito/preço
- Na MPD010, use "Validar Pedidos" → os pedidos não são revalidados (bloco protegido por
if iST_BLOQUEIOPED <> 'N')
Resultado esperado: o fluxo de crédito não é disparado. Apenas validações básicas (condição/forma de pagamento permitida para a pessoa, cupom de terceiro) continuam funcionando.
D - Duplicatas em Atraso
| O que faz | Detalhe |
|---|---|
| Valida | Somente dias de atraso e maior vencimento do cliente (VALIDA_MODELOBLOQUEIODIASATRASO - I_ST_BLOQUEIO IN ('D','A','O','Q','B','Y','E','G')) |
| Bloqueia por limite de crédito? | Não |
| Bloqueia por preço da tabela? | Não |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Duplicatas em Atraso"
- Cadastre cliente com duplicatas em aberto há mais dias do que o
CREDITO.NR_DIASATRASOpermite - Abra Pedido de Venda (MPD002) para esse cliente
- Salve → pedido é bloqueado com motivo "dias de atraso"
- Para um cliente dentro do limite de dias → salva normal
Resultado esperado: só bloqueia quando o cliente tem duplicatas vencidas há mais dias do que o permitido no cadastro de crédito.
C - Limite de Crédito
| O que faz | Detalhe |
|---|---|
| Valida | Limite de crédito simples (VALIDA_MODELOBLOQUEIOVLLIMITE linha 40: I_ST_BLOQUEIO IN ('C','A','O','Q','B','F','G')) |
| Considera | CREDITO.VL_CREDITO do cliente contra valor_pedido + duplicatas em aberto |
| Bloqueia por duplicatas em atraso? | Não |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Limite de Crédito"
- Cadastre crédito do cliente (TFA001 → aba Crédito) com
VL_CREDITO = 1.000,00 - Abra Pedido de Venda de R$ 1.500,00 para este cliente
- Salve → pedido é bloqueado: limite de crédito ultrapassado
- Para pedido de R$ 500,00 → salva normal
Resultado esperado: bloqueia se (duplicatas em aberto + valor do pedido atual) exceder o limite de crédito. Ignora atrasos.
T - Limite Crédito Acumulado
| O que faz | Detalhe |
|---|---|
| Valida | Limite acumulado (VALIDA_MODELOBLOQUEIOVLLIMITE linha 108: I_ST_BLOQUEIO IN ('T','A','O','B','F','G')) |
| Considera | CREDITO.VL_CREDITOACUM |
| Uso típico | Controle de crédito por acumulado histórico, separado do limite corrente |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Limite Crédito Acumlado"
- Cliente com
CREDITO.VL_CREDITOACUM = 5.000,00já atingido - Emita pedido que, somado aos acumulados, ultrapasse o valor
- Salve → pedido bloqueado por limite acumulado
Resultado esperado: bloqueia quando o consumo acumulado + pedido atual extrapola VL_CREDITOACUM.
B - Limite e Duplicatas em Atraso
| O que faz | Detalhe |
|---|---|
| Valida | Limite de crédito + Dias de atraso + Limite acumulado (aparece nos três IN (...) das procedures) |
| Combinação | Agrega as validações de C, D e T |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Limite e Dupl. em Atraso"
- Cliente com limite de R$ 1.000,00 e uma duplicata em atraso
- Faça pedido de R$ 500,00 → bloqueia por atraso
- Quite a duplicata e faça pedido de R$ 1.500,00 → bloqueia por limite
Resultado esperado: bloqueia em qualquer uma das condições (limite estourado OU duplicata em atraso).
P - Tabela de Preço
| O que faz | Detalhe |
|---|---|
| Valida | Valor unitário vs preço da tabela (VERIFICA_BLOQUEIO linha 1052-1062: V_ST_BLOQUEIO IN ('P','O','A')) |
Bloqueio V_TP_BLOQUEIO='P' | Quando V_VL_UNITARIO < V_VL_PRECO da tabela |
| Valida também | Validade da tabela vs data de vencimento (linha 1065-1074, bloqueio Z) |
| Bloqueia por crédito? | Não |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Tabela de Preço"
- Produto X com preço R$ 50,00 na tabela
- Lance pedido com produto X a R$ 40,00
- Salve → bloqueado: "O Valor Unitário está abaixo da Tabela de Preço"
- Lance a R$ 50,00 ou mais → salva normal
Resultado esperado: só permite vender pelo preço da tabela ou acima. Não olha crédito.
V - Tabela Mínima Vendedor
| O que faz | Detalhe |
|---|---|
| Valida | Preço unitário contra tabela mínima cadastrada para o VENDEDOR (VERIFICA_BLOQUEIO linha 1111-1137, V_ST_BLOQUEIO IN ('V','O','A')) |
| Fonte do preço | PARMTABPRECO + RETORNA_PRECOITEM filtrando pelo CD_VENDEDOR do pedido |
Bloqueio V_TP_BLOQUEIO='V' | Quando valor unitário < valor tabela do vendedor |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Tabela Mínima Vendedor"
- Cadastre tabela mínima para o vendedor (PARMTABPRECO)
- Produto X, tabela do vendedor = R$ 80,00
- Lance pedido com esse vendedor e produto X a R$ 70,00
- Salve → bloqueado: "Valor Unitário abaixo da Tabela Mínima do Vendedor"
Resultado esperado: cada vendedor tem um piso próprio. Impede que um vendedor venda abaixo do piso individual mesmo que a tabela padrão permita.
M - Preço Mínimo e Máximo
| O que faz | Detalhe |
|---|---|
| Valida | V_VL_UNITARIO contra V_VL_MINIMO e V_VL_MAXIMO calculados a partir da tabela + PC_DESCONTOMAXIMOPRODUTO e PC_ACRESCIMOMAXIMOPRODUTO (VERIFICA_BLOQUEIO linhas 1173-1219, V_ST_BLOQUEIO IN ('M','O','A','F','G')) |
Bloqueio V_TP_BLOQUEIO='M' | Quando abaixo do mínimo ou acima do máximo |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Preço Mínimo e Máximo"
- Item com preço tabela R$ 100,00, desconto máx produto = 10%, acréscimo máx = 20%
- Lance a R$ 89,00 → bloqueado: "Valor Unitário abaixo do Preço Mínimo"
- Lance a R$ 125,00 → bloqueado: "Valor Unitário acima do Preço Máximo"
- Lance a R$ 95,00 → salva normal
Resultado esperado: cria uma faixa de preço aceitável (piso e teto) baseada no desconto/acréscimo máximo cadastrado por produto.
Q - Valor Líquido e Limite Crédito
| O que faz | Detalhe |
|---|---|
| Valida | Limite de crédito + dias atraso + desconto do valor líquido (V_ST_BLOQUEIO IN ('Q','A','O') nas linhas 1019 e 1041-1048) |
Bloqueio V_TP_BLOQUEIO='Q' | Valor líquido do item abaixo do permitido |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Valor Líquido e Limite Crédito"
- Cliente com limite R$ 1.000,00
- Item com desconto máx 10%, vendido com 20% de desconto
- Salve → bloqueado: "Valor Líquido abaixo do Permitido"
- Se o valor líquido ok mas exceder limite → bloqueia por crédito
Resultado esperado: combina regra de crédito com regra de valor líquido mínimo do item.
L - Dupl. Liquid. após Vencto
| O que faz | Detalhe |
|---|---|
| Valida | Duplicatas liquidadas com mais de 10 dias de atraso (VERIFICA_BLOQUEIO linhas 843-866, V_ST_BLOQUEIO IN ('L','O')) |
| Query | COUNT(*) FROM CONTAS WHERE ST_CONTAS='L' AND (DT_LIQUIDACAO - DT_VENCIMENTO) > 10 |
Bloqueio V_TP_BLOQUEIO='L' | Existem duplicatas históricas pagas com atraso > 10 dias |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Dupl. Liquid. após Vencto"
- Cliente tem duplicata paga 15 dias após o vencimento
- Lance novo pedido → bloqueado: "Duplicatas Liquidadas após 10 dias de Vencimento. Total: N"
- Cliente sem histórico ruim → salva normal
Resultado esperado: olha o histórico de pagamento do cliente. Bloqueia mesmo que o cliente esteja em dia hoje, se pagou anteriormente com atraso superior a 10 dias.
Y - Média de Vendas x Desconto
| O que faz | Detalhe |
|---|---|
| Valida | Desconto concedido vs tabela de desconto por faixa de faturamento médio (PARMDESCONTO) (VERIFICA_BLOQUEIO linhas 1140-1170, V_ST_BLOQUEIO IN ('A','O','Y')) |
Bloqueio V_TP_BLOQUEIO='Y' | Desconto acima da faixa permitida pela média de compras do cliente |
| Também valida | Dias de atraso (está no conjunto D) |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Média de Vendas x Desconto"
- Cadastre faixas em
PARMDESCONTO(ex: faturamento médio R$ 0-1000 → 5%, R$ 1000-5000 → 10%) - Cliente com média R$ 800 tenta pedido com 8% de desconto
- Salve → bloqueado: "Percentual de Desconto acima da Faixa permitida pelo Faturamento Médio"
Resultado esperado: cliente só consegue o desconto condizente com seu histórico de compras.
A - Ambos - Exceto Dupl. Liquid.
| O que faz | Detalhe |
|---|---|
| Valida | Todas as regras anteriores EXCETO "Duplicatas Liquidadas após Vencto" (L). Presente em todos os IN (...) exceto ('L','O') |
| Inclui | Limite crédito, dias atraso, limite acumulado, tabela de preço, tabela mínima vendedor, preço mín/máx, valor líquido, média x desconto, desconto máx da cond. pagto |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Ambos - Exceto Dupl. Liquid."
- Cliente com limite estourado + desconto excessivo + produto abaixo da tabela
- Salve pedido → bloqueado com múltiplos motivos agregados
- Se tiver histórico de pagamento com 15 dias de atraso mas hoje estiver ok → NÃO bloqueia por isso
Resultado esperado: regra ampla, porém ignora o histórico de pagamento antigo. Bloqueia tudo que é "situação atual".
O - Ambos
| O que faz | Detalhe |
|---|---|
| Valida | Todas as regras de bloqueio disponíveis. Presente em todos os conjuntos IN (...) |
| Diferença de A | Inclui também "Duplicatas Liquidadas após Vencto" (L) |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Ambos"
- Mesmo cenário de "A" + cliente com histórico de duplicatas pagas 15 dias após vencimento
- Salve → bloqueado por múltiplos motivos, inclusive histórico de atraso
Resultado esperado: é o modo mais restritivo. Checa tudo — presente e passado.
X - Todos os Pedidos
| O que faz | Detalhe |
|---|---|
| Comportamento | Bloqueia TODO pedido automaticamente, independente de crédito ou valores (VERIFICA_BLOQUEIO linhas 543-565) |
| Ação interna | Muda V_ST_BLOQUEIO para A e adiciona motivo "Venda Bloqueada para Análise de Crédito" |
Com ST_SEPARABLOQUEIOPED = 'S' | Grava PEDIDO.TP_BLOQUEIO='F' |
Em OS (I_TP_DOCTO IN ('S','O')) | Grava ORDEMSERVICO.ST_ORDEMSERVICO='B' com motivo "Ordem de Serviço Bloqueada para Análise de Crédito.[MOF007]" |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Todos os Pedidos"
- Lance um Pedido de Venda qualquer, mesmo para cliente sem crédito cadastrado
- Salve → pedido sempre fica bloqueado para análise
- Toda liberação precisa passar pela alçada (MOF007 para OS ou equivalente para pedidos)
Resultado esperado: utilizado por empresas que querem análise de crédito manual em 100% dos pedidos/OS antes de liberar.
E - Limite Desc. Cd. Pagto e Dupl. em Atraso
| O que faz | Detalhe |
|---|---|
| Valida | Dias de atraso + % de desconto máximo permitido pela Condição de Pagamento (VERIFICA_BLOQUEIO linhas 1222-1237, V_ST_BLOQUEIO IN ('E','A','O')) |
| Fonte do limite | CONDPAGTO.PC_DESCMAX |
Bloqueio V_TP_BLOQUEIO='H' | Desconto maior que o máximo da condição |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Limite Desc. Cd. Pagto e Dupl. em Atraso"
- Condição de Pagamento "30/60/90" com
PC_DESCMAX = 5% - Pedido com desconto de 8% usando essa condição
- Salve → bloqueado: "Percentual de Desconto acima do Máximo Permitido Da Condição de Pagamento"
- Também bloqueia se houver duplicatas em atraso
Resultado esperado: garante que descontos respeitem o teto por condição de pagamento e valida atraso.
I - Inadimplência e Condição de Pagamento
| O que faz | Detalhe |
|---|---|
| Característica única | Altera comportamento da UI antes mesmo de salvar |
| Auto-preenchimento | Em MPD002 (UdmMPD002.pas linhas 1363, 1372), NÃO preenche CD_CONDPAGTO e CD_PESSOA automáticos a partir do parâmetro (deixa em branco para o usuário escolher com base no cliente) |
| Valida condição | No BeforePost e no AfterScroll (linhas 1654-1670, 2073-2088 de UdmMPD002.pas): consulta PESSOACONDPAGTO e exige que a condição usada esteja liberada para o cliente. Mensagem: "O Cliente não possui a Condição de Pagamento utilizada liberada. Verifique![TFA001]" |
| Combo de condição | Em MOF001/MPD002/MOF008/MPD081, a pesquisa CONDPAGTOPESSOA é usada em vez de CONDPAGTO plena (linhas 3032-3045 UMOF001.pas, 3818-3831 UMPD002.pas, 804-817 UMOF008.pas, 877-891 UMPD081.pas). Isso exige que a pessoa esteja informada para listar apenas as condições permitidas a ela |
Combina com ST_BLOQUEIAPRAZOMEDIO='S' | Mesmo efeito - os dois parâmetros compartilham o fluxo de CONDPAGTOPESSOA |
Validação na SP VERIFICA_BLOQUEIO | A procedure em si não trata o código I explicitamente em V_ST_BLOQUEIO; o bloqueio/validação é feito pela aplicação Delphi |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Inadimplência e Condição de Pagamento"
- Cliente A tem apenas as condições "À Vista" e "30 dias" liberadas em TFA001 → aba Condição de Pagamento
- Abra Pedido de Venda (MPD002) para cliente A
- Note que
CD_CONDPAGTOeCD_PESSOAnão vêm mais preenchidos automaticamente (ficam em branco) - Pressione F9 em Condição de Pagamento → o sistema mostra apenas as 2 condições liberadas para o cliente A
- Se tentar gravar com uma condição não liberada (forçando) → erro: "O Cliente não possui a Condição de Pagamento utilizada liberada. Verifique![TFA001]"
Resultado esperado: controle forte de condição de pagamento por cliente, com filtro dinâmico na pesquisa e validação no salvamento.
F - Preço Mínimo, Limite de Crédito e Acumulado
| O que faz | Detalhe |
|---|---|
| Valida | Preço mínimo (M) + Limite de Crédito (C) + Limite Acumulado (T). Presente em VALIDA_MODELOBLOQUEIOVLLIMITE (C e T) e em VERIFICA_BLOQUEIO linha 1173 (M) |
| Exceção | Em VERIFICA_BLOQUEIO linhas 1187-1188 e 1211, quando V_ST_BLOQUEIO='F' (e 'G'), o fluxo específico de reprocessamento de tabela (ST_REPROCESSATABPRECO='S') não gera o bloqueio P tradicional nem o bloqueio por preço máximo - só dispara o preço mínimo |
| Não valida | Duplicatas em atraso (não está no conjunto de D) |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Preço Mín, Lim. Créd., Acum."
- Cliente com limite R$ 1.000,00 (já R$ 800,00 em aberto), produto com preço mínimo R$ 90,00
- Pedido R$ 150,00 com item a R$ 85,00 → bloqueado por preço mínimo
- Pedido R$ 300,00 com item no preço ok → bloqueado por limite de crédito
- Pedido R$ 100,00 dentro do acumulado → salva
Resultado esperado: combinação específica para empresas que querem controlar crédito + piso de preço, mas não se importam com histórico de atraso.
G - Preço Mín, Lim. Créd., Acum. e Dupl. Atraso
| O que faz | Detalhe |
|---|---|
| Valida | Igual ao F + Duplicatas em Atraso ('G' aparece em todos os conjuntos: C, T, M, D, P, Q, L, Y, A, O, E) |
| Diferença de F | Inclui a validação de VALIDA_MODELOBLOQUEIODIASATRASO |
| Exceção de reprocesso | Mesmo comportamento do F nas linhas 1187-1188 de VERIFICA_BLOQUEIO.sql |
Simulação passo a passo
- MFA001 → ST_BLOQUEIOPED = "Preço Mín, Lim. Créd., Acum. e Dupl. Atraso"
- Mesmo cenário do F, mas cliente também tem duplicata vencida há 20 dias
- Pedido dentro do limite, preço ok → agora também bloqueia por atraso
Resultado esperado: é a combinação "F + atraso de duplicatas".
Regra Geral / Interação com Outros Parâmetros
ST_SEPARABLOQUEIOPED(PARMFATUR): quandoS, a procedure separa a classificação em subgrupos e gravaPEDIDO.TP_BLOQUEIO='F'para bloqueio por análise (VERIFICA_BLOQUEIOlinhas 177, 551-556).ST_BLOQUEIAPRAZOMEDIO='S': compartilha com a opçãoIo fluxo deCONDPAGTOPESSOAem MPD002, MOF001, MOF008, MPD081. Basta um dos dois estar ativo para filtrar condições por cliente.TP_MODELOBLOQUEIO<>Nativa o cadastro de alçadas por usuário (PARMUSUARIO.PC_MAXDESCONTO+ST_HABILITADESCMAXSUBGRUPO).TP_DOCTOemVERIFICA_BLOQUEIO:P(Pedido) →V_ST_BLOQUEIO = V_ST_BLOQUEIOPEDR(Recap) →V_ST_BLOQUEIO = V_ST_BLOQUEIOPEDO(OS avaliada pela regra do pedido) →V_ST_BLOQUEIO = V_ST_BLOQUEIOPEDS(OS com regra própria) →V_ST_BLOQUEIO = V_TP_BLOQUEIOOS(usaPARMOFICINA, não este parâmetro)N(Nota Fiscal) →V_ST_BLOQUEIO = V_ST_BLOQUEIONF(parâmetro ST_BLOQUEIONF separado)
Observação Importante
PARMCOMPRA.ST_BLOQUEIOPEDé um parâmetro homônimo mas separado, configurado em MFA004. Controla apenas se pedidos gerados a partir de cotação de peças (MCO008) são marcados como bloqueados ao serem gravados. Não interfere noPARMFATUR.ST_BLOQUEIOPEDdescrito aqui.PARMONMS.ST_BLOQUEIOPEDCLIENTE(usado em MFA015, TRD016, OFI001) é outro parâmetro diferente - controla bloqueio de pedido pelo cliente em módulos específicos (ONMS/Palm).
Tabela Comparativa Resumida
| Opção | Descrição | Crédito Simples (C) | Crédito Acum. (T) | Dias Atraso (D) | Dupl. Liquid. >10d (L) | Preço Tabela (P) | Preço Mín/Máx (M) | Tab. Mín. Vendedor (V) | Valor Líq. (Q) | Desc. Média (Y) | Desc. Cond. Pagto (E) | Filtra Cond. Pagto do Cliente |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| N | Não Bloqueia | - | - | - | - | - | - | - | - | - | - | - |
| D | Duplicatas em Atraso | - | - | Sim | - | - | - | - | - | - | - | - |
| C | Limite de Crédito | Sim | - | - | - | - | - | - | - | - | - | - |
| T | Limite Acumulado | - | Sim | - | - | - | - | - | - | - | - | - |
| B | Limite e Dupl. Atraso | Sim | Sim | Sim | - | - | - | - | - | - | - | - |
| P | Tabela de Preço | - | - | - | - | Sim | - | - | - | - | - | - |
| V | Tabela Mín. Vendedor | - | - | - | - | - | - | Sim | - | - | - | - |
| M | Preço Mín/Máx | - | - | - | - | - | Sim | - | - | - | - | - |
| Q | Val. Líq. + Limite | Sim | - | Sim | - | - | - | - | Sim | - | - | - |
| L | Dupl. Liquid. Vencto | - | - | - | Sim | - | - | - | - | - | - | - |
| Y | Média x Desconto | - | - | Sim | - | - | - | - | - | Sim | - | - |
| A | Ambos (exceto L) | Sim | Sim | Sim | - | Sim | Sim | Sim | Sim | Sim | Sim | - |
| O | Ambos (tudo) | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | - |
| X | Todos os Pedidos | Força bloqueio de TODO pedido/OS | - | |||||||||
| E | Desc. Cd. Pagto + Atraso | - | - | Sim | - | - | - | - | - | - | Sim | - |
| I | Inadimp. e Cond. Pagto | - | - | - | - | - | - | - | - | - | - | Sim |
| F | Preço Mín + Crédito + Acum. | Sim | Sim | - | - | - | Sim | - | - | - | - | - |
| G | F + Dupl. Atraso | Sim | Sim | Sim | - | - | Sim | - | - | - | - | - |
Referências no Código Fonte
| Arquivo | Linhas | Função |
|---|---|---|
source/MFA001/UMFA001.dfm | 8261-8305 | ComboBox cmbST_BLOQUEIOPED com 18 opções |
source/MFA001/UMFA001.pas | 298 | Declaração do combo |
source/MFA001/UdmMFA001.pas | 35, 438, 925-929 | Field persistente, valor padrão N, validação obrigatória |
source/MPD002/UdmMPD002.pas | 1363, 1372, 1654, 1937, 2073, 2119, 5737 | Leitura de ParmFatur.Values['ST_BLOQUEIOPED'], especialmente fluxo da opção I |
source/MPD002/UMPD002.pas | 3818, 3829, 6813 | Chamada de CONDPAGTOPESSOA quando I ou ST_BLOQUEIAPRAZOMEDIO; cálculo de PC_DESCONTOMAXIMO por item |
source/MPD005/UdmMPD005.pas | 244, 374, 392 | Carrega parâmetro ao abrir tela |
source/MPD017/UdmMPD017.pas | 148, 211, 226 | Carrega parâmetro |
source/MPD018/UdmMPD018.pas | 245, 286, 301, 842 | Carrega parâmetro e usa em VERIFICA_CREDITO do orçamento |
source/MPD020/UdmMPD020.pas | 237, 318, 346 | Carrega parâmetro (pedido mobile) |
source/MPD081/UdmMPD081.pas | 90 | Campo persistente tabPEDIDOST_BLOQUEIOPED |
source/MPD081/UMPD081.pas | 552, 593, 618, 656, 878, 889 | SELECT de PF.ST_BLOQUEIOPED no grid; verifica = 'I' para CONDPAGTOPESSOA |
source/MPD092/UdmMPD092.pas | 235, 277, 290, 810 | Orçamento de compra |
source/MPD010/UMPD010.pas | 1400-1420, 1499-1519 | "Validar Pedidos" em lote; se N ignora |
source/MNF017/UdmMNF017.pas | 276 | Variável iST_BLOQUEIOPED para validação |
source/MNF017/UMNF017.pas | 162, 188, 1378-1380 | SELECT do parâmetro e uso em VERIFICA_CREDITO |
source/MOF001/UdmMOF001.pas | 439, 723, 742 | Carrega parâmetro da OS |
source/MOF001/UMOF001.pas | 3032, 3043 | CONDPAGTOPESSOA para OS |
source/MOF002/UdmMOF002.pas | 191, 295, 312 | Carrega parâmetro (OS outra) |
source/MOF006/UdmMOF006.pas | 233, 296, 312 | Carrega parâmetro (OS outra) |
source/MOF008/UMOF008.pas | 804, 815 | CONDPAGTOPESSOA |
source/MRC025/UMRC025.pas | 2141 | Dispara VERIFICA_BLOQUEIO ao gerar pedido |
source/MRC026/UMRC026.pas | 1362 | Dispara VERIFICA_BLOQUEIO ao gerar pedido |
source/MRC040/UdmMRC040.pas | 80 | Field persistente tabPedidoPneuST_BLOQUEIOPED |
source/MRC040/UdmMRC040.dfm | 77, 272 | SelectSQL inclui PF.ST_BLOQUEIOPED |
source/MRC001/UformMRC001.pas | 81 | Atribui iBloqueio := parmFatur.Values['ST_BLOQUEIOPED'] |
source/MFA004/UdmMFA004.pas | 37, 119 | Campo ST_BLOQUEIOPED da PARMCOMPRA (parâmetro distinto homônimo) |
source/MFA004/UframeMFA004.dfm | 203, 584-594 | Combo "Bloqueia Pedidos de Cotação [MCO008]" da PARMCOMPRA |
source/CPD009/UdmCPD009.dfm | 300, 448, 531 | DML (insert/update) incluindo ST_BLOQUEIOPED |
source/RCA006/UdmRCA006.dfm | 3049, 3197, 3280 | DML (insert/update) incluindo ST_BLOQUEIOPED |
source/HistoricoPedido/UdmHistoricoPedido.pas | 143 | Variável em histórico do pedido |
Scripts/VERIFICA_BLOQUEIO.sql | 20, 143, 149, 173, 277, 350, 355, 543-565, 640, 660, 679, 830, 843, 870, 1019, 1052, 1065, 1078, 1111, 1140, 1173, 1188, 1211, 1222 | Procedure central - atribui V_ST_BLOQUEIO, aciona cada validação conforme o código |
Scripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sql | 40, 108 | Limite simples: I_ST_BLOQUEIO IN ('C','A','O','Q','B','F','G'); Acumulado: IN ('T','A','O','B','F','G') |
Scripts/VALIDA_MODELOBLOQUEIODIASATRASO.sql | 37 | Dias de atraso: I_ST_BLOQUEIO IN ('D','A','O','Q','B','Y','E','G') |
Scripts/GERA_PEDIDOCOTACAOPECA.sql | 47, 67, 72, 382-393 | Usa PARMCOMPRA.ST_BLOQUEIOPED (não o de PARMFATUR) |