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.dfmlinha 8983-9009) Tabela:PARMFATUR.ST_SEPARABLOQUEIOPEDValor padrão:N(Não separa) - definido emUdmMFA001.paslinha 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ódulo | Código | Descrição |
|---|---|---|
| Parâmetros Faturamento | MFA001 | Tela de configuração (combo principal) |
| Liberação Pedido - Financeiro | MPD003 | Libera 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 - Comercial | MPD081 | Libera 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 - Comercial | MRC005 | Libera 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 - Financeiro | MRC040 | Libera 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 Pedido | MRC001 | Ajusta texto do aviso após salvar pedido: N → "Para Desbloquear. [MRC005]"; S → "Para Desbloquear. [MRC005] / [MRC040]" (UframeMRC001.pas linhas 773-776) |
| Pedido Recap | MRC005 (UdmMRC005.pas linha 234, comentário) | SelectSQL referencia o parâmetro |
Procedures impactadas
| Procedure | Arquivo | Papel |
|---|---|---|
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql | Procedure 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_BLOQUEIOSUBGRUPO | referenciada em VERIFICA_BLOQUEIO.sql linha 177 | Recebe I_ST_SEPARABLOQUEIOPED e I_TP_BLOQSUBGRUPO. Só é ativada quando ST_SEPARABLOQUEIOPED='S' - valida bloqueio por subgrupo de produto. |
RETORNA_MOTIVOBLOQUEIO | Scripts/RETORNA_MOTIVOBLOQUEIO.sql | Linha 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_DOCUMENTOSBLOQUEADOS | Scripts/VIEW_DOCUMENTOSBLOQUEADOS.sql | Linhas 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
| Campo | Tabela | Descrição |
|---|---|---|
ST_SEPARABLOQUEIOPED | PARMFATUR | O parâmetro em si (DOM_CHAR1, S/N) |
TP_BLOQSUBGRUPO | PARMFATUR | Habilita/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_BLOQUEIO | PEDIDO | F = bloqueio financeiro, C = comercial, A = ambos, P = preço, V = vendedor, X = todos os pedidos (VERIFICA_BLOQUEIO linhas 543-556) |
PEDIDO.ST_PEDIDO | PEDIDO | B = bloqueado, A = aprovado (pendente de liberação final), N = normal/liberado |
PEDIDOPNEU.TP_BLOQUEIO | PEDIDOPNEU | Mesmo conceito para coletas de recapadora (MRC005/MRC040) |
ST_BLOQUEIOPED | PARMFATUR | Define 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 faz | Detalhe |
|---|---|
| Separa motivos financeiro x comercial? | Não |
| Tela de liberação | Apenas 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_BLOQUEIOSUBGRUPO | Procedure é chamada mas o fluxo interno não aplica a separação |
Comportamento em RETORNA_MOTIVOBLOQUEIO | Monta motivo único, sem desdobrar em "Financeiro"/"Comercial" (linha 95 - condição falsa) |
Comportamento em VERIFICA_BLOQUEIO.sql linhas 551-556 | Quando 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 MRC005 | Pedido 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
- MFA001 → Parâmetros → Ambos → Opção 1 → ST_SEPARABLOQUEIOPED = "Não"
- Salve (F6). Note que o combo
cmbTP_BLOQSUBGRUPOfica desabilitado e seu valor é gravado comoCautomaticamente. - Configure
ST_BLOQUEIOPED = "Todos os Pedidos" (X)para garantir bloqueio sempre. - 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". - Tente abrir o pedido em MPD081 (Liberação Comercial) → o comportamento separado não é acionado porque o parâmetro está em
N. - 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çãoparmFatur.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 faz | Detalhe |
|---|---|
| Separa motivos financeiro x comercial? | Sim |
| Telas de liberação | MPD003 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 parcial | Em 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 autorizador | VIEW_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
- MFA001 → Parâmetros → Ambos → Opção 1 → ST_SEPARABLOQUEIOPED = "Sim"
- O combo
cmbTP_BLOQSUBGRUPOpassa a ficar habilitado → selecione a regra desejada (ex.: "Cliente"). - Configure
ST_BLOQUEIOPED = "Todos os Pedidos" (X). - Em MPD002, lance um pedido → na gravação a
VERIFICA_BLOQUEIO(linhas 543-556) detectaV_ST_BLOQUEIO='X'+V_ST_SEPARABLOQUEIOPED='S'+I_TP_DOCTO='P'e executa o UPDATE que gravaPEDIDO.TP_BLOQUEIO='F'. - Tente liberar o pedido em MPD081 (Comercial) → a tela não apresenta o pedido porque ele foi marcado como financeiro (
TP_BLOQUEIO='F'). - 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. - Cenário de recap: gere coleta bloqueada
TP_BLOQUEIO='A'em MRC025. Em MRC040 libere → o código das linhas 537-547 gravaTP_BLOQUEIO='C'mantendo a coleta ainda bloqueada pelo comercial, que será resolvido em MRC005. - 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.javalinha 361: mapeia o campo na entidade ParmFatur (stSeparaBloquieoPed(...)) -sicno nomesource/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmFaturSQL.javalinha 39: SELECT incluiST_SEPARABLOQUEIOPEDno conjunto de parâmetros retornado ao portal/mobile
Tabela Comparativa Resumida
| Aspecto | N - Não Separa | S - Separa |
|---|---|---|
| Filas de liberação de pedido | 1 (MPD003) | 2 (MPD003 Financeiro / MPD081 Comercial) |
| Filas de liberação de coleta recap | 1 (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ável | Não (forçado C, combo desabilitado) | Sim |
VERIFICA_BLOQUEIOSUBGRUPO efetiva | Chamada mas sem desdobramento | Desdobra 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 separado | Lista TP_BLOQUEIO IN ('F','A') para MRC040 e IN ('C','A') para MRC005 |
Motivo na RETORNA_MOTIVOBLOQUEIO | Texto único | Separado em "Financeiro"/"Comercial" (linhas 95-113) |
| Uso típico | Empresas pequenas com 1 alçada única | Empresas com times distintos de crédito e comercial, segregação de funções |
Referências no Código Fonte
| Arquivo | Linhas | Função |
|---|---|---|
source/MFA001/UMFA001.dfm | 8983-9009 | ComboBox cmbST_SEPARABLOQUEIOPED (DataField ST_SEPARABLOQUEIOPED, Items = Sim\tS / Não\tN) |
source/MFA001/UMFA001.pas | 326 | Declaração do combo |
source/MFA001/UMFA001.pas | 927 | cmbTP_BLOQSUBGRUPO.Enabled := dmMFA001.tabPARMFATURST_SEPARABLOQUEIOPED.AsString = 'S' |
source/MFA001/UdmMFA001.pas | 214 | Declaração do campo persistente tabPARMFATURST_SEPARABLOQUEIOPED |
source/MFA001/UdmMFA001.pas | 406 | Declaração da procedure tabPARMFATURST_SEPARABLOQUEIOPEDValidate |
source/MFA001/UdmMFA001.pas | 526 | Valor padrão N no AfterInsert |
source/MFA001/UdmMFA001.pas | 2122-2134 | Implementação do OnValidate: se S habilita cmbTP_BLOQSUBGRUPO, se N desabilita e força TP_BLOQSUBGRUPO='C' |
source/MFA001/UdmMFA001.dfm | 1577-1583 | Metadados do field persistente (Origin "PARMFATUR"."ST_SEPARABLOQUEIOPED", OnValidate) |
source/MFA001/UdmMFA001.dfm | 2410, 2577, 2813 | SQL INSERT/UPDATE (SelectSQL, InsertSQL, ModifySQL) incluem o campo |
source/MPD003/UMPD003.pas | 413 | Checagem (atualmente comentada) sobre status 'N' |
source/MPD003/UMPD003.pas | 447-460 | Se ST_PEDIDO='A' (aprovado) e ST_SEPARABLOQUEIOPED='S' → UPDATE regrava TP_BLOQUEIO='F' |
source/MPD003/UMPD003.pas | 667, 723 | Referências em SelectSQL (comentadas) |
source/MPD081/UMPD081.pas | 360 | Checagem (comentada) sobre status 'N' |
source/MPD081/UMPD081.pas | 394-402 | Se ST_PEDIDO='A' e ST_SEPARABLOQUEIOPED='S' → UPDATE regrava TP_BLOQUEIO='C' |
source/MPD081/UMPD081.pas | 580, 646 | Referências em SelectSQL (comentadas) |
source/MRC001/UframeMRC001.pas | 773-776 | Escolhe mensagem "[MRC005]" vs "[MRC005] / [MRC040]" após gravar pedido |
source/MRC005/UformMRC005.pas | 450-451, 537-542 | Liberação de coleta com separação: grava TP_BLOQUEIO='F' para manter pendente o financeiro |
source/MRC005/UdmMRC005.pas | 234 | Referência em SelectSQL (comentada) |
source/MRC040/UformMRC040.pas | 537-548, 622-627 | Liberação de coleta com separação: grava TP_BLOQUEIO='C' para manter pendente o comercial |
source/MRC040/UdmMRC040.pas | 640 | Referência em SelectSQL (comentada) |
Scripts/VERIFICA_BLOQUEIO.sql | 85, 145, 151, 177, 551, 674, 1296 | Declaraçã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.sql | 9, 95 | Parâmetro de entrada; condição que separa motivos em Financeiro/Comercial |
Scripts/VIEW_DOCUMENTOSBLOQUEADOS.sql | 56, 154, 167, 168, 173 | Declaraçã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.java | 361 | Mapeamento do campo na entidade ParmFatur da API |
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmFaturSQL.java | 39 | SELECT do parâmetro para exposição via API REST |