Pular para o conteúdo principal

ST_SEPARABLOQUEIOPED - Separa Bloqueio Financeiro e Comercial do Pedido

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label "Separação de bloqueio por Setor", combo cmbST_SEPARABLOQUEIOPED - UMFA001.dfm linha 8983-9009) Tabela: PARMFATUR.ST_SEPARABLOQUEIOPED Valor padrão: N (Não separa) - definido em UdmMFA001.pas linha 526 (AfterInsert)

Controla se o bloqueio de pedido por análise será unificado (um único tipo genérico "Ambos") ou separado em duas naturezas distintas: Financeiro (TP_BLOQUEIO='F') e Comercial (TP_BLOQUEIO='C'). Quando ativo, cada natureza passa a ter tela de liberação própria (MPD003/MRC040 vs MPD081/MRC005) e permite bloqueio adicional por subgrupo de produto via TP_BLOQSUBGRUPO.

Telas impactadas​

MóduloCódigoDescrição
Parâmetros FaturamentoMFA001Tela de configuração (combo principal)
Liberação Pedido - FinanceiroMPD003Libera pedidos com TP_BLOQUEIO='F'. Ao liberar pedido ST_PEDIDO='A' com separação ativa, grava TP_BLOQUEIO='F' (UMPD003.pas linhas 413, 447-460)
Liberação Pedido - ComercialMPD081Libera pedidos com TP_BLOQUEIO='C'. Ao liberar pedido ST_PEDIDO='A' com separação ativa, grava TP_BLOQUEIO='C' (UMPD081.pas linhas 360, 394-402)
Liberação Coleta Recap - ComercialMRC005Libera coletas de recap com bloqueio comercial. Ao liberar TP_BLOQUEIO='A' com separação ativa, grava TP_BLOQUEIO='F' mantendo o financeiro pendente (UformMRC005.pas linhas 450-451, 537-542)
Liberação Coleta Recap - FinanceiroMRC040Libera coletas de recap com bloqueio financeiro. Ao liberar TP_BLOQUEIO='A' com separação ativa, grava TP_BLOQUEIO='C' mantendo o comercial pendente (UformMRC040.pas linhas 537-538, 622-627)
Mensagem pós-gravação de PedidoMRC001Ajusta texto do aviso após salvar pedido: N → "Para Desbloquear. [MRC005]"; S → "Para Desbloquear. [MRC005] / [MRC040]" (UframeMRC001.pas linhas 773-776)
Pedido RecapMRC005 (UdmMRC005.pas linha 234, comentário)SelectSQL referencia o parâmetro

Procedures impactadas​

ProcedureArquivoPapel
VERIFICA_BLOQUEIOScripts/VERIFICA_BLOQUEIO.sqlProcedure central. Lê o parâmetro em linha 145/151, usa em linha 177 para chamar VERIFICA_BLOQUEIOSUBGRUPO, e em linhas 551-556 para gravar PEDIDO.TP_BLOQUEIO='F' quando bloqueia todos os pedidos (V_ST_BLOQUEIO='X'). Linhas 674 e 1296 passam o valor para RETORNA_MOTIVOBLOQUEIO.
VERIFICA_BLOQUEIOSUBGRUPOreferenciada em VERIFICA_BLOQUEIO.sql linha 177Recebe I_ST_SEPARABLOQUEIOPED e I_TP_BLOQSUBGRUPO. Só é ativada quando ST_SEPARABLOQUEIOPED='S' - valida bloqueio por subgrupo de produto.
RETORNA_MOTIVOBLOQUEIOScripts/RETORNA_MOTIVOBLOQUEIO.sqlLinha 9 (parâmetro I_ST_SEPARABLOQUEIOPED), linha 95: IF (((TP_DOCTO='P' OR 'R') AND I_ST_SEPARABLOQUEIOPED='S')) OR (...) THEN → entra no bloco que separa os motivos em V_TP_BLOQUEIOPED='F' (financeiro) e 'C' (comercial) antes de montar o texto exibido.
VIEW_DOCUMENTOSBLOQUEADOSScripts/VIEW_DOCUMENTOSBLOQUEADOS.sqlLinhas 56, 154, 167, 168, 173. Para cada empresa, se V_ST_SEPARABLOQUEIOPED='S' monta consultas distintas de "coleta bloqueada financeiro" (para MRC040) e "coleta bloqueada comercial" (para MRC005) filtrando por PP.TP_BLOQUEIO IN ('F','A') ou IN ('C','A') respectivamente. Usada pela tela de avisos do autorizador.

