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.dfmlinha 7879 / combocmbST_ALTERAPEDIDOlinhas 8514-8544) Tabela:PARMFATUR.ST_ALTERAPEDIDOValor padrão:N(Não bloqueia) — definido emUdmMFA001.paslinha 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ódulo | Código | Arquivo | Descrição |
|---|---|---|---|
| Parâmetros Faturamento | MFA001 | UMFA001.dfm, UdmMFA001.pas | Configuração do parâmetro |
| Pedido de Venda | MPD002 | UMPD002.pas, UdmMPD002.pas | Valida alteração/exclusão de pedido e itens (venda) |
| Pedido de Compra | MPD001 | UMPD001.pas, UdmMPD001.pas | Valida alteração de pedido (compra) |
| Pedido MPD020 | MPD020 | UMPD020.pas, UdmMPD020.pas | Valida alteração/exclusão (variante de pedido) |
| Ordem de Serviço | MOF001 | UMOF001.pas, UdmMOF001.pas | Bloqueia alteração/cancelamento da OS e ReadOnly em qtde/peso de itens |
| Ordem de Serviço | MOF002 | UMOF002.pas, UdmMOF002.pas | Mesmo comportamento em itens de serviço |
| Ordem de Serviço | MOF005 | UdmMOF005.pas | Leitura do parâmetro |
| Ordem de Serviço | MOF006 | UMOF006.pas, UdmMOF006.pas | Valida alteração da OS |
| Pedidos Recapadora | RCA006 | UdmRCA006.dfm | Copia ST_ALTERAPEDIDO da PARMFATUR ao criar empresa |
| Consulta Pedidos | CPD009 | UdmCPD009.dfm | Copia ST_ALTERAPEDIDO da PARMFATUR |
Observação: O campo
ST_ALTERAPEDIDOPALM(em MFA015 e TRD016) é um parâmetro distinto, da tabelaPARMONMS, aplicado ao Palm/TRD, e não é controlado pelo parâmetro aqui documentado.
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_ALTERAPEDIDO | PARMFATUR | Parâmetro principal (este documento) |
ST_ALTERAPEDIDOBLOQ | PARMFATUR | Parâmetro complementar — libera alteração mesmo quando ST_PEDIDO = 'B' (pedido bloqueado). Ver st_alterapedidobloq.md |
iAutorizador | variável interna | Indica se o usuário logado é Autorizador (ADM012) |
iST_IMPRESSAO | variável interna | Indica se o pedido já passou por impressão ('N' = não impresso) |
iTpPEDIDO / TP_PEDIDO | PEDIDO | Orçamento ('O') é geralmente liberado da regra |
ST_JAINCLUSO | ITEMPEDIDO | Flag de item já salvo (controla exclusão no MPD002) |
TP_BLOQUEIO | ORDEMSERVICO (MOF001) | 'G' = bloqueio Global; combina com este parâmetro |
Opções disponíveis
Valores do combo (DFM
UMFA001.dfmlinhas 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 faz | Detalhe |
|---|---|
| Alteração de Pedido Venda | Bloqueada para usuários não-autorizadores (MPD002, MPD020) |
| Exclusão de Pedido Venda | Bloqueada para usuários não-autorizadores |
Exclusão de item já salvo (ST_JAINCLUSO = 'S') | Bloqueada |
| Alteração de OS | Bloqueada combinada com TP_BLOQUEIO = 'G' (MOF001, MOF002, MOF006) |
| Pedido de Compra (MPD001) | Livre |
Orçamento (TP_PEDIDO = 'O') | Livre |
Simulação passo a passo
- Logue com usuário não autorizador (
ADM012sem flag de autorizador) - MFA001 → Ambos → Opção 1 → ST_ALTERAPEDIDO = "Somente na Venda"
- Salve os parâmetros (F6)
- Abra MPD002, localize um pedido já impresso
- Tente alterar qualquer campo e salvar → mensagem "Não é permitido Alterar o Pedido/Produtos. Somente usuário Autorizador !" (
UMPD002.paslinha 1202 / 2288,UMPD020.paslinha 508) - Tente cancelar o pedido → "Somente é permitido Cancelar Pedido se o Usuário for Autorizador" (
UMPD002.paslinha 1544) - Tente excluir um item já salvo → "Somente é permitido Excluir Produtos se o Usuário for Autorizador" (
UMPD002.paslinha 1695) - 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 faz | Detalhe |
|---|---|
| Alteração de Pedido Compra | Bloqueada para não-autorizadores (MPD001) |
| Pedido de Venda / OS | Livre |
Simulação passo a passo
- Usuário não autorizador
- MFA001 → ST_ALTERAPEDIDO = "Somente na Compra"
- Abra MPD001, localize um pedido de compra já impresso
- Tente salvar alterações → dispara
JException W-0361(UMPD001.paslinha 633-634) - 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 faz | Detalhe |
|---|---|
| Alteração de Pedido Venda | Bloqueada (MPD002/MPD020) |
| Alteração de Pedido Compra | Bloqueada (MPD001) |
| Alteração de OS | Bloqueada combinada com TP_BLOQUEIO = 'G' (MOF001/MOF002/MOF006) |
| Exclusão de item já salvo | Bloqueada |
| Orçamento | Livre |
Simulação passo a passo
- Usuário não autorizador
- MFA001 → ST_ALTERAPEDIDO = "Compra e Venda"
- Em MPD002: tente alterar pedido de venda → bloqueia
- Em MPD001: tente alterar pedido de compra → bloqueia (
W-0361) - Em MOF001 com
TP_BLOQUEIO = 'G': tente alterar OS → "Não é permitido Alterar o Pedido/Produtos. Somente usuário Autorizador !" (UMOF001.paslinha 2481) - Em MOF001: tente cancelar OS → "Somente Usuário do tipo Autorizador pode Cancelar esta Ordem. Verifique!" (
UMOF001.paslinha 3714) - Em MOF001: os campos quantidade (
QT_CONSUMOITEM) e peso (PS_CONSUMOITEM) dos itens já incluídos ficamReadOnly = Truena edição (UdmMOF001.paslinhas 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 faz | Detalhe |
|---|---|
| Alteração de Pedido | Liberada para qualquer usuário |
| Exclusão de Pedido/itens | Liberada |
| Alteração de OS | Liberada |
Simulação passo a passo
- MFA001 → ST_ALTERAPEDIDO = "Não"
- Qualquer usuário (autorizador ou não) abre MPD002
- Altere e salve → permitido
- Exclua itens → permitido
- 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 faz | Detalhe |
|---|---|
| Alteração de Pedido Venda | Permitida, porém ao confirmar dispara tela de autorização (TfrmAUTORIZACAO) |
| Se autorização cancelada | JException W-0000 'Confirmação Cancelada!' (MPD002) / cancela alteração (MPD020) |
| Exclusão de itens | Liberada (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 / OS | Livre |
Simulação passo a passo
- Usuário não autorizador
- MFA001 → ST_ALTERAPEDIDO = "Venda (Com Autorização)"
- Abra MPD002, localize um pedido já impresso e consultado (
iConsultado = 'S') - Altere o pedido e clique Salvar (F6)
- Abre modal de Autorização (
AutorizacaoConfirmaCancelaemUMPD002.paslinha 1458) - Se o autorizador aprova → pedido salva
- Se o autorizador cancela → "Confirmação Cancelada!" e pedido não salva
- 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 faz | Detalhe |
|---|---|
| Alteração de Pedido | Liberada |
Exclusão de item único (RecordCount = 1) | Bloqueada com mensagem dedicada (MPD002) |
| Exclusão geral via btnExcluir | Bloqueada para não-autorizadores (MPD020) |
| Cancelamento de pedido | Validação normal (não é intrinsecamente bloqueada pelo parâmetro) |
Simulação passo a passo
- Usuário não autorizador
- MFA001 → ST_ALTERAPEDIDO = "Não (Não Permite Excluir)"
- Abra MPD002, pedido com apenas 1 item
- Tente excluir o item → "A Exclusão do último item Cancela o Pedido. Somente é permitido Cancelar Pedido se o Usuário for Autorizador." (
UMPD002.paslinhas 1700-1702) - Em MPD020: tente clicar em btnExcluir → "Somente é permitido Cancelar Pedido/Produtos se o Usuário for Autorizador" (
UMPD020.paslinha 608) - 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ção | Descrição | Bloqueia Venda? | Bloqueia Compra? | Bloqueia OS? | Bloqueia Exclusão? | Autorização na Confirmação? |
|---|---|---|---|---|---|---|
| S | Somente na Venda | Sim | Não | Sim (TP_BLOQUEIO = 'G') | Sim (venda) | Não |
| E | Somente na Compra | Não | Sim | Não | Não | Não |
| T | Compra e Venda | Sim | Sim | Sim (TP_BLOQUEIO = 'G') | Sim | Não |
| N | Não | Não | Não | Não | Não | Não |
| A | Venda (Com Autorização) | Só na confirmação | Não | Não | Não | Sim (modal) |
| P | Não (Não Permite Excluir) | Não | Não | Não | Sim (ú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.dfmlinhas 8514-8544 — combocmbST_ALTERAPEDIDO(opçõesS/E/T/N/A/P)source/MFA001/UMFA001.dfmlinha 7879 — label "Bloqueia Alteração de Pedido"source/MFA001/UdmMFA001.paslinha 110 — declaração do campotabPARMFATURST_ALTERAPEDIDOsource/MFA001/UdmMFA001.paslinha 466 — valor padrão'N'emAfterInsert
Pedido de Venda (MPD002):
source/MPD002/UdmMPD002.paslinha 5741 — SELECT incluiST_ALTERAPEDIDOsource/MPD002/UMPD002.paslinha 1201-1202 — bloqueia salvar (SouT)source/MPD002/UMPD002.paslinha 1458-1470 —AutorizacaoConfirmaCancela(opçãoA)source/MPD002/UMPD002.paslinha 1541-1544 — bloqueia cancelar pedidosource/MPD002/UMPD002.paslinhas 1686-1703 — bloqueia excluir itens; regra especialPcom último itemsource/MPD002/UMPD002.paslinhas 2286-2288, 2290-2306 — validação embtnSalvarsource/MPD002/UMPD002.paslinhas 2318-2336 — campos adicionais para opçãoA(Carlu)
Pedido de Compra (MPD001):
source/MPD001/UdmMPD001.paslinhas 252, 267 — leitura do parâmetrosource/MPD001/UMPD001.paslinha 633-634 — bloqueia salvar (EouT) comW-0361
Variante de Pedido (MPD020):
source/MPD020/UdmMPD020.paslinhas 321, 359 — leitura do parâmetrosource/MPD020/UdmMPD020.paslinhas 2670-2701 — funçãoValidaPermissao(S/Tbloqueia,Aabre autorização)source/MPD020/UMPD020.paslinhas 507-508, 685-686 — bloqueia salvarsource/MPD020/UMPD020.paslinhas 607-608 — bloqueia exclusão (opçãoP)
Ordem de Serviço (MOF001):
source/MOF001/UdmMOF001.paslinhas 725, 749 — leitura do parâmetrosource/MOF001/UdmMOF001.paslinhas 514, 537, 557 — ReadOnly emQT_CONSUMOITEM/PS_CONSUMOITEMquando'S'/'T'eTP_BLOQUEIO = 'G'source/MOF001/UdmMOF001.paslinhas 2313, 3475, 3500, 3524, 3584, 6068 — outros pontos de bloqueiosource/MOF001/UMOF001.paslinha 2480-2481 — bloqueia alteração da OSsource/MOF001/UMOF001.paslinha 3713-3714 — bloqueia cancelamento da OSsource/MOF001/UMOF001.paslinha 6539-6541 — lógica invertida na exclusão de item (permite quando não éS/T)
Ordem de Serviço (MOF002):
source/MOF002/UdmMOF002.paslinhas 297, 319 — leiturasource/MOF002/UdmMOF002.paslinhas 1354, 1379, 1403, 1460 — ReadOnly em itens de serviçosource/MOF002/UMOF002.paslinha 1185 — validação
Ordem de Serviço (MOF005 / MOF006):
source/MOF005/UdmMOF005.paslinhas 226, 244 — leiturasource/MOF006/UdmMOF006.paslinhas 298, 319 — leiturasource/MOF006/UMOF006.paslinha 393-394 — bloqueia alteração
Replicação em outras telas (SELECT/INSERT/UPDATE da PARMFATUR):
source/RCA006/UdmRCA006.dfmlinhas 3046, 3112, 3194, 3328 — parâmetro é propagado na criação de empresas recapadorasource/CPD009/UdmCPD009.dfmlinhas 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).