Pular para o conteúdo principal

Bloqueio de Alteração / Exclusão de Pedido e Ordem de Serviço

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label "Bloqueia Alteração de Pedido", UMFA001.dfm linha 7879 / combo cmbST_ALTERAPEDIDO linhas 8514-8544) Tabela: PARMFATUR.ST_ALTERAPEDIDO Valor padrão: N (Não bloqueia) — definido em UdmMFA001.pas linha 466 (AfterInsert)

Define se o sistema bloqueia a alteração e/ou exclusão de Pedidos (Venda / Compra) e Ordens de Serviço, restringindo essas operações a usuários com perfil de Autorizador. O parâmetro diferencia o tipo de movimento em que o bloqueio atua (venda, compra, ambos), podendo também exigir confirmação por tela de autorização ou impedir a exclusão.

Quando um Pedido ou OS já foi impresso (iST_IMPRESSAO = 'N') e o usuário não é autorizador (iAutorizador = 'N'), o parâmetro é consultado em vários pontos: ao salvar alterações, ao cancelar pedido, ao excluir itens. O tipo de pedido orçamento (TP_PEDIDO = 'O') normalmente escapa da regra.

Telas impactadas​

MóduloCódigoArquivoDescrição
Parâmetros FaturamentoMFA001UMFA001.dfm, UdmMFA001.pasConfiguração do parâmetro
Pedido de VendaMPD002UMPD002.pas, UdmMPD002.pasValida alteração/exclusão de pedido e itens (venda)
Pedido de CompraMPD001UMPD001.pas, UdmMPD001.pasValida alteração de pedido (compra)
Pedido MPD020MPD020UMPD020.pas, UdmMPD020.pasValida alteração/exclusão (variante de pedido)
Ordem de ServiçoMOF001UMOF001.pas, UdmMOF001.pasBloqueia alteração/cancelamento da OS e ReadOnly em qtde/peso de itens
Ordem de ServiçoMOF002UMOF002.pas, UdmMOF002.pasMesmo comportamento em itens de serviço
Ordem de ServiçoMOF005UdmMOF005.pasLeitura do parâmetro
Ordem de ServiçoMOF006UMOF006.pas, UdmMOF006.pasValida alteração da OS
Pedidos RecapadoraRCA006UdmRCA006.dfmCopia ST_ALTERAPEDIDO da PARMFATUR ao criar empresa
Consulta PedidosCPD009UdmCPD009.dfmCopia ST_ALTERAPEDIDO da PARMFATUR

Observação: O campo ST_ALTERAPEDIDOPALM (em MFA015 e TRD016) é um parâmetro distinto, da tabela PARMONMS, aplicado ao Palm/TRD, e não é controlado pelo parâmetro aqui documentado.

Campos envolvidos​

CampoTabelaDescrição
ST_ALTERAPEDIDOPARMFATURParâmetro principal (este documento)
ST_ALTERAPEDIDOBLOQPARMFATURParâmetro complementar — libera alteração mesmo quando ST_PEDIDO = 'B' (pedido bloqueado). Ver st_alterapedidobloq.md
iAutorizadorvariável internaIndica se o usuário logado é Autorizador (ADM012)
iST_IMPRESSAOvariável internaIndica se o pedido já passou por impressão ('N' = não impresso)
iTpPEDIDO / TP_PEDIDOPEDIDOOrçamento ('O') é geralmente liberado da regra
ST_JAINCLUSOITEMPEDIDOFlag de item já salvo (controla exclusão no MPD002)
TP_BLOQUEIOORDEMSERVICO (MOF001)'G' = bloqueio Global; combina com este parâmetro

Opções disponíveis​

Valores do combo (DFM UMFA001.dfm linhas 8533-8539): Somente na Venda → S, Somente na Compra → E, Compra e Venda → T, Não → N, Venda (Com Autorização) → A, Não (Não Permite Excluir) → P

S - Somente na Venda​

O que fazDetalhe
Alteração de Pedido VendaBloqueada para usuários não-autorizadores (MPD002, MPD020)
Exclusão de Pedido VendaBloqueada para usuários não-autorizadores
Exclusão de item já salvo (ST_JAINCLUSO = 'S')Bloqueada
Alteração de OSBloqueada combinada com TP_BLOQUEIO = 'G' (MOF001, MOF002, MOF006)
Pedido de Compra (MPD001)Livre
Orçamento (TP_PEDIDO = 'O')Livre

