Pular para o conteúdo principal

ST_BLOQUEIAALTERACAOPRECO - Bloqueio de Alteração de Preços nas Telas de Cadastro

Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 (rótulo no formulário: Bloqueia Alteração Preços [TPO001/TOF007]) Tabela: PARMFATUR.ST_BLOQUEIAALTERACAOPRECO Tipo: TStringField (1 caractere — 'S' / 'N') Valor padrão: N (não bloqueia — atribuído em UdmMFA001.pas:559)

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cadastra/edita o valor
Cadastro de ProdutoTPO001Consumidora direta — bloqueia edição dos campos de preço/margem nas grids ITEMTABPRECO, ITEMTABCOMPRA e tela TEQ004
Outra Cadastro de Item (ficha de item)TOF007Consumidora direta — bloqueia editVL_PRECO, editPC_MARGEMLUCRO, editVL_CUSTO e a tela de Remarcação de Preços (grids do formRemarcacao)

O parâmetro é lido apenas pelas telas de cadastro de produto/item. Ele não afeta telas de venda (pedidos/NFs). Para restringir preço em venda, use o parâmetro ST_TABPRECO e PC_DESCONTOMAX.

Campos envolvidos​

CampoTabelaDescrição
ST_BLOQUEIAALTERACAOPRECOPARMFATURLiga ('S') ou desliga ('N') o bloqueio das telas de cadastro de preço/margem
CD_MODULO, TP_ACESSOACESSOUsados pelo consumidor para verificar se o usuário logado tem acesso (TP_ACESSO = '1') aos módulos TFA006 (tabela de venda), TFA010 (tabela de compra) e TEQ004 (despesas/produção)
VL_PRECO, PC_MARGEM, PC_MARGEMITEM, VL_PRECOMINIMO, VL_PRECOMAXIMO, PC_DESCONTOMAXIMOITEMTABPRECOCampos tornados ReadOnly quando o bloqueio dispara
VL_PRECO, PC_MARGEMSEGURANCAITEMTABCOMPRACampos tornados ReadOnly para a aba de preços de compra

Opções disponíveis​

S - Bloqueia Alteração de Preços (com liberação por acesso)​

O que fazDetalhe
TPO001Ao abrir um item, ValidaUsuario consulta a tabela ACESSO para os módulos TFA006, TFA010 e TEQ004. Para cada módulo em que o usuário não tem acesso (TP_ACESSO = '0' ou inexistente):
• grid ITEMTABPRECO — CD_TABPRECO, DS_TABPRECO, PC_MARGEM, PC_MARGEMITEM, VL_PRECO, PC_DESCONTOMAXIMO, VL_PRECOMINIMO, VL_PRECOMAXIMO viram ReadOnly; colunas 0/3/4 recebem cor cinza ($00EEEEEE) e fonte escura
• grid ITEMTABCOMPRA — CD_TABCOMPRA, DS_TABCOMPRA, PC_MARGEMSEGURANCA, VL_PRECO viram ReadOnly
• aba de despesas/produção (TEQ004) — cmbTP_DESPESA, edtDS_ITEM3, cmbTP_PRODUCAO, gridITEMPRODUCAO, edtDS_HISTORICO, edtTIPOLOCALORIGEM, edtSG_UNIDMED1, memDS_RECEITA viram ReadOnly e o OnKeyDown do grid é anulado
• NewRecord das grids ITEMTABPRECO / ITEMTABCOMPRA cancela a inserção (DataSet.Cancel) quando o respectivo stBloq está ativo
TOF007 — ficha de itemeditPC_MARGEMLUCRO, editVL_PRECO e o gridTabPreco começam como ReadOnly (edição desabilitada via gridTabPreco.Options - [dgEditing]). Se o usuário tem TP_ACESSO = '1' em TFA006, liberam-se. editVL_CUSTO é liberado apenas se o usuário tem TP_ACESSO = '1' em TFA010
TOF007 — Remarcação de PreçosformRemarcacao bloqueia colunas 2, 5 e 7 do grid de itens, colunas 2 e 5 do grid de tabelas de preço, Button1, btnATUALIZARPC_CUSTOANTIGO, editCD_CODIGOBARRA, edtPC_CUSTOANTIGO. Libera somente quando o usuário tem TP_ACESSO = '1' em TFA006 (e TFA010 para a coluna 6 de custo)
Regra comumO usuário com acesso ao módulo correspondente (TP_ACESSO = '1') continua podendo editar — o bloqueio é por permissão individual em ACESSO

