Pular para o conteúdo principal

Parâmetro de Custo de Reposição

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (rótulo "Custo de Reposição") Tabela: PARMFATUR.ST_CUSTOREPOSICAO Valor padrão: N (Não atualiza)

Telas impactadas​

MóduloCódigoDescrição
NF de EntradaMNF001Entrada de NF - consulta o parâmetro e dispara a atualização de tabela de compra (opções C/S) ou do formulário manual de custo (opções M/T)
NF de Entrada – FreteMNF001 (UFRETENF)Rateio de frete - ao incluir/editar frete atualiza preço da tabela de compra somente quando a opção for C ou S
NF de SaídaMNF002Consumido indiretamente via PARMFATUR durante GERA_NOTAFISCAL (busca de custo de reposição na ordem de serviço - opções M/S para saída)

Procedures impactadas​

ProcedureUso
GERA_NOTAFISCALLê ST_CUSTOREPOSICAO. Em NF saída (M,S) busca custo da OS em ITEMREQUISICAOOFICINA. Em NF entrada (M,S,C,T) atualiza ITEMTABCOMPRA e preço de venda (quando não for M/T).
CANCELA_NOTAFISCALNo cancelamento de NF de entrada, percorre ITEMNOTA apenas quando PF.ST_CUSTOREPOSICAO <> 'N' e retorna ITEMTABCOMPRA.VL_PRECO para o valor da nota anterior.
CALCULA_CENTRORESULTContabilização CMV: usa IIF(PF.ST_CUSTOREPOSICAO IN ('M','S'), I.VL_CUSTO, ME.VL_ESTOQUE) para decidir se o CMV sai do custo digitado na nota (ITEMNOTA.VL_CUSTO) ou do custo médio de estoque (MOVESTOQUE.VL_ESTOQUE).
RETORNA_VLCONTA_VENDNOTAMesmo padrão de contabilização: o valor da conta crédito do CMV por vendedor usa I.VL_CUSTO quando ST_CUSTOREPOSICAO IN ('M','S'); caso contrário, ME.VL_ESTOQUE.
GERA_ESTOQUE_NOTAFISCALDeclara a variável I_ST_CUSTOREPOSICAO (propagação do parâmetro dentro da geração de estoque da NF).

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_CUSTOREPOSICAOArmazena a opção configurada
PARMFATUR.CD_TABCOMPRATabela de compra padrão - obrigatória para salvar MFA001 quando ST_CUSTOREPOSICAO ≠ N
PARMFATUR.PC_MARGEMSEGURANCAMargem de segurança aplicada ao recalcular ITEMTABCOMPRA.VL_PRECO
ITEMTABCOMPRA.VL_PRECOPreço de compra por item na tabela de compra - alvo das opções C/S/T/M
ITEMNOTA.VL_CUSTOCusto digitado/calculado na nota - base do CMV quando ST_CUSTOREPOSICAO IN ('M','S')
MOVESTOQUE.VL_ESTOQUECusto médio do movimento de estoque - base do CMV quando ST_CUSTOREPOSICAO NOT IN ('M','S')
ITEMREQUISICAOOFICINA.VL_UNITARIOCOMPRACusto manual informado em OS, usado em NF saída quando ST_CUSTOREPOSICAO IN ('M','S')
ST_ABRECUSTOREPOParâmetro acoplado: a UI habilita esse combo somente quando ST_CUSTOREPOSICAO ≠ 'N' (UMFA001.pas:2376-2379)

Opções disponíveis​

S - Custo na Venda e Tabela de Compra (automático)​

O que fazDetalhe
NF de entrada - ITEMTABCOMPRA.VL_PRECOAtualizado automaticamente com o valor unitário líquido + margem de segurança (GERA_NOTAFISCAL linha 1018/1020)
NF de entrada - preço de venda (ITEMTABPRECO)Recalculado via ATUALIZA_PRECOVENDA (GERA_NOTAFISCAL linha 1103-1115, porque a opção S não está em ('M','T'))
NF de entrada - rateio de freteAo lançar frete (MNF001.UFRETENF linha 580) o preço da tabela de compra também é reatualizado
NF de saída - CMV contábilUsa I.VL_CUSTO (custo da nota) como crédito do CMV (CALCULA_CENTRORESULT / RETORNA_VLCONTA_VENDNOTA)
NF de saída - ordem de serviçoQuando houver OS vinculada (ITEMREQUISICAOOFICINA), adota o custo manual digitado nela (GERA_NOTAFISCAL linha 980)
Cancelamento de NFCANCELA_NOTAFISCAL reverte o VL_PRECO da tabela de compra para o valor da nota de entrada anterior
Requer CD_TABCOMPRA?Sim - MFA001 bloqueia salvamento se CD_TABCOMPRA estiver vazio (UMFA001.pas:1031-1034)