Simulação passo a passo​

  1. Logue com usuário não autorizador (ADM012 sem flag de autorizador)
  2. MFA001 → Ambos → Opção 1 → ST_ALTERAPEDIDO = "Somente na Venda"
  3. Salve os parâmetros (F6)
  4. Abra MPD002, localize um pedido já impresso
  5. Tente alterar qualquer campo e salvar → mensagem "Não é permitido Alterar o Pedido/Produtos. Somente usuário Autorizador !" (UMPD002.pas linha 1202 / 2288, UMPD020.pas linha 508)
  6. Tente cancelar o pedido → "Somente é permitido Cancelar Pedido se o Usuário for Autorizador" (UMPD002.pas linha 1544)
  7. Tente excluir um item já salvo → "Somente é permitido Excluir Produtos se o Usuário for Autorizador" (UMPD002.pas linha 1695)
  8. Abra MPD001 (compra) → Alteração é permitida (esta opção não atua em compra)

Resultado esperado: Somente pedidos de venda ficam travados para não-autorizadores. Compras seguem livres.


E - Somente na Compra​

O que fazDetalhe
Alteração de Pedido CompraBloqueada para não-autorizadores (MPD001)
Pedido de Venda / OSLivre

Simulação passo a passo​

  1. Usuário não autorizador
  2. MFA001 → ST_ALTERAPEDIDO = "Somente na Compra"
  3. Abra MPD001, localize um pedido de compra já impresso
  4. Tente salvar alterações → dispara JException W-0361 (UMPD001.pas linha 633-634)
  5. Abra MPD002 (venda) → Alteração permitida (esta opção não atua em venda)

Resultado esperado: Apenas Pedido de Compra fica travado. Venda e OS ficam livres.


T - Compra e Venda​

O que fazDetalhe
Alteração de Pedido VendaBloqueada (MPD002/MPD020)
Alteração de Pedido CompraBloqueada (MPD001)
Alteração de OSBloqueada combinada com TP_BLOQUEIO = 'G' (MOF001/MOF002/MOF006)
Exclusão de item já salvoBloqueada
OrçamentoLivre

Simulação passo a passo​

  1. Usuário não autorizador
  2. MFA001 → ST_ALTERAPEDIDO = "Compra e Venda"
  3. Em MPD002: tente alterar pedido de venda → bloqueia
  4. Em MPD001: tente alterar pedido de compra → bloqueia (W-0361)
  5. Em MOF001 com TP_BLOQUEIO = 'G': tente alterar OS → "Não é permitido Alterar o Pedido/Produtos. Somente usuário Autorizador !" (UMOF001.pas linha 2481)
  6. Em MOF001: tente cancelar OS → "Somente Usuário do tipo Autorizador pode Cancelar esta Ordem. Verifique!" (UMOF001.pas linha 3714)
  7. Em MOF001: os campos quantidade (QT_CONSUMOITEM) e peso (PS_CONSUMOITEM) dos itens já incluídos ficam ReadOnly = True na edição (UdmMOF001.pas linhas 514, 537, 557)

Resultado esperado: Modo "tudo travado" — compra, venda e OS só podem ser mexidos por autorizador.


N - Não (Valor Padrão)​

O que fazDetalhe
Alteração de PedidoLiberada para qualquer usuário
Exclusão de Pedido/itensLiberada
Alteração de OSLiberada

Simulação passo a passo​

  1. MFA001 → ST_ALTERAPEDIDO = "Não"
  2. Qualquer usuário (autorizador ou não) abre MPD002
  3. Altere e salve → permitido
  4. Exclua itens → permitido
  5. Cancele o pedido → permitido (desde que tenha permissão de cancelamento em ADM012)

Resultado esperado: Sem restrição via parâmetro. Este é o valor padrão ao inserir um registro novo no MFA001.


A - Venda (Com Autorização)​

O que fazDetalhe
Alteração de Pedido VendaPermitida, porém ao confirmar dispara tela de autorização (TfrmAUTORIZACAO)
Se autorização canceladaJException W-0000 'Confirmação Cancelada!' (MPD002) / cancela alteração (MPD020)
Exclusão de itensLiberada (o parâmetro 'A' não bloqueia exclusão, ver condição invertida <> 'A' em UMPD002.pas linhas 1541 e 1690)
Campos obrigatórios adicionais (Exclusividade Carlu)Com VL_MINPARCELAPEDIDO e VL_MINIMOPEDIDO preenchidos, exige CD_TRANSPORTADOR e CD_REDESPACHO (UMPD002.pas linhas 2318-2336)
Pedido Compra / OSLivre

