Pular para o conteúdo principal

TP_CUSTOESTOQUE — Tipo de Avaliação de Estoque

Tela de configuração: MEQ001 — Parâmetros de Estoque Localização: Aba &Estoque → combobox Tipo de custo do estoque Tabela / Coluna: PARMESTOQUE.TP_CUSTOESTOQUE Tipo: DOM_CHAR1 (CHAR 1) Valor padrão: M (Custo Médio) Domínio gravado no banco: M, U, F, L Opções exibidas na tela: apenas M e U

Resumo​

Define qual método de avaliação de custo o sistema utiliza para calcular o valor das movimentações de estoque e o saldo em estoque. O valor escolhido aqui serve como padrão global da empresa e é consultado por praticamente todas as procedures de geração e recálculo de estoque, bem como nos scripts de apuração fiscal (SPED ECF, SPED Contribuições).

Cada operação de estoque cadastrada em OPERACAO também possui seu próprio campo TP_CUSTOESTOQUE (default P). Quando a operação define P, o sistema usa o valor configurado neste parâmetro (PARMESTOQUE). Quando a operação define outro valor (M, U, F, L), o valor da operação prevalece — permitindo exceções pontuais sem alterar o parâmetro global.

Campos envolvidos​

TabelaCampoFunção
PARMESTOQUETP_CUSTOESTOQUEParâmetro global — default da empresa
OPERACAOTP_CUSTOESTOQUEOverride por operação (P = usa o parâmetro)
ESTOQUEVL_PRECOMEDIOPreenchido quando custo = M
ESTOQUEVL_ULTIMOCUSTOPreenchido quando custo = U

Telas impactadas​

TelaEfeito
MEQ001Cadastro do parâmetro (este documento)
TEQ001 — Parâmetros de Estoque (Operação)Cada operação pode herdar (P) ou sobrescrever o custo
UMPD002 — Custo do Pedido (MPD002)Consulta custo conforme este parâmetro para exibição

Opções disponíveis​

M — Custo Médio​

O que fazDetalhe
Método de avaliaçãoCalcula o preço médio ponderado a cada entrada de estoque
FórmulaVL_PRECOMEDIO = (QT_ATUAL × VL_PRECOMEDIO + QT_NOVA × VL_CUSTO_NOVO) / (QT_ATUAL + QT_NOVA)
Campos atualizados em ESTOQUEVL_PRECOMEDIO, VL_ULTIMOCUSTO, VL_ESTOQUE, QT_ESTOQUE
SPED ECF Bloco L200Código 1 (Método de avaliação: Custo Médio Ponderado)
EditávelSim

Simulação passo a passo​

  1. Acesse MEQ001 → aba &Estoque.
  2. Localize o campo Tipo de custo do estoque e selecione Custo Médio (valor M).
  3. Salve o registro (<Ctrl+S> ou botão Salvar).
  4. Cadastre uma entrada de estoque para o produto X com 10 unidades a R$ 8,00 (custo total R$ 80,00).
  5. Cadastre outra entrada para o mesmo produto X com 10 unidades a R$ 12,00 (custo total R$ 120,00).
  6. Consulte o saldo do produto X na tabela ESTOQUE:
    • QT_ESTOQUE = 20
    • VL_PRECOMEDIO = R$ 10,00
    • VL_ESTOQUE = R$ 200,00

Resultado esperado: O sistema recalcula o preço médio ponderado a cada entrada. O campo VL_PRECOMEDIO do produto é atualizado para R$ 10,00, e qualquer saída subsequente utilizará esse custo médio para valorização.


U — Último Custo (Compra)​

O que fazDetalhe
Método de avaliaçãoUtiliza o custo da última entrada (compra) para valorizar saídas e saldos
Valor utilizadoVL_ULTIMOCUSTO da tabela ESTOQUE
FórmulaSem recálculo ponderado; o valor da última compra substitui o custo corrente
SPED ECF Bloco L200Código 4 (Método de avaliação: Custo específico / último custo)
EditávelSim

Simulação passo a passo​

  1. Acesse MEQ001 → aba &Estoque.
  2. Localize o campo Tipo de custo do estoque e selecione Último Custo (Compra) (valor U).
  3. Salve o registro.
  4. Cadastre uma entrada de estoque para o produto Y com 10 unidades a R$ 15,00.
  5. Cadastre outra entrada para o produto Y com 5 unidades a R$ 20,00.
  6. Realize uma saída de 3 unidades do produto Y.
  7. Consulte o saldo:
    • O custo da saída será R$ 20,00/un (último custo registrado), total R$ 60,00.
    • VL_ULTIMOCUSTO = R$ 20,00.

