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_CUSTOESTOQUETipo:DOM_CHAR1(CHAR 1) Valor padrão:M(Custo Médio) Domínio gravado no banco:M,U,F,LOpções exibidas na tela: apenasMeU
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
| Tabela | Campo | Função |
|---|---|---|
PARMESTOQUE | TP_CUSTOESTOQUE | Parâmetro global — default da empresa |
OPERACAO | TP_CUSTOESTOQUE | Override por operação (P = usa o parâmetro) |
ESTOQUE | VL_PRECOMEDIO | Preenchido quando custo = M |
ESTOQUE | VL_ULTIMOCUSTO | Preenchido quando custo = U |
Telas impactadas
| Tela | Efeito |
|---|---|
| MEQ001 | Cadastro 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 faz | Detalhe |
|---|---|
| Método de avaliação | Calcula o preço médio ponderado a cada entrada de estoque |
| Fórmula | VL_PRECOMEDIO = (QT_ATUAL × VL_PRECOMEDIO + QT_NOVA × VL_CUSTO_NOVO) / (QT_ATUAL + QT_NOVA) |
Campos atualizados em ESTOQUE | VL_PRECOMEDIO, VL_ULTIMOCUSTO, VL_ESTOQUE, QT_ESTOQUE |
| SPED ECF Bloco L200 | Código 1 (Método de avaliação: Custo Médio Ponderado) |
| Editável | Sim |
Simulação passo a passo
- Acesse MEQ001 → aba
&Estoque. - Localize o campo Tipo de custo do estoque e selecione Custo Médio (valor
M). - Salve o registro (
<Ctrl+S>ou botão Salvar). - Cadastre uma entrada de estoque para o produto X com 10 unidades a R$ 8,00 (custo total R$ 80,00).
- Cadastre outra entrada para o mesmo produto X com 10 unidades a R$ 12,00 (custo total R$ 120,00).
- Consulte o saldo do produto X na tabela
ESTOQUE:QT_ESTOQUE= 20VL_PRECOMEDIO= R$ 10,00VL_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 faz | Detalhe |
|---|---|
| Método de avaliação | Utiliza o custo da última entrada (compra) para valorizar saídas e saldos |
| Valor utilizado | VL_ULTIMOCUSTO da tabela ESTOQUE |
| Fórmula | Sem recálculo ponderado; o valor da última compra substitui o custo corrente |
| SPED ECF Bloco L200 | Código 4 (Método de avaliação: Custo específico / último custo) |
| Editável | Sim |
Simulação passo a passo
- Acesse MEQ001 → aba
&Estoque. - Localize o campo Tipo de custo do estoque e selecione Último Custo (Compra) (valor
U). - Salve o registro.
- Cadastre uma entrada de estoque para o produto Y com 10 unidades a R$ 15,00.
- Cadastre outra entrada para o produto Y com 5 unidades a R$ 20,00.
- Realize uma saída de 3 unidades do produto Y.
- 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_CUSTOESTOQUEdiferente deP, ela sobrescreve este parâmetro para aquela operação específica. Verifique o campoTP_CUSTOESTOQUEna tela de cadastro de operações de estoque.
F — FIFO (Primeiro a Entrar, Primeiro a Sair)
| O que faz | Detalhe |
|---|---|
| Método de avaliação | Valora saídas pelo custo do lote mais antigo em estoque |
| Suporte na tela | Não disponível no combobox da tela MEQ001 — valor existe no domínio do banco e em scripts |
| SPED ECF Bloco L200 | Não mapeado no script GERA_SPEDECFBLOCOL (trata apenas M e U) |
| Editável | Apenas via banco de dados ou rotinas específicas |
Simulação passo a passo
- Acesse o banco de dados diretamente (este valor não está disponível no combobox de MEQ001).
- Atualize o registro:
UPDATE PARMESTOQUE SET TP_CUSTOESTOQUE = 'F' WHERE CD_EMPRESA = <empresa>; - Cadastre entradas de estoque com custos diferentes em datas distintas.
- 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ínioTP_CUSTOESTOQUEe 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 faz | Detalhe |
|---|---|
| Método de avaliação | Variante de último custo — possivelmente considerando última entrada por qualquer motivo (não apenas compra) |
| Suporte na tela | Não disponível no combobox da tela MEQ001 |
| Editável | Apenas via banco de dados ou rotinas específicas |
Simulação passo a passo
- Acesse o banco de dados diretamente.
- Atualize o registro:
UPDATE PARMESTOQUE SET TP_CUSTOESTOQUE = 'L' WHERE CD_EMPRESA = <empresa>; - 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 valorLexiste no domínio do banco mas não está disponível no combobox. A distinção entreUeLno 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:
- Busca
TP_CUSTOESTOQUEda tabelaPARMESTOQUE(parâmetro da empresa) → variávelI_TP_CUSTOPARAMETRO. - Busca
TP_CUSTOESTOQUEda tabelaOPERACAO(operação de estoque) → variávelI_TP_CUSTOOPERACAO. - Se
I_TP_CUSTOOPERACAO=Pou é nulo → usaI_TP_CUSTOPARAMETRO(este parâmetro). - Se
I_TP_CUSTOOPERACAO= outro valor (M,U,F,L) → usa o valor da operação.
Tabela Comparativa Resumida
| Valor | Descrição | Disponível na Tela | SPED ECF (L200) | Cálculo |
|---|---|---|---|---|
M | Custo Médio Ponderado | ✅ | Código 1 | Média ponderada das entradas |
U | Último Custo (Compra) | ✅ | Código 4 | Último custo registrado |
F | FIFO | ❌ | Não mapeado | Lote mais antigo |
L | Último Custo (variante) | ❌ | Não mapeado | Similar a U |
Procedures impactadas
Rotinas Delphi com referência direta
| Rotina | Arquivo | Evidência |
|---|---|---|
TdmMEQ001.tabPARMESTOQUEAfterInsert | UdmMEQ001.pas (L279) | Define default M ao inserir novo registro |
TfrmUMPD002CUSTOPEDIDO.FormShow | UMPD002CUSTOPEDIDO.pas (L124) | Usa PE.TP_CUSTOESTOQUE para decidir se exibe VL_CUSTOMEDIO ou VL_ULTIMOCUSTO |
TdmTEQ001.tabOPERACAOAfterInsert | UdmTEQ001.pas (L74) | Define default P no campo da operação |
ValidaOperacao | jValidate.pas (L2939) | Consulta TP_CUSTOESTOQUE ao validar operação |
Referências SQL diretas ao campo
| Procedure / Script | Arquivo | Comentário |
|---|---|---|
GERA_ESTOQUE | GERA_ESTOQUE.sql | Resolve custo: parâmetro vs operação; usa IIF para escolher VL_PRECOMEDIO ou VL_ULTIMOCUSTO |
CANCELA_ESTOQUE | CANCELA_ESTOQUE.sql | Lê TP_CUSTOESTOQUE para recalcular saldo no cancelamento |
RECALCULA_ESTOQUE | RECALCULA_ESTOQUE.sql | Lê parâmetro para recalcular todos os saldos |
RECALCULA_ESTOQUEDIA | RECALCULA_ESTOQUEDIA.sql | Idem — recálculo diário de saldos |
CALCULA_FORMACAOPRECOVENDA | CALCULA_FORMACAOPRECOVENDA.sql | IIF(:V_TP_CUSTOESTOQUE = 'M', I.VL_CUSTOMEDIO, I.VL_ULTIMOCUSTO) |
RETORNA_CUSTOITEMFORMPRECOVENDA | RETORNA_CUSTOITEMFORMPRECOVENDA.sql | Consulta custo do item para formação de preço |
RETORNA_CUSTOMPFORMPRECOVENDA | RETORNA_CUSTOMPFORMPRECOVENDA.sql | Idem — custo médio ponderado |
RETORNA_SALDOESTOQUE | RETORNA_SALDOESTOQUE.sql | Retorna saldo com custo conforme parâmetro |
RETORNA_SALDOESTOQUE_IMPOSTO | RETORNA_SALDOESTOQUE_IMPOSTO.sql | Idem — incluindo impostos |
RETORNA_SALDOESTOQUEGRADE | RETORNA_SALDOESTOQUEGRADE.sql | Idem — por grade |
GERA_SPEDBLOCOL | GERA_SPEDBLOCOL.sql | Mapeia M→1, U→4 no registro L200 do SPED |
GERA_SPEDECFBLOCOL | GERA_SPEDECFBLOCOL.sql | Mapeamento idem para ECF |
GERA_SPEDECFBLOCOL210 | GERA_SPEDECFBLOCOL210.sql | Consulta parâmetro para Bloco L210 |
VIEW_REQ010 | VIEW_REQ010.sql | CASE 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 (
MeU), embora o domínio do banco aceiteFeL. 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_CUSTOESTOQUEtambém existe na tabelaOPERACAO(defaultP). Quando a operação define um valor diferente deP, 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ódigo1) eU(código4). ValoresFouLnão possuem mapeamento explícito nesses scripts, o que pode gerar inconsistências na apuração fiscal.