Simulação passo a passo​

  1. Usuário não autorizador
  2. MFA001 → ST_ALTERAPEDIDO = "Venda (Com Autorização)"
  3. Abra MPD002, localize um pedido já impresso e consultado (iConsultado = 'S')
  4. Altere o pedido e clique Salvar (F6)
  5. Abre modal de Autorização (AutorizacaoConfirmaCancela em UMPD002.pas linha 1458)
  6. Se o autorizador aprova → pedido salva
  7. Se o autorizador cancela → "Confirmação Cancelada!" e pedido não salva
  8. A exclusão de itens fica liberada para o usuário comum (diferente das opções S/T)

Resultado esperado: Pedido de venda pode ser alterado pelo vendedor, mas sempre cai em aprovação de autorizador na confirmação.


P - Não (Não Permite Excluir)​

O que fazDetalhe
Alteração de PedidoLiberada
Exclusão de item único (RecordCount = 1)Bloqueada com mensagem dedicada (MPD002)
Exclusão geral via btnExcluirBloqueada para não-autorizadores (MPD020)
Cancelamento de pedidoValidação normal (não é intrinsecamente bloqueada pelo parâmetro)

Simulação passo a passo​

  1. Usuário não autorizador
  2. MFA001 → ST_ALTERAPEDIDO = "Não (Não Permite Excluir)"
  3. Abra MPD002, pedido com apenas 1 item
  4. Tente excluir o item → "A Exclusão do último item Cancela o Pedido. Somente é permitido Cancelar Pedido se o Usuário for Autorizador." (UMPD002.pas linhas 1700-1702)
  5. Em MPD020: tente clicar em btnExcluir → "Somente é permitido Cancelar Pedido/Produtos se o Usuário for Autorizador" (UMPD020.pas linha 608)
  6. Alterações (edição normal) ficam liberadas

Resultado esperado: Permite alterar o pedido, mas impede a exclusão do último item (que cancelaria o pedido) e impede a exclusão geral quando o usuário não tem permissão.


Regra Geral de Autorização​

Todos os bloqueios dependem da combinação:

(iST_IMPRESSAO = 'N') AND (iAutorizador = 'N') AND (iTpPEDIDO <> 'O')

Ou seja:

  • Usuário Autorizador (marcado em ADM012) ignora os bloqueios.
  • Orçamento (TP_PEDIDO = 'O') também ignora os bloqueios na maioria dos pontos (MPD002).
  • Pedido já impresso (ST_IMPRESSAO = 'N') é o gatilho principal: se nunca foi impresso, pode ser alterado livremente.

Em MOF001, a regra adicional é que o bloqueio só atua quando TP_BLOQUEIO = 'G' (Global) — com bloqueio por Vínculo ('V') há comportamento diferente.


Interação com ST_ALTERAPEDIDOBLOQ​

O parâmetro ST_ALTERAPEDIDOBLOQ (também em PARMFATUR, configurado no mesmo MFA001) complementa este comportamento quando o pedido está com ST_PEDIDO = 'B' (Bloqueado). Em MPD002 linhas 2290-2306 e 4099-4103:

  • ST_ALTERAPEDIDO = 'S' + ST_PEDIDO = 'B' + ST_ALTERAPEDIDOBLOQ <> 'S' → "O Pedido foi Bloqueado e está aguardando Liberação!"
  • ST_ALTERAPEDIDOBLOQ = 'A' → exige autorizador para destravar

Veja documentação separada em st_alterapedidobloq.md.


Tabela Comparativa Resumida​

OpçãoDescriçãoBloqueia Venda?Bloqueia Compra?Bloqueia OS?Bloqueia Exclusão?Autorização na Confirmação?
SSomente na VendaSimNãoSim (TP_BLOQUEIO = 'G')Sim (venda)Não
ESomente na CompraNãoSimNãoNãoNão
TCompra e VendaSimSimSim (TP_BLOQUEIO = 'G')SimNão
NNãoNãoNãoNãoNãoNão
AVenda (Com Autorização)Só na confirmaçãoNãoNãoNãoSim (modal)
PNão (Não Permite Excluir)NãoNãoNãoSim (último item e btnExcluir do MPD020)Não