Simulação passo a passo​

  1. Abra MFA001 → Parâmetros → Ambos → Opção 1 → Custo de Reposição = "Custo na Venda e Tab. de Compra"
  2. Informe a Tabela de Compra padrão (CD_TABCOMPRA) e salve (F6)
  3. Em MNF001 inclua uma NF de entrada do item X com VL_LIQUIDO = R$ 12,50
  4. Finalize a NF - GERA_NOTAFISCAL grava ITEMTABCOMPRA.VL_PRECO = 12,50 + margem de segurança
  5. Em seguida, o preço de venda do item X em ITEMTABPRECO é reajustado conforme ST_PRECOVENDA
  6. Em MNF002, emita uma NF de saída do item X - a contabilização do CMV (CALCULA_CENTRORESULT) lança como crédito o VL_CUSTO da nota, não o custo médio de estoque
  7. Cancele a NF de entrada - CANCELA_NOTAFISCAL volta o VL_PRECO da tabela de compra para o valor praticado na nota anterior do item

Resultado esperado: a cada NF de entrada o custo da tabela de compra e o preço de venda são atualizados automaticamente; nas saídas o CMV é sempre o custo da nota.


M - Custo na Venda e Tabela de Compra Manual​

O que fazDetalhe
NF de entrada - ITEMTABCOMPRANão é atualizado pelo valor da nota - o usuário informa manualmente via formulário TfrmCUSTOREPOSICAONF (UMNF001.pas linha 2519-2528)
NF de entrada - preço de vendaNão é recalculado por ATUALIZA_PRECOVENDA (GERA_NOTAFISCAL linha 1103 exclui ('M','T'))
NF de saída - CMV contábilContinua usando I.VL_CUSTO (mesma regra da opção S)
NF de saída - ordem de serviçoBusca custo manual em ITEMREQUISICAOOFICINA (mesma regra da opção S)
Cancelamento de NFEntra no FOR de reversão de ITEMTABCOMPRA (<> 'N'), porém depende do que foi gravado manualmente
Requer CD_TABCOMPRA?Sim

Simulação passo a passo​

  1. MFA001 → Custo de Reposição = "Custo na Venda e Tab. de Compra Manual" e informe CD_TABCOMPRA
  2. Salve (F6)
  3. Em MNF001 inclua a NF de entrada do item X com VL_LIQUIDO = R$ 12,50
  4. Ao salvar, o sistema abre o formulário TfrmCUSTOREPOSICAONF pedindo para o operador informar o custo de reposição de cada item
  5. Informe manualmente, por exemplo, R$ 13,20 - esse é o valor que vai para ITEMTABCOMPRA.VL_PRECO
  6. O preço de venda em ITEMTABPRECO não é recalculado automaticamente
  7. Ao emitir uma NF de saída do item X, o CMV contábil sai do VL_CUSTO da nota

Resultado esperado: o custo da tabela de compra é atualizado apenas pelo valor digitado manualmente; o preço de venda continua o mesmo.


C - Apenas Tabela de Compra (automático)​

O que fazDetalhe
NF de entrada - ITEMTABCOMPRA.VL_PRECOAtualizado automaticamente igual à opção S (GERA_NOTAFISCAL linha 1018-1020)
NF de entrada - rateio de freteTambém atualiza a tabela de compra (MNF001.UFRETENF linha 580 inclui iStCusto = 'C')
NF de entrada - preço de vendaRecalculado via ATUALIZA_PRECOVENDA (C não está em ('M','T'))
NF de saída - CMV contábilUsa ME.VL_ESTOQUE (custo médio do movimento) - NÃO usa o custo da nota (CALCULA_CENTRORESULT: ST_CUSTOREPOSICAO IN ('M','S') é falso)
NF de saída - ordem de serviçoNÃO busca custo em ITEMREQUISICAOOFICINA (filtro restringe a IN ('M','S'))
Cancelamento de NFEntra no FOR de reversão de ITEMTABCOMPRA (<> 'N')
Requer CD_TABCOMPRA?Sim

