ST_ATUALIZATABPRECO - Atualiza Tab. Preço Venda na Compra
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (label visível: "Atualiza Tab. Preço Venda na Compra" —
UMFA001.dfm:6291) Tabela:PARMFATUR.ST_ATUALIZATABPRECO(VARCHAR(1)) Valor padrão:N(Não) — definido emUdmMFA001.pas:514
Este parâmetro define qual valor (o "antigo" digitado pelo usuário ou o "de venda" calculado pela procedure RECALCULA_PRECOVENDA) é gravado na tabela ITEMTABPRECO quando o usuário confirma o Custo de Reposição Manual em uma Nota Fiscal de Entrada (MNF001). Ele só atua quando a entrada dispara a tela auxiliar frmCUSTOREPOSICAONF — ou seja, quando ST_CUSTOREPOSICAO da NF vale 'M' ou 'T' (UMNF001.pas:2519).
Telas impactadas
| Módulo | Código | Descrição | Uso |
|---|---|---|---|
| Parâmetros de Faturamento | MFA001 | Tela de configuração do parâmetro (combo cmbST_ATUALIZATABPRECO, UMFA001.dfm:7169) | Leitura/gravação |
| NF de Entrada — Custo Reposição | MNF001 | Subtela TfrmCUSTOREPOSICAONF (UCUSTOREPOSICAONF.pas) — usa o parâmetro em FormShow (linha 412) para habilitar/desabilitar colunas do grid e em btnOKClick (linha 213) para decidir qual valor gravar em ITEMTABPRECO | Leitura |
Procedures impactadas
| Procedure | Arquivo | Descrição |
|---|---|---|
RECALCULA_PRECOVENDA | (chamada em UCUSTOREPOSICAONF.pas:205-211) | Procedure executada antes do UPDATE em ITEMTABPRECO. Recalcula o preço de venda com base no novo custo. O retorno (O_DS_MENSAGEM) serve apenas para validação; o valor persistido depende do parâmetro ST_ATUALIZATABPRECO + campos VL_ANTIGO / VL_VENDA do grid. |
Observação: O parâmetro não é referenciado em nenhum script SQL em
Scripts/. Toda a decisão é feita no Delphi (UCUSTOREPOSICAONF.pas).
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_ATUALIZATABPRECO | Parâmetro em si ('S' / 'N'). |
PARMFATUR.QT_CASASDECIMAISPRECOVENDA | Lido em conjunto para montar o CAST(... AS NUMERIC(15, N)) do UPDATE (UCUSTOREPOSICAONF.pas:217 e :226). |
PARMFATUR.ST_PRECOVENDA | Precondição: o UPDATE em ITEMTABPRECO só ocorre se ST_PRECOVENDA <> 'N' (UCUSTOREPOSICAONF.pas:203). Quando ST_PRECOVENDA = 'N', o sistema nem chama RECALCULA_PRECOVENDA e nem atualiza ITEMTABPRECO, independente de ST_ATUALIZATABPRECO. |
ITEMTABPRECO.VL_PRECO | Alvo do UPDATE. Recebe VL_ANTIGO (quando ST_ATUALIZATABPRECO = 'S') ou VL_VENDA (quando 'N'). |
ITEMTABPRECO.DT_REGISTRO | Também atualizado para 'NOW' no mesmo statement. |
tabCUSTOVL_ANTIGO | Coluna do grid de Custo Reposição. Editável quando ST_ATUALIZATABPRECO = 'S' (UCUSTOREPOSICAONF.pas:414). Representa o preço digitado pelo operador. |
tabCUSTOVL_VENDA | Coluna do grid. Editável quando ST_ATUALIZATABPRECO = 'N' (default). Representa o preço calculado/sugerido. |
Opções disponíveis
S - Sim (grava o valor "antigo" digitado pelo operador)
| O que faz | Detalhe |
|---|---|
| Coluna do grid editável | VL_ANTIGO (coluna 5, clWindow) |
| Coluna do grid travada | VL_VENDA (coluna 6, $00EEEEEE cinza) — UCUSTOREPOSICAONF.pas:414-417 |
Valor gravado em ITEMTABPRECO.VL_PRECO | tabCUSTOVL_ANTIGO.AsString (UCUSTOREPOSICAONF.pas:217) |
| SQL executado | UPDATE ITEMTABPRECO SET VL_PRECO = CAST(<VL_ANTIGO> AS NUMERIC(15, <QT_CASASDECIMAISPRECOVENDA>)), DT_REGISTRO = 'NOW' WHERE CD_TABPRECO = <tabPreco> AND CD_ITEM = <CD_ITEM> |
| Precondição | ST_PRECOVENDA <> 'N' (UCUSTOREPOSICAONF.pas:203) |
| Precisão | Casas decimais do CAST vêm de PARMFATUR.QT_CASASDECIMAISPRECOVENDA |
| Pré-chamada | RECALCULA_PRECOVENDA é executada antes do UPDATE (UCUSTOREPOSICAONF.pas:205-211); se ela retornar mensagem não vazia, levanta W-0000 e o UPDATE não ocorre |
Simulação passo a passo
- Em MFA001 → Parâmetros → Faturamento → Opção 1, ajuste "Atualiza Tab. Preço Venda na Compra" = Sim.
- Verifique que
ST_PRECOVENDAestá diferente de "Não" (caso contrário, o fluxo abaixo nem é executado). - Salve os parâmetros (F6).
- Abra MNF001 e edite uma NF de entrada onde
ST_CUSTOREPOSICAOda operação valha'M'ou'T'. - Ao confirmar a nota, o sistema abre a subtela Custo de Reposição (
frmCUSTOREPOSICAONF). - Observe: a coluna
VL_ANTIGOestá branca (editável) e a colunaVL_VENDAestá cinza (travada). - Altere
VL_ANTIGOpara, por exemplo,R$ 18,00. - Clique OK (F6).
- O sistema executa
SELECT O_DS_MENSAGEM FROM RECALCULA_PRECOVENDA(<empresa>, NULL, NULL, <cd_item>). Se retornar mensagem, aborta. - Em seguida, executa
UPDATE ITEMTABPRECO SET VL_PRECO = CAST(18,00 AS NUMERIC(15, <casas>)), DT_REGISTRO = 'NOW' WHERE CD_TABPRECO = <padrão> AND CD_ITEM = <item>.
Resultado esperado: ITEMTABPRECO.VL_PRECO passa a ser o valor digitado pelo operador no campo VL_ANTIGO (R$ 18,00), não o valor recalculado automaticamente.
N - Não (grava o valor "de venda" calculado)
| O que faz | Detalhe |
|---|---|
| Coluna do grid editável | VL_VENDA (default do .dfm, sem alteração de ReadOnly em runtime) |
| Coluna do grid travada | VL_ANTIGO (default, ReadOnly = True no .dfm) |
Valor gravado em ITEMTABPRECO.VL_PRECO | tabCUSTOVL_VENDA.AsString (UCUSTOREPOSICAONF.pas:226) |
| SQL executado | UPDATE ITEMTABPRECO SET VL_PRECO = CAST(<VL_VENDA> AS NUMERIC(15, <QT_CASASDECIMAISPRECOVENDA>)), DT_REGISTRO = 'NOW' WHERE CD_TABPRECO = <tabPreco> AND CD_ITEM = <CD_ITEM> |
| Precondição | ST_PRECOVENDA <> 'N' |
| É o valor padrão | Sim — tabPARMFATURST_ATUALIZATABPRECO.AsString := 'N' em UdmMFA001.pas:514 (AfterInsert) |
Simulação passo a passo
- Em MFA001 → Parâmetros → Faturamento → Opção 1, mantenha "Atualiza Tab. Preço Venda na Compra" = Não (padrão).
- Verifique que
ST_PRECOVENDAestá diferente de "Não". - Salve os parâmetros (F6).
- Abra MNF001 e edite uma NF de entrada com
ST_CUSTOREPOSICAO = 'M'ou'T'. - Ao confirmar, a subtela Custo de Reposição abre.
- A coluna
VL_VENDAaparece editável eVL_ANTIGOtravada (estado default do.dfm). - Informe o novo custo na coluna de custo;
VL_VENDAé preenchida viaRECALCULA_PRECOVENDA. - Clique OK (F6).
- Sistema chama
RECALCULA_PRECOVENDA; se tudo ok, executaUPDATE ITEMTABPRECO SET VL_PRECO = CAST(<VL_VENDA> AS NUMERIC(15, <casas>)), DT_REGISTRO = 'NOW' WHERE CD_TABPRECO = <padrão> AND CD_ITEM = <item>.
Resultado esperado: ITEMTABPRECO.VL_PRECO passa a ser o valor recalculado pela procedure (preço de venda sugerido), ignorando qualquer valor antigo preservado.
Interação com ST_TABPRECO / ST_REPROCESSATABPRECO / TP_ATUALIZACAOTABELAVENDA
Estes quatro parâmetros atuam em momentos distintos do ciclo de vida do preço:
| Parâmetro | Momento | O que decide | Fonte |
|---|---|---|---|
| ST_TABPRECO | Digitação de item em pedido/NF | Obrigatoriedade / edição de CD_TABPRECO e VL_UNITARIO na venda | Delphi (MPD002, MNF002 etc.) |
| ST_REPROCESSATABPRECO | Troca de condição de pagamento em venda | Se recalcula preços ao trocar CD_CONDPAGTO | Delphi + VERIFICA_BLOQUEIO |
| TP_ATUALIZACAOTABELAVENDA | Dentro da procedure ATUALIZA_PRECOVENDA | Escopo: quais tabelas (todas / só com margem / só as com regra em MFA006) são atualizadas | Procedure SQL |
| ST_ATUALIZATABPRECO (este) | Confirmação de Custo Reposição Manual na entrada (MNF001) | Qual coluna do grid (VL_ANTIGO vs VL_VENDA) é persistida em ITEMTABPRECO.VL_PRECO | Delphi (UCUSTOREPOSICAONF.pas) |
Ponto-chave:
ST_ATUALIZATABPRECOnão dispara a procedureATUALIZA_PRECOVENDA— ele usaRECALCULA_PRECOVENDAapenas como validação e grava diretamente via SQLUPDATE ITEMTABPRECO.TP_ATUALIZACAOTABELAVENDAsó é consultado dentro deATUALIZA_PRECOVENDA, chamada por outros fluxos (ex.: CNF017), não pelo fluxo deUCUSTOREPOSICAONF.- A precondição
ST_PRECOVENDA <> 'N'(UCUSTOREPOSICAONF.pas:203) faz com que, mesmo comST_ATUALIZATABPRECO = 'S', nada aconteça seST_PRECOVENDA = 'N'(empresa optou por não recalcular preços na entrada). ST_REPROCESSATABPRECOé um fluxo paralelo (venda/condição de pagamento) — não interage comST_ATUALIZATABPRECO.
Tabela Comparativa Resumida
| Opção | Descrição | Coluna editável no grid | Coluna gravada em ITEMTABPRECO.VL_PRECO | Valor padrão? |
|---|---|---|---|---|
| S | Sim | VL_ANTIGO (digitado pelo operador) | VL_ANTIGO | Não |
| N | Não | VL_VENDA (calculado pela procedure) | VL_VENDA | Sim |
Referências no Código Fonte
Delphi
| Arquivo | Linha | Uso |
|---|---|---|
source/MFA001/UMFA001.dfm | 6291 | Label lbl3.Caption = 'Atualiza Tab. Preço Venda na Compra' |
source/MFA001/UMFA001.dfm | 6292 | FocusControl = cmbST_ATUALIZATABPRECO |
source/MFA001/UMFA001.dfm | 7169-7193 | ComboBox cmbST_ATUALIZATABPRECO (items 'Sim'=S, 'Não'=N) dentro de pagAmbos → pagFatOp1 → grpAmbos |
source/MFA001/UMFA001.dfm | 7179 | DataField = 'ST_ATUALIZATABPRECO' |
source/MFA001/UMFA001.pas | 400 | Declaração cmbST_ATUALIZATABPRECO: TwwDBComboBox |
source/MFA001/UMFA001.pas | 1145-1149 | Navegação de TAB: ao sair do combo, foco vai para pagFiscal → chkTP_OBSNOTA |
source/MFA001/UdmMFA001.pas | 182 | Declaração tabPARMFATURST_ATUALIZATABPRECO: TStringField |
source/MFA001/UdmMFA001.pas | 514 | Valor padrão em AfterInsert: tabPARMFATURST_ATUALIZATABPRECO.AsString := 'N' |
source/MFA001/UdmMFA001.dfm | 192, 3072 | Campo listado no SELECT do dataset |
source/MFA001/UdmMFA001.dfm | 1389-1391 | TStringField tabPARMFATURST_ATUALIZATABPRECO (Origin "PARMFATUR"."ST_ATUALIZATABPRECO") |
source/MFA001/UdmMFA001.dfm | 2399, 2563, 2653 | INSERT/UPDATE do PARMFATUR incluindo o campo |
source/MNF001/UCUSTOREPOSICAONF.pas | 213 | IF (dmMNF001.parmFatur.Values['ST_ATUALIZATABPRECO'] = 'S') then — decide coluna (VL_ANTIGO vs VL_VENDA) no UPDATE do ITEMTABPRECO |
source/MNF001/UCUSTOREPOSICAONF.pas | 412-418 | FormShow: se 'S', libera VL_ANTIGO e trava VL_VENDA no grid (cores clWindow / $00EEEEEE) |
source/MNF001/UMNF001.pas | 2519-2522 | Gatilho da subtela: if ((iST_CUSTOREPOSICAO = 'M') or (iST_CUSTOREPOSICAO = 'T')) then ... Create(TfrmCUSTOREPOSICAONF) |
SQL
Nenhuma referência direta em Scripts/. Toda a lógica do parâmetro é implementada em Delphi no módulo MNF001 (UCUSTOREPOSICAONF.pas).