Todas as restrições são ignoradas quando iAutorizador = 'S'.


Referências no Código Fonte​

Definição do campo e combo (MFA001):

  • source/MFA001/UMFA001.dfm linhas 8514-8544 — combo cmbST_ALTERAPEDIDO (opções S/E/T/N/A/P)
  • source/MFA001/UMFA001.dfm linha 7879 — label "Bloqueia Alteração de Pedido"
  • source/MFA001/UdmMFA001.pas linha 110 — declaração do campo tabPARMFATURST_ALTERAPEDIDO
  • source/MFA001/UdmMFA001.pas linha 466 — valor padrão 'N' em AfterInsert

Pedido de Venda (MPD002):

  • source/MPD002/UdmMPD002.pas linha 5741 — SELECT inclui ST_ALTERAPEDIDO
  • source/MPD002/UMPD002.pas linha 1201-1202 — bloqueia salvar (S ou T)
  • source/MPD002/UMPD002.pas linha 1458-1470 — AutorizacaoConfirmaCancela (opção A)
  • source/MPD002/UMPD002.pas linha 1541-1544 — bloqueia cancelar pedido
  • source/MPD002/UMPD002.pas linhas 1686-1703 — bloqueia excluir itens; regra especial P com último item
  • source/MPD002/UMPD002.pas linhas 2286-2288, 2290-2306 — validação em btnSalvar
  • source/MPD002/UMPD002.pas linhas 2318-2336 — campos adicionais para opção A (Carlu)

Pedido de Compra (MPD001):

  • source/MPD001/UdmMPD001.pas linhas 252, 267 — leitura do parâmetro
  • source/MPD001/UMPD001.pas linha 633-634 — bloqueia salvar (E ou T) com W-0361

Variante de Pedido (MPD020):

  • source/MPD020/UdmMPD020.pas linhas 321, 359 — leitura do parâmetro
  • source/MPD020/UdmMPD020.pas linhas 2670-2701 — função ValidaPermissao (S/T bloqueia, A abre autorização)
  • source/MPD020/UMPD020.pas linhas 507-508, 685-686 — bloqueia salvar
  • source/MPD020/UMPD020.pas linhas 607-608 — bloqueia exclusão (opção P)

Ordem de Serviço (MOF001):

  • source/MOF001/UdmMOF001.pas linhas 725, 749 — leitura do parâmetro
  • source/MOF001/UdmMOF001.pas linhas 514, 537, 557 — ReadOnly em QT_CONSUMOITEM/PS_CONSUMOITEM quando 'S'/'T' e TP_BLOQUEIO = 'G'
  • source/MOF001/UdmMOF001.pas linhas 2313, 3475, 3500, 3524, 3584, 6068 — outros pontos de bloqueio
  • source/MOF001/UMOF001.pas linha 2480-2481 — bloqueia alteração da OS
  • source/MOF001/UMOF001.pas linha 3713-3714 — bloqueia cancelamento da OS
  • source/MOF001/UMOF001.pas linha 6539-6541 — lógica invertida na exclusão de item (permite quando não é S/T)

Ordem de Serviço (MOF002):

  • source/MOF002/UdmMOF002.pas linhas 297, 319 — leitura
  • source/MOF002/UdmMOF002.pas linhas 1354, 1379, 1403, 1460 — ReadOnly em itens de serviço
  • source/MOF002/UMOF002.pas linha 1185 — validação

Ordem de Serviço (MOF005 / MOF006):

  • source/MOF005/UdmMOF005.pas linhas 226, 244 — leitura
  • source/MOF006/UdmMOF006.pas linhas 298, 319 — leitura
  • source/MOF006/UMOF006.pas linha 393-394 — bloqueia alteração

Replicação em outras telas (SELECT/INSERT/UPDATE da PARMFATUR):

  • source/RCA006/UdmRCA006.dfm linhas 3046, 3112, 3194, 3328 — parâmetro é propagado na criação de empresas recapadora
  • source/CPD009/UdmCPD009.dfm linhas 297, 363, 445, 579 — idem em CPD009

Procedures SQL: nenhuma (grep em Scripts/ não retornou resultados — o parâmetro é consumido exclusivamente pelo front Delphi).