Pular para o conteúdo principal

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 em UdmMFA001.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óduloCódigoDescriçãoUso
Parâmetros de FaturamentoMFA001Tela de configuração do parâmetro (combo cmbST_ATUALIZATABPRECO, UMFA001.dfm:7169)Leitura/gravação
NF de Entrada — Custo ReposiçãoMNF001Subtela 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 ITEMTABPRECOLeitura

Procedures impactadas​

ProcedureArquivoDescriçã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​

CampoDescrição
PARMFATUR.ST_ATUALIZATABPRECOParâmetro em si ('S' / 'N').
PARMFATUR.QT_CASASDECIMAISPRECOVENDALido em conjunto para montar o CAST(... AS NUMERIC(15, N)) do UPDATE (UCUSTOREPOSICAONF.pas:217 e :226).
PARMFATUR.ST_PRECOVENDAPrecondiçã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_PRECOAlvo do UPDATE. Recebe VL_ANTIGO (quando ST_ATUALIZATABPRECO = 'S') ou VL_VENDA (quando 'N').
ITEMTABPRECO.DT_REGISTROTambém atualizado para 'NOW' no mesmo statement.
tabCUSTOVL_ANTIGOColuna do grid de Custo Reposição. Editável quando ST_ATUALIZATABPRECO = 'S' (UCUSTOREPOSICAONF.pas:414). Representa o preço digitado pelo operador.
tabCUSTOVL_VENDAColuna 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 fazDetalhe
Coluna do grid editávelVL_ANTIGO (coluna 5, clWindow)
Coluna do grid travadaVL_VENDA (coluna 6, $00EEEEEE cinza) — UCUSTOREPOSICAONF.pas:414-417
Valor gravado em ITEMTABPRECO.VL_PRECOtabCUSTOVL_ANTIGO.AsString (UCUSTOREPOSICAONF.pas:217)
SQL executadoUPDATE 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çãoST_PRECOVENDA <> 'N' (UCUSTOREPOSICAONF.pas:203)
PrecisãoCasas decimais do CAST vêm de PARMFATUR.QT_CASASDECIMAISPRECOVENDA
Pré-chamadaRECALCULA_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​

  1. Em MFA001 → Parâmetros → Faturamento → Opção 1, ajuste "Atualiza Tab. Preço Venda na Compra" = Sim.
  2. Verifique que ST_PRECOVENDA está diferente de "Não" (caso contrário, o fluxo abaixo nem é executado).
  3. Salve os parâmetros (F6).
  4. Abra MNF001 e edite uma NF de entrada onde ST_CUSTOREPOSICAO da operação valha 'M' ou 'T'.
  5. Ao confirmar a nota, o sistema abre a subtela Custo de Reposição (frmCUSTOREPOSICAONF).
  6. Observe: a coluna VL_ANTIGO está branca (editável) e a coluna VL_VENDA está cinza (travada).
  7. Altere VL_ANTIGO para, por exemplo, R$ 18,00.
  8. Clique OK (F6).
  9. O sistema executa SELECT O_DS_MENSAGEM FROM RECALCULA_PRECOVENDA(<empresa>, NULL, NULL, <cd_item>). Se retornar mensagem, aborta.
  10. 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 fazDetalhe
Coluna do grid editávelVL_VENDA (default do .dfm, sem alteração de ReadOnly em runtime)
Coluna do grid travadaVL_ANTIGO (default, ReadOnly = True no .dfm)
Valor gravado em ITEMTABPRECO.VL_PRECOtabCUSTOVL_VENDA.AsString (UCUSTOREPOSICAONF.pas:226)
SQL executadoUPDATE 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çãoST_PRECOVENDA <> 'N'
É o valor padrãoSim — tabPARMFATURST_ATUALIZATABPRECO.AsString := 'N' em UdmMFA001.pas:514 (AfterInsert)

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Faturamento → Opção 1, mantenha "Atualiza Tab. Preço Venda na Compra" = Não (padrão).
  2. Verifique que ST_PRECOVENDA está diferente de "Não".
  3. Salve os parâmetros (F6).
  4. Abra MNF001 e edite uma NF de entrada com ST_CUSTOREPOSICAO = 'M' ou 'T'.
  5. Ao confirmar, a subtela Custo de Reposição abre.
  6. A coluna VL_VENDA aparece editável e VL_ANTIGO travada (estado default do .dfm).
  7. Informe o novo custo na coluna de custo; VL_VENDA é preenchida via RECALCULA_PRECOVENDA.
  8. Clique OK (F6).
  9. Sistema chama RECALCULA_PRECOVENDA; se tudo ok, executa UPDATE 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âmetroMomentoO que decideFonte