Simulação passo a passo​

  1. MFA001 → Custo de Reposição = "Tabela de Compra" e informe CD_TABCOMPRA
  2. Entre uma NF em MNF001 do item X com VL_LIQUIDO = R$ 12,50
  3. GERA_NOTAFISCAL atualiza ITEMTABCOMPRA.VL_PRECO = 12,50 + margem de segurança
  4. O preço de venda (ITEMTABPRECO) também é recalculado
  5. Ao emitir uma NF de saída, o lançamento contábil do CMV (CALCULA_CENTRORESULT) usa o custo médio de estoque (MOVESTOQUE.VL_ESTOQUE), e não o custo digitado na nota

Resultado esperado: o custo da tabela de compra é atualizado automaticamente, mas o CMV contábil é lançado pelo custo médio de estoque.


T - Apenas Tabela de Compra Manual​

O que fazDetalhe
NF de entrada - ITEMTABCOMPRAAtualização manual via TfrmCUSTOREPOSICAONF (UMNF001.pas linha 2519 inclui T)
NF de entrada - preço de vendaNão é recalculado (GERA_NOTAFISCAL linha 1103 exclui ('M','T'))
NF de saída - CMV contábilUsa ME.VL_ESTOQUE (custo médio)
NF de saída - ordem de serviçoNÃO busca custo em ITEMREQUISICAOOFICINA (IN ('M','S') é falso)
Cancelamento de NFEntra no FOR de reversão (<> 'N')
Requer CD_TABCOMPRA?Sim

Simulação passo a passo​

  1. MFA001 → Custo de Reposição = "Tabela de Compra Manual" e informe CD_TABCOMPRA
  2. Em MNF001 inclua uma NF de entrada
  3. Ao salvar, o formulário TfrmCUSTOREPOSICAONF é aberto para digitação manual do custo
  4. Informe os custos → apenas ITEMTABCOMPRA é alterado, ITEMTABPRECO não muda
  5. Em NF de saída o CMV é lançado pelo custo médio de estoque

Resultado esperado: custo de compra apenas manual; preço de venda inalterado; CMV pelo custo médio.


N - Não atualiza (padrão)​

O que fazDetalhe
NF de entrada - ITEMTABCOMPRANão é atualizado (GERA_NOTAFISCAL linha 1018: IN ('M','S','C','T') é falso)
NF de entrada - preço de vendaNão é recalculado
NF de entrada - rateio de freteNão atualiza tabela de compra (iStCusto = 'N' não satisfaz o IF em UFRETENF.pas linha 580)
NF de saída - CMV contábilUsa ME.VL_ESTOQUE (custo médio)
Cancelamento de NFPula o FOR de reversão de ITEMTABCOMPRA (CANCELA_NOTAFISCAL linha 1135: PF.ST_CUSTOREPOSICAO <> 'N')
UI - combo ST_ABRECUSTOREPODesabilitado (UMFA001.pas linha 2378: cmbST_ABRECUSTOREPO.Enabled := not(cmbST_CUSTOREPOSICAO.Value = 'N'))
Requer CD_TABCOMPRA?Não - mas o MFA001 ainda exige CD_TABCOMPRA no salvamento (validação tabPARMFATURCD_TABCOMPRA = '' em UMFA001.pas:1031)

Simulação passo a passo​

  1. MFA001 → Custo de Reposição = "Não"
  2. Observe que o combo de Abre Custo de Reposição (ST_ABRECUSTOREPO) fica desabilitado (regra em cmbST_CUSTOREPOSICAOChange)
  3. Salve (F6)
  4. Em MNF001 inclua uma NF de entrada do item X
  5. Após finalizar, consulte ITEMTABCOMPRA - o VL_PRECO permanece o valor antigo
  6. Cancele a NF - CANCELA_NOTAFISCAL não mexe em ITEMTABCOMPRA
  7. Emita NF de saída - CMV lançado pelo custo médio de estoque

Resultado esperado: entrada de NF não altera custos nem preços; cancelamento também não reverte; CMV sempre pelo custo médio. Este é o valor padrão atribuído no AfterInsert do PARMFATUR (UdmMFA001.pas linha 453).


Validações na tela MFA001​