Simulação passo a passo​

  1. MFA001 → aba Ambos → Opção 1 → campo Bloqueia Alteração Preços [TPO001/TOF007] = Acesso TFA006/TFA010.
  2. Salve os parâmetros (F6).
  3. No módulo ADM005 (acessos), remova o acesso do usuário X ao módulo TFA006.
  4. Faça login com o usuário X e abra o TPO001.
  5. Carregue um produto qualquer e vá até a aba Tabela de Preços.
  6. Tente clicar em VL_PRECO ou PC_MARGEM → grid fica cinza e não permite edição; a fonte fica em tom escuro ($009D6A00).
  7. Tente inserir uma nova linha no grid → NewRecord cancela a inserção silenciosamente.
  8. Faça o mesmo teste no TOF007 → campos Preço, % Margem Lucro e o grid de tabelas ficam bloqueados.
  9. Volte no ADM005 e conceda TP_ACESSO = '1' em TFA006 para o usuário → ao reabrir os cadastros, os campos voltam a ser editáveis.

Resultado esperado: o cadastro continua acessível (o usuário pode cadastrar/alterar item, grupo, marca, etc.), mas os valores monetários e as margens ficam protegidos, exigindo permissão explícita em TFA006 / TFA010 / TEQ004 para edição.


N - Não Bloqueia (livre)​

O que fazDetalhe
TPO001O bloco if (iST_BloqueiaAlteracaoPreco = 'S') de ValidaUsuario é pulado — nenhuma consulta a ACESSO, nenhum ReadOnly aplicado, stBloqTFA006/TFA010/TEQ004 permanecem False
TOF007O bloco if (Resultado[0] = 'S') de formITEMShow / abertura da Remarcação é pulado — editVL_PRECO, editPC_MARGEMLUCRO, editVL_CUSTO ficam com comportamento padrão (editáveis conforme o componente)
PermissãoNão é consultada — qualquer usuário com acesso à tela de cadastro pode mexer nos preços

Simulação passo a passo​

  1. MFA001 → Bloqueia Alteração Preços [TPO001/TOF007] = Não.
  2. Salve os parâmetros (F6).
  3. Abra o TPO001 com qualquer usuário que tenha acesso à tela.
  4. Carregue um item e altere VL_PRECO diretamente no grid de tabela de preços → salva normalmente.
  5. Repita no TOF007 e na tela de Remarcação → todos os campos aceitam edição.

Resultado esperado: política aberta — qualquer usuário com acesso à tela edita livremente preços e margens, sem checagem de acesso adicional.

Este é o valor padrão atribuído em AfterInsert (UdmMFA001.pas:559).


Interação com outros parâmetros (ST_TABPRECO / PC_DESCONTOMAX / PC_DESCONTOPED)​

ST_BLOQUEIAALTERACAOPRECO atua em telas de cadastro de produto/tabela (TPO001, TOF007), controlando quem pode manter o preço de catálogo. Os parâmetros ST_TABPRECO, PC_DESCONTOMAX e PC_DESCONTOPED atuam em telas de movimento (pedidos / notas), controlando quem pode conceder desconto/alterar preço praticado na venda. Os dois universos são independentes:

DimensãoST_BLOQUEIAALTERACAOPRECOST_TABPRECOPC_DESCONTOMAX / PC_DESCONTOPED
Onde ageCadastro (TPO001, TOF007)Movimento (MPD002, MNF002, MPD018, MOF001, MRC020, MPD001, MNF001, MRC047)Movimento (NFs / Pedidos) — via procedure VERIFICA_BLOQUEIO
O que protegePreço tabelado (o dado-fonte: ITEMTABPRECO.VL_PRECO, ITEMTABCOMPRA.VL_PRECO, margens)Uso da tabela na venda (editar CD_TABPRECO/VL_UNITARIO do item do pedido/NF)Percentual de desconto aplicado no total do documento
Modo de liberaçãoPermissão por usuário em ACESSO nos módulos TFA006/TFA010/TEQ004Permissão por usuário St_AlteraPreco = True em PARMUSUARIOPermissão por usuário PARMUSUARIO.PC_DESCONTOMAX ou limite por item ITEMTABPRECO.PC_DESCONTOMAXIMO
Quem consultaCódigo Delphi (TPO001/UdmTPO001.pas, TOF007/UformITEM.pas, UTOF007.pas)Código Delphi das telas de movimento + jCommonProcedure Scripts/VERIFICA_BLOQUEIO.sql + MNF017
Fluxo típicoAdministrador cadastra preço → apenas pessoal de preços editaVendedor usa o preço cadastrado sem poder alterá-loVendedor dá desconto até o teto