ST_TABPRECODigitação de item em pedido/NFObrigatoriedade / edição de CD_TABPRECO e VL_UNITARIO na vendaDelphi (MPD002, MNF002 etc.)
ST_REPROCESSATABPRECOTroca de condição de pagamento em vendaSe recalcula preços ao trocar CD_CONDPAGTODelphi + VERIFICA_BLOQUEIO
TP_ATUALIZACAOTABELAVENDADentro da procedure ATUALIZA_PRECOVENDAEscopo: quais tabelas (todas / só com margem / só as com regra em MFA006) são atualizadasProcedure 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_PRECODelphi (UCUSTOREPOSICAONF.pas)

Ponto-chave:

  • ST_ATUALIZATABPRECO não dispara a procedure ATUALIZA_PRECOVENDA — ele usa RECALCULA_PRECOVENDA apenas como validação e grava diretamente via SQL UPDATE ITEMTABPRECO.
  • TP_ATUALIZACAOTABELAVENDA só é consultado dentro de ATUALIZA_PRECOVENDA, chamada por outros fluxos (ex.: CNF017), não pelo fluxo de UCUSTOREPOSICAONF.
  • A precondição ST_PRECOVENDA <> 'N' (UCUSTOREPOSICAONF.pas:203) faz com que, mesmo com ST_ATUALIZATABPRECO = 'S', nada aconteça se ST_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 com ST_ATUALIZATABPRECO.

Tabela Comparativa Resumida​

OpçãoDescriçãoColuna editável no gridColuna gravada em ITEMTABPRECO.VL_PRECOValor padrão?
SSimVL_ANTIGO (digitado pelo operador)VL_ANTIGONão
NNãoVL_VENDA (calculado pela procedure)VL_VENDASim

Referências no Código Fonte​

Delphi​

ArquivoLinhaUso
source/MFA001/UMFA001.dfm6291Label lbl3.Caption = 'Atualiza Tab. Preço Venda na Compra'
source/MFA001/UMFA001.dfm6292FocusControl = cmbST_ATUALIZATABPRECO
source/MFA001/UMFA001.dfm7169-7193ComboBox cmbST_ATUALIZATABPRECO (items 'Sim'=S, 'Não'=N) dentro de pagAmbos → pagFatOp1 → grpAmbos
source/MFA001/UMFA001.dfm7179DataField = 'ST_ATUALIZATABPRECO'
source/MFA001/UMFA001.pas400Declaração cmbST_ATUALIZATABPRECO: TwwDBComboBox
source/MFA001/UMFA001.pas1145-1149Navegação de TAB: ao sair do combo, foco vai para pagFiscal → chkTP_OBSNOTA
source/MFA001/UdmMFA001.pas182Declaração tabPARMFATURST_ATUALIZATABPRECO: TStringField
source/MFA001/UdmMFA001.pas514Valor padrão em AfterInsert: tabPARMFATURST_ATUALIZATABPRECO.AsString := 'N'
source/MFA001/UdmMFA001.dfm192, 3072Campo listado no SELECT do dataset
source/MFA001/UdmMFA001.dfm1389-1391TStringField tabPARMFATURST_ATUALIZATABPRECO (Origin "PARMFATUR"."ST_ATUALIZATABPRECO")
source/MFA001/UdmMFA001.dfm2399, 2563, 2653INSERT/UPDATE do PARMFATUR incluindo o campo
source/MNF001/UCUSTOREPOSICAONF.pas213IF (dmMNF001.parmFatur.Values['ST_ATUALIZATABPRECO'] = 'S') then — decide coluna (VL_ANTIGO vs VL_VENDA) no UPDATE do ITEMTABPRECO
source/MNF001/UCUSTOREPOSICAONF.pas412-418FormShow: se 'S', libera VL_ANTIGO e trava VL_VENDA no grid (cores clWindow / $00EEEEEE)
source/MNF001/UMNF001.pas2519-2522Gatilho 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).