UMFA001.pas aplica duas travas específicas do parâmetro:

  • cmbST_CUSTOREPOSICAOClick (linha 1799-1804): se o usuário clicar no combo e o campo CD_TABCOMPRA estiver vazio, limpa o valor escolhido e lança JException 'W-0000' com a mensagem "Informe alguma tabela de compra padrão para parametrizar o Custo de Reposição".
  • btnSalvarClick (linha 1031-1041): ao salvar o MFA001, se CD_TABCOMPRA estiver vazio e ST_CUSTOREPOSICAO também estiver vazio, exige qualquer tabela de compra; se CD_TABCOMPRA estiver vazio mas o combo tiver valor, limpa o combo e lança o mesmo erro.
  • cmbST_CUSTOREPOSICAOChange (linha 2376-2379): habilita ou desabilita o combo irmão cmbST_ABRECUSTOREPO conforme o valor atual (desabilita somente quando = 'N').

Tabela Comparativa Resumida​

OpçãoITEMTABCOMPRA automático?Formulário manual (TfrmCUSTOREPOSICAONF)?Recalcula preço de venda?CMV contábilAtualiza via rateio de frete?Reverte no cancelamento?
SSimNãoSimVL_CUSTO da notaSimSim
MNãoSimNãoVL_CUSTO da notaNãoSim
CSimNãoSimVL_ESTOQUE (médio)SimSim
TNãoSimNãoVL_ESTOQUE (médio)NãoSim
NNãoNãoNãoVL_ESTOQUE (médio)NãoNão

Referências no Código Fonte​

Delphi (Desktop)​

ArquivoLinha(s)Papel
source/MFA001/UMFA001.dfm6701-6732Definição do combo cmbST_CUSTOREPOSICAO (valores S/M/C/T/N)
source/MFA001/UMFA001.dfm6046Label "Custo de Reposição"
source/MFA001/UMFA001.pas760, 817Declarações dos handlers Click/Change
source/MFA001/UMFA001.pas1031-1041Validação de CD_TABCOMPRA no btnSalvarClick
source/MFA001/UMFA001.pas1799-1804cmbST_CUSTOREPOSICAOClick - exige tabela de compra
source/MFA001/UMFA001.pas2376-2379cmbST_CUSTOREPOSICAOChange - habilita/desabilita cmbST_ABRECUSTOREPO
source/MFA001/UdmMFA001.pas88, 453Campo tabPARMFATURST_CUSTOREPOSICAO e valor padrão 'N' no AfterInsert
source/MFA001/UdmMFA001.dfm898-902, 2349, 2495, 2707Declaração do StringField e inclusão nos SELECT/INSERT/UPDATE do PARMFATUR
source/MNF001/UdmMNF001.pas1108, 1375, 1399Cache do parâmetro em iST_CUSTOREPOSICAO após SELECT em PARMFATUR
source/MNF001/UMNF001.pas2519-2528Abre TfrmCUSTOREPOSICAONF quando iST_CUSTOREPOSICAO IN ('M','T')
source/MNF001/UFRETENF.pas249, 258, 580Consulta ST_CUSTOREPOSICAO e, quando IN ('C','S'), atualiza ITEMTABCOMPRA no rateio de frete

SQL (Firebird)​

ArquivoLinha(s)Papel
Scripts/GERA_NOTAFISCAL.sql107, 258, 265Declara e carrega I_ST_CUSTOREPOSICAO a partir de PARMFATUR
Scripts/GERA_NOTAFISCAL.sql980NF saída: busca custo na OS quando IN ('M','S')
Scripts/GERA_NOTAFISCAL.sql1018-1020NF entrada: atualiza ITEMTABCOMPRA.VL_PRECO quando IN ('M','S','C','T') e não em ('M','T') para manuais
Scripts/GERA_NOTAFISCAL.sql1103-1115NF entrada: recalcula preço de venda (ATUALIZA_PRECOVENDA) quando não em ('M','T')
Scripts/CANCELA_NOTAFISCAL.sql1135No cancelamento só reverte ITEMTABCOMPRA se ST_CUSTOREPOSICAO <> 'N'
Scripts/CALCULA_CENTRORESULT.sql154, 456CMV contábil: IIF(PF.ST_CUSTOREPOSICAO IN ('M','S'), I.VL_CUSTO, ME.VL_ESTOQUE) (crédito e débito)
Scripts/RETORNA_VLCONTA_VENDNOTA.sql128Mesma regra de CMV aplicada por vendedor
Scripts/GERA_ESTOQUE_NOTAFISCAL.sql128Declara I_ST_CUSTOREPOSICAO dentro da geração de estoque