Campos envolvidos​

CampoTabelaDescrição
ST_SEPARABLOQUEIOPEDPARMFATURO parâmetro em si (DOM_CHAR1, S/N)
TP_BLOQSUBGRUPOPARMFATURHabilita/modo de bloqueio por subgrupo (C=Cliente, etc.). Só pode ser editado quando ST_SEPARABLOQUEIOPED='S' - o OnValidate força TP_BLOQSUBGRUPO='C' e desabilita o combo quando separação = N (UdmMFA001.pas linhas 2122-2134; UMFA001.pas linha 927)
PEDIDO.TP_BLOQUEIOPEDIDOF = bloqueio financeiro, C = comercial, A = ambos, P = preço, V = vendedor, X = todos os pedidos (VERIFICA_BLOQUEIO linhas 543-556)
PEDIDO.ST_PEDIDOPEDIDOB = bloqueado, A = aprovado (pendente de liberação final), N = normal/liberado
PEDIDOPNEU.TP_BLOQUEIOPEDIDOPNEUMesmo conceito para coletas de recapadora (MRC005/MRC040)
ST_BLOQUEIOPEDPARMFATURDefine qual regra causa o bloqueio (crédito, duplicatas, preço etc.). Funciona em cascata com este parâmetro (ver ST_BLOQUEIOPED).

Opções disponíveis​

N - Não Separa (bloqueio unificado)​

O que fazDetalhe
Separa motivos financeiro x comercial?Não
Tela de liberaçãoApenas MPD003 (pedidos) e MRC005 (coletas recap)
Permite bloqueio por subgrupo (TP_BLOQSUBGRUPO)?Não - o combo é forçado para C e desabilitado (UdmMFA001.pas linha 2132; UMFA001.pas linha 927)
Comportamento em VERIFICA_BLOQUEIOSUBGRUPOProcedure é chamada mas o fluxo interno não aplica a separação
Comportamento em RETORNA_MOTIVOBLOQUEIOMonta motivo único, sem desdobrar em "Financeiro"/"Comercial" (linha 95 - condição falsa)
Comportamento em VERIFICA_BLOQUEIO.sql linhas 551-556Quando V_ST_BLOQUEIO='X' (bloqueia tudo), o UPDATE do PEDIDO.TP_BLOQUEIO='F' não é executado (condição da linha 551 falsa). Fica com TP_BLOQUEIO agregado (geralmente 'A').
Mensagem em MRC001 pós-pedido"Para Desbloquear. [MRC005]" (UframeMRC001.pas linha 774)
Liberação em MRC005Pedido fica com ST_PEDIDO conforme fluxo normal (não reforça TP_BLOQUEIO='F') - cai no ELSE das linhas 462-470 de UformMRC005.pas
É o valor padrão ao inserir novo registro?Sim (UdmMFA001.pas linha 526)

Simulação passo a passo​

  1. MFA001 → Parâmetros → Ambos → Opção 1 → ST_SEPARABLOQUEIOPED = "Não"
  2. Salve (F6). Note que o combo cmbTP_BLOQSUBGRUPO fica desabilitado e seu valor é gravado como C automaticamente.
  3. Configure ST_BLOQUEIOPED = "Todos os Pedidos" (X) para garantir bloqueio sempre.
  4. Em MPD002, lance um pedido qualquer → PEDIDO.ST_PEDIDO='B', PEDIDO.TP_BLOQUEIO='A' (ambos/analise), motivo "Venda Bloqueada para Análise de Crédito".
  5. Tente abrir o pedido em MPD081 (Liberação Comercial) → o comportamento separado não é acionado porque o parâmetro está em N.
  6. Abra o pedido em MPD003 (Liberação Financeira) → libere normalmente. O bloco das linhas 447-460 (que regravaria TP_BLOQUEIO='F') não roda porque a condição parmFatur.Values['ST_SEPARABLOQUEIOPED']='S' é falsa.