Resultado esperado: As saídas de estoque são valorizadas pelo custo da última compra (R$ 20,00), independentemente do custo médio. O campo VL_ULTIMOCUSTO do produto é utilizado para cálculo do valor das movimentações.

Exceção / Importante: Se a operação de estoque cadastrada em TEQ001 tiver seu próprio TP_CUSTOESTOQUE diferente de P, ela sobrescreve este parâmetro para aquela operação específica. Verifique o campo TP_CUSTOESTOQUE na tela de cadastro de operações de estoque.


F — FIFO (Primeiro a Entrar, Primeiro a Sair)​

O que fazDetalhe
Método de avaliaçãoValora saídas pelo custo do lote mais antigo em estoque
Suporte na telaNão disponível no combobox da tela MEQ001 — valor existe no domínio do banco e em scripts
SPED ECF Bloco L200Não mapeado no script GERA_SPEDECFBLOCOL (trata apenas M e U)
EditávelApenas via banco de dados ou rotinas específicas

Simulação passo a passo​

  1. Acesse o banco de dados diretamente (este valor não está disponível no combobox de MEQ001).
  2. Atualize o registro: UPDATE PARMESTOQUE SET TP_CUSTOESTOQUE = 'F' WHERE CD_EMPRESA = <empresa>;
  3. Cadastre entradas de estoque com custos diferentes em datas distintas.
  4. Realize uma saída — o sistema valorizará pelo custo do lote mais antigo.

Resultado esperado: As saídas utilizam o custo do lote mais antigo disponível (FIFO). Porém, o valor F pode não ser suportado em todos os scripts de apuração fiscal, que tratam apenas M e U.

Exceção / Importante: O valor F (FIFO) está documentado no dicionário de tipos do domínio TP_CUSTOESTOQUE e citado na documentação de movimentação de estoque, mas não aparece como opção no combobox da tela MEQ001. Selecione este valor apenas se houver necessidade específica e validação técnica prévia.


L — Último Custo​

O que fazDetalhe
Método de avaliaçãoVariante de último custo — possivelmente considerando última entrada por qualquer motivo (não apenas compra)
Suporte na telaNão disponível no combobox da tela MEQ001
EditávelApenas via banco de dados ou rotinas específicas

Simulação passo a passo​

  1. Acesse o banco de dados diretamente.
  2. Atualize o registro: UPDATE PARMESTOQUE SET TP_CUSTOESTOQUE = 'L' WHERE CD_EMPRESA = <empresa>;
  3. Realize movimentações de estoque e observe o custo utilizado nas saídas.

Resultado esperado: Comportamento similar a U, mas a distinção funcional entre U e L não está claramente definida no código-fonte analisado.

Exceção / Importante: Assim como F, o valor L existe no domínio do banco mas não está disponível no combobox. A distinção entre U e L no comportamento real do sistema requer validação adicional.

Regra Geral de Resolução de Custo​

O script GERA_ESTOQUE implementa a seguinte lógica de resolução:

  1. Busca TP_CUSTOESTOQUE da tabela PARMESTOQUE (parâmetro da empresa) → variável I_TP_CUSTOPARAMETRO.
  2. Busca TP_CUSTOESTOQUE da tabela OPERACAO (operação de estoque) → variável I_TP_CUSTOOPERACAO.
  3. Se I_TP_CUSTOOPERACAO = P ou é nulo → usa I_TP_CUSTOPARAMETRO (este parâmetro).
  4. Se I_TP_CUSTOOPERACAO = outro valor (M, U, F, L) → usa o valor da operação.

Tabela Comparativa Resumida​

ValorDescriçãoDisponível na TelaSPED ECF (L200)Cálculo
MCusto Médio Ponderado✅Código 1Média ponderada das entradas
UÚltimo Custo (Compra)✅Código 4Último custo registrado
FFIFO❌Não mapeadoLote mais antigo
LÚltimo Custo (variante)❌Não mapeadoSimilar a U

Procedures impactadas​

Rotinas Delphi com referência direta​

RotinaArquivoEvidência
TdmMEQ001.tabPARMESTOQUEAfterInsertUdmMEQ001.pas (L279)Define default M ao inserir novo registro
TfrmUMPD002CUSTOPEDIDO.FormShowUMPD002CUSTOPEDIDO.pas (L124)Usa PE.TP_CUSTOESTOQUE para decidir se exibe VL_CUSTOMEDIO ou VL_ULTIMOCUSTO
TdmTEQ001.tabOPERACAOAfterInsertUdmTEQ001.pas (L74)Define default P no campo da operação
ValidaOperacaojValidate.pas (L2939)Consulta TP_CUSTOESTOQUE ao validar operação