Cenário combinado:

  • Preço cadastrado protegido + venda obrigatória pela tabela: ST_BLOQUEIAALTERACAOPRECO = 'S' (restringe manutenção do catálogo) + ST_TABPRECO = 'B' ou 'V' (campo VL_UNITARIO bloqueado no pedido) + PC_DESCONTOMAX = 0 ou valor baixo (bloqueia desconto fora do teto). Resultado: tripla barreira — preço só muda via pessoal autorizado no cadastro, vendedor não altera unitário no pedido, vendedor não burla via desconto.
  • Política aberta: ST_BLOQUEIAALTERACAOPRECO = 'N' + ST_TABPRECO = 'N' + PC_DESCONTOMAX vazio/NULL → qualquer usuário com acesso às telas pode cadastrar/praticar qualquer preço.

Observação importante: o parâmetro atua apenas nas telas acima listadas. Outras telas de manutenção de preço (ex.: MRC028 — alterações em lote, TFA006 direto, etc.) não leem este parâmetro e devem ser protegidas via permissão de módulo em ACESSO diretamente.


Tabela Comparativa Resumida​

OpçãoDescriçãoValida ACESSO em TFA006/TFA010/TEQ004?Afeta TPO001?Afeta TOF007 + Remarcação?
SBloqueia Alteração Preços (com liberação por acesso)SimSim — grids ITEMTABPRECO, ITEMTABCOMPRA e aba TEQ004 ficam ReadOnly para quem não tem acessoSim — editVL_PRECO, editPC_MARGEMLUCRO, editVL_CUSTO e formRemarcacao ficam ReadOnly para quem não tem acesso
NNão bloqueia (padrão)NãoNãoNão

Referências no Código Fonte​

Delphi — Produtor (MFA001)​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm3921-3934Label93 com caption 'Bloqueia Alteração Preços [TPO001/TOF007]'
source/MFA001/UMFA001.dfm4561-4587cmbST_BLOQUEIAALTERACAOPRECO: TwwDBComboBox (DataField = 'ST_BLOQUEIAALTERACAOPRECO') com Items.Strings = ('Acesso TFA006/TFA010'#9'S', 'Não'#9'N')
source/MFA001/UMFA001.pas505Declaração do cmbST_BLOQUEIAALTERACAOPRECO: TwwDBComboBox
source/MFA001/UdmMFA001.dfm280, 1877-1879, 2860, 3160Field TStringField, cláusulas SELECT/UPDATE do PARMFATUR
source/MFA001/UdmMFA001.pas266Declaração do field tabPARMFATURST_BLOQUEIAALTERACAOPRECO: TStringField
source/MFA001/UdmMFA001.pas559AfterInsert atribui 'N' como valor padrão

Delphi — Consumidores​

ArquivoLinhasPapel
source/TPO001/UTPO001.pas964-984SELECT de ST_BLOQUEIAALTERACAOPRECO em PARMFATUR, popula dmTPO001.iST_BloqueiaAlteracaoPreco
source/TPO001/UdmTPO001.pas620Declaração da variável membro iST_BloqueiaAlteracaoPreco: string
source/TPO001/UdmTPO001.pas3030-3114ValidaUsuario — se 'S', consulta ACESSO (TFA006, TFA010, TEQ004) e aplica ReadOnly nos grids ITEMTABPRECO, ITEMTABCOMPRA e nos controles de despesa/produção. Campos afetados incluem CD_TABPRECO, DS_TABPRECO, PC_MARGEM, PC_MARGEMITEM, VL_PRECO, PC_DESCONTOMAXIMO, VL_PRECOMINIMO, VL_PRECOMAXIMO (tabela de venda) e CD_TABCOMPRA, DS_TABCOMPRA, PC_MARGEMSEGURANCA, VL_PRECO (tabela de compra)
source/TPO001/UdmTPO001.pas3116-3126tabITEMTABPRECONewRecord / tabITEMTABCOMPRANewRecord — cancelam inserção quando stBloqTFA006 / stBloqTFA010 estão ativos
source/TOF007/UformITEM.pas695-739{Chamado 180807} — SELECT de ST_BLOQUEIAALTERACAOPRECO; se 'S', bloqueia editPC_MARGEMLUCRO, editVL_PRECO, editVL_CUSTO e remove opção de edição do gridTabPreco; libera conforme TP_ACESSO em TFA006 / TFA010
source/TOF007/UTOF007.pas799-857{Chamado 247176} — SELECT de ST_BLOQUEIAALTERACAOPRECO; se 'S', bloqueia colunas 2, 5, 7 de formRemarcacao.gridITEM, colunas 2, 5 de gridTabPreco, botões Button1, btnATUALIZARPC_CUSTOANTIGO, campos editCD_CODIGOBARRA, edtPC_CUSTOANTIGO; libera conforme TP_ACESSO em TFA006 / TFA010

SQL (Firebird)​

ArquivoPapel
docs/schema/tables/PARMFATUR.sqlDDL do campo ST_BLOQUEIAALTERACAOPRECO

Não há stored procedures que consumam este parâmetro — toda a lógica de bloqueio é aplicada em código Delphi, diretamente nas telas de cadastro.