Resultado esperado: existe uma única fila de liberação. Qualquer usuário com acesso à MPD003 pode liberar o pedido, independente de ter sido barrado por crédito ou por regra comercial. Não é possível configurar bloqueio por subgrupo.


S - Separa (Financeiro + Comercial)​

O que fazDetalhe
Separa motivos financeiro x comercial?Sim
Telas de liberaçãoMPD003 para bloqueio financeiro (TP_BLOQUEIO='F') / MPD081 para bloqueio comercial (TP_BLOQUEIO='C'). O mesmo ocorre em coletas: MRC040 = financeiro / MRC005 = comercial
Habilita TP_BLOQSUBGRUPO?Sim - combo cmbTP_BLOQSUBGRUPO é liberado (UdmMFA001.pas linha 2127; UMFA001.pas linha 927). Permite bloqueio adicional por subgrupo em VERIFICA_BLOQUEIOSUBGRUPO
Bloqueio "X - Todos os Pedidos"VERIFICA_BLOQUEIO.sql linhas 551-556 executam UPDATE PEDIDO SET TP_BLOQUEIO='F' (apenas quando I_TP_DOCTO='P') - ou seja, mesmo forçando "bloqueia todos" o pedido recebe a natureza financeira
Liberação parcialEm MPD003/MRC040 (financeiro): se o pedido estava com TP_BLOQUEIO='A' (ambos), ao liberar o financeiro, grava TP_BLOQUEIO='C' ou mantém ST_PEDIDO='B' aguardando liberação comercial (UformMRC040.pas linhas 537-547; UMPD003.pas linhas 447-460 gravam TP_BLOQUEIO='F' no caminho de MPD003). Em MPD081/MRC005 (comercial): grava TP_BLOQUEIO='C' em MPD081 e TP_BLOQUEIO='F' no MRC005 mantendo o outro lado pendente.
Mensagem em MRC001 pós-pedido"Para Desbloquear. [MRC005] / [MRC040]" (UframeMRC001.pas linha 776)
Motivo na tela (RETORNA_MOTIVOBLOQUEIO)Os motivos são agrupados como "Bloqueio Financeiro" ou "Bloqueio Comercial" (procedure desdobra I_TP_BLOQUEIO em 7=Financeiro, 8=Comercial, 9=Ambos quando TP_BLOQSUBGRUPO atua - RETORNA_MOTIVOBLOQUEIO.sql linhas 95-113)
Avisos para o autorizadorVIEW_DOCUMENTOSBLOQUEADOS.sql linhas 173-188: se ST_SEPARABLOQUEIOPED='S' e o autorizador tiver acesso a MRC040 → listam-se coletas TP_BLOQUEIO IN ('F','A') separadamente das com IN ('C','A') quando tem acesso a MRC005

Simulação passo a passo​

  1. MFA001 → Parâmetros → Ambos → Opção 1 → ST_SEPARABLOQUEIOPED = "Sim"
  2. O combo cmbTP_BLOQSUBGRUPO passa a ficar habilitado → selecione a regra desejada (ex.: "Cliente").
  3. Configure ST_BLOQUEIOPED = "Todos os Pedidos" (X).
  4. Em MPD002, lance um pedido → na gravação a VERIFICA_BLOQUEIO (linhas 543-556) detecta V_ST_BLOQUEIO='X' + V_ST_SEPARABLOQUEIOPED='S' + I_TP_DOCTO='P' e executa o UPDATE que grava PEDIDO.TP_BLOQUEIO='F'.
  5. Tente liberar o pedido em MPD081 (Comercial) → a tela não apresenta o pedido porque ele foi marcado como financeiro (TP_BLOQUEIO='F').
  6. Abra o pedido em MPD003 (Financeiro) → liberação autorizada, o bloco das linhas 447-460 regrava ST_PEDIDO='B', TP_BLOQUEIO='F' com motivo preenchido para fluxo subsequente.
  7. Cenário de recap: gere coleta bloqueada TP_BLOQUEIO='A' em MRC025. Em MRC040 libere → o código das linhas 537-547 grava TP_BLOQUEIO='C' mantendo a coleta ainda bloqueada pelo comercial, que será resolvido em MRC005.
  8. Ao finalizar o pedido em MPD002/MPD005, o usuário recebe a mensagem "Para Desbloquear. [MRC005] / [MRC040]" (linha 776 de UframeMRC001.pas).

