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_CUSTOREPOSICAOValor padrão:N(Não atualiza)
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| NF de Entrada | MNF001 | Entrada 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 – Frete | MNF001 (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ída | MNF002 | Consumido 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
| Procedure | Uso |
|---|---|
GERA_NOTAFISCAL | Lê 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_NOTAFISCAL | No 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_CENTRORESULT | Contabilizaçã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_VENDNOTA | Mesmo 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_NOTAFISCAL | Declara a variável I_ST_CUSTOREPOSICAO (propagação do parâmetro dentro da geração de estoque da NF). |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_CUSTOREPOSICAO | Armazena a opção configurada |
PARMFATUR.CD_TABCOMPRA | Tabela de compra padrão - obrigatória para salvar MFA001 quando ST_CUSTOREPOSICAO ≠ N |
PARMFATUR.PC_MARGEMSEGURANCA | Margem de segurança aplicada ao recalcular ITEMTABCOMPRA.VL_PRECO |
ITEMTABCOMPRA.VL_PRECO | Preço de compra por item na tabela de compra - alvo das opções C/S/T/M |
ITEMNOTA.VL_CUSTO | Custo digitado/calculado na nota - base do CMV quando ST_CUSTOREPOSICAO IN ('M','S') |
MOVESTOQUE.VL_ESTOQUE | Custo médio do movimento de estoque - base do CMV quando ST_CUSTOREPOSICAO NOT IN ('M','S') |
ITEMREQUISICAOOFICINA.VL_UNITARIOCOMPRA | Custo manual informado em OS, usado em NF saída quando ST_CUSTOREPOSICAO IN ('M','S') |
ST_ABRECUSTOREPO | Parâ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 faz | Detalhe |
|---|---|
NF de entrada - ITEMTABCOMPRA.VL_PRECO | Atualizado 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 frete | Ao lançar frete (MNF001.UFRETENF linha 580) o preço da tabela de compra também é reatualizado |
| NF de saída - CMV contábil | Usa I.VL_CUSTO (custo da nota) como crédito do CMV (CALCULA_CENTRORESULT / RETORNA_VLCONTA_VENDNOTA) |
| NF de saída - ordem de serviço | Quando houver OS vinculada (ITEMREQUISICAOOFICINA), adota o custo manual digitado nela (GERA_NOTAFISCAL linha 980) |
| Cancelamento de NF | CANCELA_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
- Abra MFA001 → Parâmetros → Ambos → Opção 1 → Custo de Reposição = "Custo na Venda e Tab. de Compra"
- Informe a Tabela de Compra padrão (
CD_TABCOMPRA) e salve (F6) - Em MNF001 inclua uma NF de entrada do item X com
VL_LIQUIDO= R$ 12,50 - Finalize a NF -
GERA_NOTAFISCALgravaITEMTABCOMPRA.VL_PRECO= 12,50 + margem de segurança - Em seguida, o preço de venda do item X em
ITEMTABPRECOé reajustado conformeST_PRECOVENDA - Em MNF002, emita uma NF de saída do item X - a contabilização do CMV (
CALCULA_CENTRORESULT) lança como crédito oVL_CUSTOda nota, não o custo médio de estoque - Cancele a NF de entrada -
CANCELA_NOTAFISCALvolta oVL_PRECOda 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 faz | Detalhe |
|---|---|
NF de entrada - ITEMTABCOMPRA | Nã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 venda | Não é recalculado por ATUALIZA_PRECOVENDA (GERA_NOTAFISCAL linha 1103 exclui ('M','T')) |
| NF de saída - CMV contábil | Continua usando I.VL_CUSTO (mesma regra da opção S) |
| NF de saída - ordem de serviço | Busca custo manual em ITEMREQUISICAOOFICINA (mesma regra da opção S) |
| Cancelamento de NF | Entra 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
- MFA001 → Custo de Reposição = "Custo na Venda e Tab. de Compra Manual" e informe
CD_TABCOMPRA - Salve (F6)
- Em MNF001 inclua a NF de entrada do item X com
VL_LIQUIDO= R$ 12,50 - Ao salvar, o sistema abre o formulário
TfrmCUSTOREPOSICAONFpedindo para o operador informar o custo de reposição de cada item - Informe manualmente, por exemplo, R$ 13,20 - esse é o valor que vai para
ITEMTABCOMPRA.VL_PRECO - O preço de venda em
ITEMTABPRECOnão é recalculado automaticamente - Ao emitir uma NF de saída do item X, o CMV contábil sai do
VL_CUSTOda 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 faz | Detalhe |
|---|---|
NF de entrada - ITEMTABCOMPRA.VL_PRECO | Atualizado automaticamente igual à opção S (GERA_NOTAFISCAL linha 1018-1020) |
| NF de entrada - rateio de frete | Também atualiza a tabela de compra (MNF001.UFRETENF linha 580 inclui iStCusto = 'C') |
| NF de entrada - preço de venda | Recalculado via ATUALIZA_PRECOVENDA (C não está em ('M','T')) |
| NF de saída - CMV contábil | Usa 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ço | NÃO busca custo em ITEMREQUISICAOOFICINA (filtro restringe a IN ('M','S')) |
| Cancelamento de NF | Entra no FOR de reversão de ITEMTABCOMPRA (<> 'N') |
Requer CD_TABCOMPRA? | Sim |
Simulação passo a passo
- MFA001 → Custo de Reposição = "Tabela de Compra" e informe
CD_TABCOMPRA - Entre uma NF em MNF001 do item X com
VL_LIQUIDO= R$ 12,50 GERA_NOTAFISCALatualizaITEMTABCOMPRA.VL_PRECO= 12,50 + margem de segurança- O preço de venda (
ITEMTABPRECO) também é recalculado - 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 faz | Detalhe |
|---|---|
NF de entrada - ITEMTABCOMPRA | Atualização manual via TfrmCUSTOREPOSICAONF (UMNF001.pas linha 2519 inclui T) |
| NF de entrada - preço de venda | Não é recalculado (GERA_NOTAFISCAL linha 1103 exclui ('M','T')) |
| NF de saída - CMV contábil | Usa ME.VL_ESTOQUE (custo médio) |
| NF de saída - ordem de serviço | NÃO busca custo em ITEMREQUISICAOOFICINA (IN ('M','S') é falso) |
| Cancelamento de NF | Entra no FOR de reversão (<> 'N') |
Requer CD_TABCOMPRA? | Sim |
Simulação passo a passo
- MFA001 → Custo de Reposição = "Tabela de Compra Manual" e informe
CD_TABCOMPRA - Em MNF001 inclua uma NF de entrada
- Ao salvar, o formulário
TfrmCUSTOREPOSICAONFé aberto para digitação manual do custo - Informe os custos → apenas
ITEMTABCOMPRAé alterado,ITEMTABPRECOnão muda - 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 faz | Detalhe |
|---|---|
NF de entrada - ITEMTABCOMPRA | Não é atualizado (GERA_NOTAFISCAL linha 1018: IN ('M','S','C','T') é falso) |
| NF de entrada - preço de venda | Não é recalculado |
| NF de entrada - rateio de frete | Não atualiza tabela de compra (iStCusto = 'N' não satisfaz o IF em UFRETENF.pas linha 580) |
| NF de saída - CMV contábil | Usa ME.VL_ESTOQUE (custo médio) |
| Cancelamento de NF | Pula o FOR de reversão de ITEMTABCOMPRA (CANCELA_NOTAFISCAL linha 1135: PF.ST_CUSTOREPOSICAO <> 'N') |
UI - combo ST_ABRECUSTOREPO | Desabilitado (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
- MFA001 → Custo de Reposição = "Não"
- Observe que o combo de Abre Custo de Reposição (
ST_ABRECUSTOREPO) fica desabilitado (regra emcmbST_CUSTOREPOSICAOChange) - Salve (F6)
- Em MNF001 inclua uma NF de entrada do item X
- Após finalizar, consulte
ITEMTABCOMPRA- oVL_PRECOpermanece o valor antigo - Cancele a NF -
CANCELA_NOTAFISCALnão mexe emITEMTABCOMPRA - 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 campoCD_TABCOMPRAestiver vazio, limpa o valor escolhido e lançaJException '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, seCD_TABCOMPRAestiver vazio eST_CUSTOREPOSICAOtambém estiver vazio, exige qualquer tabela de compra; seCD_TABCOMPRAestiver 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ãocmbST_ABRECUSTOREPOconforme o valor atual (desabilita somente quando= 'N').
Tabela Comparativa Resumida
| Opção | ITEMTABCOMPRA automático? | Formulário manual (TfrmCUSTOREPOSICAONF)? | Recalcula preço de venda? | CMV contábil | Atualiza via rateio de frete? | Reverte no cancelamento? |
|---|---|---|---|---|---|---|
| S | Sim | Não | Sim | VL_CUSTO da nota | Sim | Sim |
| M | Não | Sim | Não | VL_CUSTO da nota | Não | Sim |
| C | Sim | Não | Sim | VL_ESTOQUE (médio) | Sim | Sim |
| T | Não | Sim | Não | VL_ESTOQUE (médio) | Não | Sim |
| N | Não | Não | Não | VL_ESTOQUE (médio) | Não | Não |
Referências no Código Fonte
Delphi (Desktop)
| Arquivo | Linha(s) | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 6701-6732 | Definição do combo cmbST_CUSTOREPOSICAO (valores S/M/C/T/N) |
source/MFA001/UMFA001.dfm | 6046 | Label "Custo de Reposição" |
source/MFA001/UMFA001.pas | 760, 817 | Declarações dos handlers Click/Change |
source/MFA001/UMFA001.pas | 1031-1041 | Validação de CD_TABCOMPRA no btnSalvarClick |
source/MFA001/UMFA001.pas | 1799-1804 | cmbST_CUSTOREPOSICAOClick - exige tabela de compra |
source/MFA001/UMFA001.pas | 2376-2379 | cmbST_CUSTOREPOSICAOChange - habilita/desabilita cmbST_ABRECUSTOREPO |
source/MFA001/UdmMFA001.pas | 88, 453 | Campo tabPARMFATURST_CUSTOREPOSICAO e valor padrão 'N' no AfterInsert |
source/MFA001/UdmMFA001.dfm | 898-902, 2349, 2495, 2707 | Declaração do StringField e inclusão nos SELECT/INSERT/UPDATE do PARMFATUR |
source/MNF001/UdmMNF001.pas | 1108, 1375, 1399 | Cache do parâmetro em iST_CUSTOREPOSICAO após SELECT em PARMFATUR |
source/MNF001/UMNF001.pas | 2519-2528 | Abre TfrmCUSTOREPOSICAONF quando iST_CUSTOREPOSICAO IN ('M','T') |
source/MNF001/UFRETENF.pas | 249, 258, 580 | Consulta ST_CUSTOREPOSICAO e, quando IN ('C','S'), atualiza ITEMTABCOMPRA no rateio de frete |
SQL (Firebird)
| Arquivo | Linha(s) | Papel |
|---|---|---|
Scripts/GERA_NOTAFISCAL.sql | 107, 258, 265 | Declara e carrega I_ST_CUSTOREPOSICAO a partir de PARMFATUR |
Scripts/GERA_NOTAFISCAL.sql | 980 | NF saída: busca custo na OS quando IN ('M','S') |
Scripts/GERA_NOTAFISCAL.sql | 1018-1020 | NF entrada: atualiza ITEMTABCOMPRA.VL_PRECO quando IN ('M','S','C','T') e não em ('M','T') para manuais |
Scripts/GERA_NOTAFISCAL.sql | 1103-1115 | NF entrada: recalcula preço de venda (ATUALIZA_PRECOVENDA) quando não em ('M','T') |
Scripts/CANCELA_NOTAFISCAL.sql | 1135 | No cancelamento só reverte ITEMTABCOMPRA se ST_CUSTOREPOSICAO <> 'N' |
Scripts/CALCULA_CENTRORESULT.sql | 154, 456 | CMV contábil: IIF(PF.ST_CUSTOREPOSICAO IN ('M','S'), I.VL_CUSTO, ME.VL_ESTOQUE) (crédito e débito) |
Scripts/RETORNA_VLCONTA_VENDNOTA.sql | 128 | Mesma regra de CMV aplicada por vendedor |
Scripts/GERA_ESTOQUE_NOTAFISCAL.sql | 128 | Declara I_ST_CUSTOREPOSICAO dentro da geração de estoque |