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_BLOQUEIAALTERACAOPRECOTipo:TStringField(1 caractere — 'S' / 'N') Valor padrão:N(não bloqueia — atribuído emUdmMFA001.pas:559)
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita o valor |
| Cadastro de Produto | TPO001 | Consumidora direta — bloqueia edição dos campos de preço/margem nas grids ITEMTABPRECO, ITEMTABCOMPRA e tela TEQ004 |
| Outra Cadastro de Item (ficha de item) | TOF007 | Consumidora 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
| Campo | Tabela | Descrição |
|---|---|---|
ST_BLOQUEIAALTERACAOPRECO | PARMFATUR | Liga ('S') ou desliga ('N') o bloqueio das telas de cadastro de preço/margem |
CD_MODULO, TP_ACESSO | ACESSO | Usados 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_DESCONTOMAXIMO | ITEMTABPRECO | Campos tornados ReadOnly quando o bloqueio dispara |
VL_PRECO, PC_MARGEMSEGURANCA | ITEMTABCOMPRA | Campos 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 faz | Detalhe |
|---|---|
| TPO001 | Ao 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 item | editPC_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ços | formRemarcacao 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 comum | O 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
- MFA001 → aba Ambos → Opção 1 → campo Bloqueia Alteração Preços [TPO001/TOF007] =
Acesso TFA006/TFA010. - Salve os parâmetros (F6).
- No módulo ADM005 (acessos), remova o acesso do usuário X ao módulo
TFA006. - Faça login com o usuário X e abra o TPO001.
- Carregue um produto qualquer e vá até a aba Tabela de Preços.
- Tente clicar em
VL_PRECOouPC_MARGEM→ grid fica cinza e não permite edição; a fonte fica em tom escuro ($009D6A00). - Tente inserir uma nova linha no grid →
NewRecordcancela a inserção silenciosamente. - Faça o mesmo teste no TOF007 → campos
Preço,% Margem Lucroe o grid de tabelas ficam bloqueados. - Volte no ADM005 e conceda
TP_ACESSO = '1'emTFA006para 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 faz | Detalhe |
|---|---|
| TPO001 | O bloco if (iST_BloqueiaAlteracaoPreco = 'S') de ValidaUsuario é pulado — nenhuma consulta a ACESSO, nenhum ReadOnly aplicado, stBloqTFA006/TFA010/TEQ004 permanecem False |
| TOF007 | O 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ão | Não é consultada — qualquer usuário com acesso à tela de cadastro pode mexer nos preços |
Simulação passo a passo
- MFA001 → Bloqueia Alteração Preços [TPO001/TOF007] =
Não. - Salve os parâmetros (F6).
- Abra o TPO001 com qualquer usuário que tenha acesso à tela.
- Carregue um item e altere
VL_PRECOdiretamente no grid de tabela de preços → salva normalmente. - 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ão | ST_BLOQUEIAALTERACAOPRECO | ST_TABPRECO | PC_DESCONTOMAX / PC_DESCONTOPED |
|---|---|---|---|
| Onde age | Cadastro (TPO001, TOF007) | Movimento (MPD002, MNF002, MPD018, MOF001, MRC020, MPD001, MNF001, MRC047) | Movimento (NFs / Pedidos) — via procedure VERIFICA_BLOQUEIO |
| O que protege | Preç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ção | Permissão por usuário em ACESSO nos módulos TFA006/TFA010/TEQ004 | Permissão por usuário St_AlteraPreco = True em PARMUSUARIO | Permissão por usuário PARMUSUARIO.PC_DESCONTOMAX ou limite por item ITEMTABPRECO.PC_DESCONTOMAXIMO |
| Quem consulta | Código Delphi (TPO001/UdmTPO001.pas, TOF007/UformITEM.pas, UTOF007.pas) | Código Delphi das telas de movimento + jCommon | Procedure Scripts/VERIFICA_BLOQUEIO.sql + MNF017 |
| Fluxo típico | Administrador cadastra preço → apenas pessoal de preços edita | Vendedor usa o preço cadastrado sem poder alterá-lo | Vendedor 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'(campoVL_UNITARIObloqueado no pedido) +PC_DESCONTOMAX = 0ou 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_DESCONTOMAXvazio/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ção | Descrição | Valida ACESSO em TFA006/TFA010/TEQ004? | Afeta TPO001? | Afeta TOF007 + Remarcação? |
|---|---|---|---|---|
| S | Bloqueia Alteração Preços (com liberação por acesso) | Sim | Sim — grids ITEMTABPRECO, ITEMTABCOMPRA e aba TEQ004 ficam ReadOnly para quem não tem acesso | Sim — editVL_PRECO, editPC_MARGEMLUCRO, editVL_CUSTO e formRemarcacao ficam ReadOnly para quem não tem acesso |
| N | Não bloqueia (padrão) | Não | Não | Não |
Referências no Código Fonte
Delphi — Produtor (MFA001)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 3921-3934 | Label93 com caption 'Bloqueia Alteração Preços [TPO001/TOF007]' |
source/MFA001/UMFA001.dfm | 4561-4587 | cmbST_BLOQUEIAALTERACAOPRECO: TwwDBComboBox (DataField = 'ST_BLOQUEIAALTERACAOPRECO') com Items.Strings = ('Acesso TFA006/TFA010'#9'S', 'Não'#9'N') |
source/MFA001/UMFA001.pas | 505 | Declaração do cmbST_BLOQUEIAALTERACAOPRECO: TwwDBComboBox |
source/MFA001/UdmMFA001.dfm | 280, 1877-1879, 2860, 3160 | Field TStringField, cláusulas SELECT/UPDATE do PARMFATUR |
source/MFA001/UdmMFA001.pas | 266 | Declaração do field tabPARMFATURST_BLOQUEIAALTERACAOPRECO: TStringField |
source/MFA001/UdmMFA001.pas | 559 | AfterInsert atribui 'N' como valor padrão |
Delphi — Consumidores
| Arquivo | Linhas | Papel |
|---|---|---|
source/TPO001/UTPO001.pas | 964-984 | SELECT de ST_BLOQUEIAALTERACAOPRECO em PARMFATUR, popula dmTPO001.iST_BloqueiaAlteracaoPreco |
source/TPO001/UdmTPO001.pas | 620 | Declaração da variável membro iST_BloqueiaAlteracaoPreco: string |
source/TPO001/UdmTPO001.pas | 3030-3114 | ValidaUsuario — 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.pas | 3116-3126 | tabITEMTABPRECONewRecord / tabITEMTABCOMPRANewRecord — cancelam inserção quando stBloqTFA006 / stBloqTFA010 estão ativos |
source/TOF007/UformITEM.pas | 695-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.pas | 799-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)
| Arquivo | Papel |
|---|---|
docs/schema/tables/PARMFATUR.sql | DDL 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.