Resultado esperado: existem duas filas de liberação com alçadas distintas. O autorizador financeiro resolve crédito/duplicatas em MPD003/MRC040 e o autorizador comercial resolve preço/desconto/subgrupo em MPD081/MRC005. Bloqueios por subgrupo passam a ser suportados.


Interação com outros parâmetros​

ST_BLOQUEIOPED (ST_BLOQUEIOPED)​

Define qual regra causa o bloqueio; ST_SEPARABLOQUEIOPED define como o bloqueio é compartimentalizado depois. Exemplo: ST_BLOQUEIOPED='A' (Ambos exceto Dupl. Liquid.) + ST_SEPARABLOQUEIOPED='S' → qualquer validação (crédito, preço, vendedor, desconto etc.) que falhar resulta em TP_BLOQUEIO='A', e cabe ao usuário abrir MPD003 e MPD081 para liberar ambas as pontas. Se for N, basta liberar em MPD003.

TP_BLOQSUBGRUPO (TP_BLOQSUBGRUPO)​

Dependência obrigatória. O OnValidate de ST_SEPARABLOQUEIOPED (linhas 2122-2134 de UdmMFA001.pas) força TP_BLOQSUBGRUPO='C' e desabilita o combo quando o valor é N. Só com ST_SEPARABLOQUEIOPED='S' a procedure VERIFICA_BLOQUEIOSUBGRUPO entra em ação a partir da linha 177 de VERIFICA_BLOQUEIO.sql.

PARMOFICINA.ST_SEPARABLOQUEIO (parâmetro análogo para OS)​

Em RETORNA_MOTIVOBLOQUEIO.sql linha 96 e VIEW_DOCUMENTOSBLOQUEADOS.sql linha 155, existe um parâmetro paralelo em PARMOFICINA que separa bloqueio de Ordens de Serviço (TP_DOCTO='S' ou 'O') da mesma forma. Os dois parâmetros não se sobrepõem - cada um atua sobre seu tipo de documento.

ST_MOTLIBERAPEDNOTA​

Quando ambos estão em S, tanto MPD003 quanto MPD081 exigem preenchimento de motivo de liberação antes de liberar (mensagem "É Obrigatório Informar o Motivo de Liberação do Pedido!" - UMPD003.pas linha 410; UMPD081.pas linha 357).

Consumidores externos (API Java)​

  • source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/JunsoftBuilder.java linha 361: mapeia o campo na entidade ParmFatur (stSeparaBloquieoPed(...)) - sic no nome
  • source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmFaturSQL.java linha 39: SELECT inclui ST_SEPARABLOQUEIOPED no conjunto de parâmetros retornado ao portal/mobile

Tabela Comparativa Resumida​

AspectoN - Não SeparaS - Separa
Filas de liberação de pedido1 (MPD003)2 (MPD003 Financeiro / MPD081 Comercial)
Filas de liberação de coleta recap1 (MRC005)2 (MRC040 Financeiro / MRC005 Comercial)
TP_BLOQUEIO gerado por ST_BLOQUEIOPED='X'A (ou agregado)F (financeiro) - VERIFICA_BLOQUEIO linhas 551-556
TP_BLOQSUBGRUPO editávelNão (forçado C, combo desabilitado)Sim
VERIFICA_BLOQUEIOSUBGRUPO efetivaChamada mas sem desdobramentoDesdobra financeiro (7) / comercial (8) / ambos (9)
Mensagem pós-gravação em pedido"[MRC005]""[MRC005] / [MRC040]"
VIEW_DOCUMENTOSBLOQUEADOS (avisos autorizador)Linha 174-188 não entra no bloco separadoLista TP_BLOQUEIO IN ('F','A') para MRC040 e IN ('C','A') para MRC005
Motivo na RETORNA_MOTIVOBLOQUEIOTexto únicoSeparado em "Financeiro"/"Comercial" (linhas 95-113)
Uso típicoEmpresas pequenas com 1 alçada únicaEmpresas com times distintos de crédito e comercial, segregação de funções