Referências SQL diretas ao campo​

Procedure / ScriptArquivoComentário
GERA_ESTOQUEGERA_ESTOQUE.sqlResolve custo: parâmetro vs operação; usa IIF para escolher VL_PRECOMEDIO ou VL_ULTIMOCUSTO
CANCELA_ESTOQUECANCELA_ESTOQUE.sqlLê TP_CUSTOESTOQUE para recalcular saldo no cancelamento
RECALCULA_ESTOQUERECALCULA_ESTOQUE.sqlLê parâmetro para recalcular todos os saldos
RECALCULA_ESTOQUEDIARECALCULA_ESTOQUEDIA.sqlIdem — recálculo diário de saldos
CALCULA_FORMACAOPRECOVENDACALCULA_FORMACAOPRECOVENDA.sqlIIF(:V_TP_CUSTOESTOQUE = 'M', I.VL_CUSTOMEDIO, I.VL_ULTIMOCUSTO)
RETORNA_CUSTOITEMFORMPRECOVENDARETORNA_CUSTOITEMFORMPRECOVENDA.sqlConsulta custo do item para formação de preço
RETORNA_CUSTOMPFORMPRECOVENDARETORNA_CUSTOMPFORMPRECOVENDA.sqlIdem — custo médio ponderado
RETORNA_SALDOESTOQUERETORNA_SALDOESTOQUE.sqlRetorna saldo com custo conforme parâmetro
RETORNA_SALDOESTOQUE_IMPOSTORETORNA_SALDOESTOQUE_IMPOSTO.sqlIdem — incluindo impostos
RETORNA_SALDOESTOQUEGRADERETORNA_SALDOESTOQUEGRADE.sqlIdem — por grade
GERA_SPEDBLOCOLGERA_SPEDBLOCOL.sqlMapeia M→1, U→4 no registro L200 do SPED
GERA_SPEDECFBLOCOLGERA_SPEDECFBLOCOL.sqlMapeamento idem para ECF
GERA_SPEDECFBLOCOL210GERA_SPEDECFBLOCOL210.sqlConsulta parâmetro para Bloco L210
VIEW_REQ010VIEW_REQ010.sqlCASE PE.TP_CUSTOESTOQUE WHEN 'M' THEN VL_CUSTOMEDIO ELSE VL_ULTIMOCUSTO

Candidatas por uso da tabela (sem referência direta ao campo)​

As procedures abaixo acessam a tabela PARMESTOQUE mas não citam explicitamente TP_CUSTOESTOQUE nas linhas identificadas. Não há evidência de impacto funcional direto deste campo nelas: AJUSTA_ORDEMPRODPEDANTECIPADO, ALTERACAO_BANDA, ATUALIZA_CONSUMOMEDIO, ATUALIZA_ESTOQUEDIAPESSOA, CONFIRMA_ORDEMSERVICO, CONFIRMA_ORDEMSERVICOMETAL, GERA_ESTOQUE_NOTAFISCAL, GERA_ESTOQUEPSALT, GERA_NOTAFISCALESTOQUE, GERA_ORDEMPRODUCAO, GERA_PRODENVELOPAMENTO, GERA_PRODLOTEPRODUCAO, GERA_PRODMONTAGEMRECAP, GERA_PRODVULCANIZACAO, GRAVA_AVISOS, MONTA_ORDEMPRODITEMPEDIDOGRADE, MONTA_ORDEMPRODUCAOPEDIDO, MONTA_ORDEMPRODUCAOSERVICO, POPULA_ITEMFRETENOTA, PROCESSA_ETIQUETA.

Observações​

  • O combobox da tela MEQ001 exibe apenas duas opções (M e U), embora o domínio do banco aceite F e L. Valores fora das opções visíveis devem ser aplicados apenas com justificativa técnica e conhecimento do impacto nos scripts de apuração fiscal.
  • O campo TP_CUSTOESTOQUE também existe na tabela OPERACAO (default P). Quando a operação define um valor diferente de P, ela sobrescreve este parâmetro para aquela operação específica.
  • Os scripts de geração do SPED ECF e SPED Contribuições tratam apenas os valores M (código 1) e U (código 4). Valores F ou L não possuem mapeamento explícito nesses scripts, o que pode gerar inconsistências na apuração fiscal.