Referências no Código Fonte​

ArquivoLinhasFunção
source/MFA001/UMFA001.dfm8983-9009ComboBox cmbST_SEPARABLOQUEIOPED (DataField ST_SEPARABLOQUEIOPED, Items = Sim\tS / Não\tN)
source/MFA001/UMFA001.pas326Declaração do combo
source/MFA001/UMFA001.pas927cmbTP_BLOQSUBGRUPO.Enabled := dmMFA001.tabPARMFATURST_SEPARABLOQUEIOPED.AsString = 'S'
source/MFA001/UdmMFA001.pas214Declaração do campo persistente tabPARMFATURST_SEPARABLOQUEIOPED
source/MFA001/UdmMFA001.pas406Declaração da procedure tabPARMFATURST_SEPARABLOQUEIOPEDValidate
source/MFA001/UdmMFA001.pas526Valor padrão N no AfterInsert
source/MFA001/UdmMFA001.pas2122-2134Implementação do OnValidate: se S habilita cmbTP_BLOQSUBGRUPO, se N desabilita e força TP_BLOQSUBGRUPO='C'
source/MFA001/UdmMFA001.dfm1577-1583Metadados do field persistente (Origin "PARMFATUR"."ST_SEPARABLOQUEIOPED", OnValidate)
source/MFA001/UdmMFA001.dfm2410, 2577, 2813SQL INSERT/UPDATE (SelectSQL, InsertSQL, ModifySQL) incluem o campo
source/MPD003/UMPD003.pas413Checagem (atualmente comentada) sobre status 'N'
source/MPD003/UMPD003.pas447-460Se ST_PEDIDO='A' (aprovado) e ST_SEPARABLOQUEIOPED='S' → UPDATE regrava TP_BLOQUEIO='F'
source/MPD003/UMPD003.pas667, 723Referências em SelectSQL (comentadas)
source/MPD081/UMPD081.pas360Checagem (comentada) sobre status 'N'
source/MPD081/UMPD081.pas394-402Se ST_PEDIDO='A' e ST_SEPARABLOQUEIOPED='S' → UPDATE regrava TP_BLOQUEIO='C'
source/MPD081/UMPD081.pas580, 646Referências em SelectSQL (comentadas)
source/MRC001/UframeMRC001.pas773-776Escolhe mensagem "[MRC005]" vs "[MRC005] / [MRC040]" após gravar pedido
source/MRC005/UformMRC005.pas450-451, 537-542Liberação de coleta com separação: grava TP_BLOQUEIO='F' para manter pendente o financeiro
source/MRC005/UdmMRC005.pas234Referência em SelectSQL (comentada)
source/MRC040/UformMRC040.pas537-548, 622-627Liberação de coleta com separação: grava TP_BLOQUEIO='C' para manter pendente o comercial
source/MRC040/UdmMRC040.pas640Referência em SelectSQL (comentada)
Scripts/VERIFICA_BLOQUEIO.sql85, 145, 151, 177, 551, 674, 1296Declaração da variável; SELECT do parâmetro; chamada a VERIFICA_BLOQUEIOSUBGRUPO; UPDATE que grava TP_BLOQUEIO='F' quando V_ST_BLOQUEIO='X'; passagem para RETORNA_MOTIVOBLOQUEIO
Scripts/RETORNA_MOTIVOBLOQUEIO.sql9, 95Parâmetro de entrada; condição que separa motivos em Financeiro/Comercial
Scripts/VIEW_DOCUMENTOSBLOQUEADOS.sql56, 154, 167, 168, 173Declaração; SELECT de PF.ST_SEPARABLOQUEIOPED; ramificação para montar consultas separadas por natureza de bloqueio
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/JunsoftBuilder.java361Mapeamento do campo na entidade ParmFatur da API
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmFaturSQL.java39SELECT do parâmetro para exposição via API REST