Mudanças entre as edições de "Custo Médio"

De TotaliWiki
Ir para: navegação, pesquisa
(Conceito)
 
(58 revisões intermediárias por 5 usuários não estão sendo mostradas)
Linha 1: Linha 1:
{{Rascunho}}
+
{{Tags|Totall Backoffice}}
 
+
{{MenuLateral|[[Totall Commerce]]|[[Totall Backoffice]]|[[Produtos]]}}
== Conceito ==
+
O Totall Backoffice possui em sua base funções para cálculo e apresentação de custo médio que são utilizadas pelos módulos do sistema para exibir o mesmo.
 
+
Estas funções são utilizadas por exemplo nos forms de Inventário, SPED, Sintegra e Histórico de Produtos.
O Totall BackOffice possui em sua base funções para cálculo e apresentação de custo médio que são utilizadas pelos módulos do sistema para exibir o mesmo.
+
Estas funções são utilizadas por exemplo nos forms de Inventário, Sintegra e Histórico de Produtos.
+
 
Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio.
 
Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio.
  
 
== Cálculo do Custo Médio ==
 
== Cálculo do Custo Médio ==
O cálculo do custo médio é baseado nas vendas(TT_VEN) e compras (TT_COM) de um determinado produto.
 
  
Não leva em conta lançamentos avulsos do produto(TT_LAN).
+
O cálculo do custo médio é baseado nas vendas (TT_VEN) e compras/nota complementar/importação (TT_COM + TT_VEN->TD_NAT.TIPNAT = 'I') de um determinado produto.
A formula utilizada é a seguinte:
+
ÿ feito um select com todas as vendas e compras, ordenadas por data, de um determinado produto.
+
Para cada linha se calcula:
+
  
Qtd em Estoque = Qtd em Estoque Anterior + Qtd Movimentada
+
Não leva em conta lançamentos avulsos do produto (TT_LAN).
Se for uma compra
+
 
Valor do Estoque = Valor do Estoque Anterior  + Valor Movimentado;
+
A fórmula utilizada está descrito abaixo. É feito um select com todas as vendas e compras/nota complementar/importação, ordenadas por data, de um determinado produto. E para cada linha se calcula:
Custo Médio := Valor Estoque / Qtd Estoque  
+
 
Se for uma venda
+
'''Qtd em Estoque''': Qtd em Estoque Anterior + Qtd Movimentada → ''Se for uma compra/importação''
Valor do Estoque = Valor do Estoque Anterior  + (Qtd Movimentada pela venda * Custo Médio)
+
 
 +
'''Valor do Estoque''': Valor do Estoque Anterior  + Valor Movimentado;
 +
 
 +
'''Custo Médio''': Valor Estoque / Qtd Estoque → ''(Se for uma venda)''
 +
 
 +
'''Valor do Estoque''': Valor do Estoque Anterior  + (Qtd Movimentada pela venda * Custo Médio)
  
 
'''Observações:'''
 
'''Observações:'''
  
 
a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior.
 
a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior.
b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o calculo das linhas subseqüente ficará inconsistente.
+
 
 +
b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o cálculo das linhas subsequentes ficará inconsistente.
 +
 
 
c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio.
 
c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio.
  
 
Exemplo de cálculo:
 
Exemplo de cálculo:
Ver planilha Custo Médio.xls
+
Ver planilha [svn://ttpg9/totalldocumentos/base_conhecimento/backoffice/produtos/custo%20médio/Custo%20Medio.xls Custo Médio.xls]
  
 +
d) Nota Complementar altera apenas o valor do custo médio a quantidade se mantém.
  
 +
== Select para validar Custo Médio ==
 +
* Custos relativos a notas de entradas será utilizado a fórmula para compra/nota complementar.
 +
* Custos relativos a notas de importação será utilizado a fórmula para importação.
  
== Representação física no banco ==
+
== Fórmula do Custo Médio Fiscal ==
TT_ICO
+
* Compras/Nota Complementar
QTD_CM  - Guarda a quantidade movimentada a ser utilizada no cálculo
+
  cm_uni_calculado = Valor_item -- Valor do Item
VLR_CM  - Guarda o valor movimentado a ser utilizada no cálculo
+
      + custo_frete -- Valor Frete
ORD_CM  - Ordenação utilizada no cálculo do custo médio (somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem)
+
      + valor_ipi + --Valor IPI
 +
      + Valor_ICMS_calculado
 +
      - valor_pis
 +
      - valor_cofins
 +
* Importação
 +
  cm_uni_calculado = valor_item -- Valor Total NF
 +
                    + valor_ipi + Valor IPI
 +
                    + valor_seguro -- Valor do Seguro
 +
                    + valor_frete -- Valor do Frete
 +
                    + valor_II -- Valor II
 +
                    + valor_pis -- Valor PIS
 +
                    + valor_cofins -- Valor COFINS
 +
                    + valor_ant -- Anti Dumping
 +
                    + valor_adu -- Despesas Aduaneiras Tributáveis
 +
                    + valor_icms -- Valor de ICMS
 +
                    - valor_pis_cre -- Valor PIS Creditável
 +
                    - valor_cof_cre -- Valor COFINS Creditável
  
TT_IVE
+
== Fórmula do Custo Médio Gerencial ==
QTD_CM - Idem ao TT_ICO
+
* Compras/Nota Complementar
VLR_CM - Idem ao TT_ICO
+
    cmg_uni_calculado =    Valor_item -- Valor do Item
ORD_CM  - Idem ao TT_ICO
+
    + custo_frete -- Valor Frete
 +
    + valor_ipi -- Valor IPI
 +
    + substituicao_item
 +
    + Valor_retencao
 +
* Importação
 +
    cmg_uni_calculado = valor_item -- Valor Total NF
 +
                      + valor_ipi + Valor IPI
 +
                      + valor_seguro -- Valor do Seguro
 +
                      + valor_frete -- Valor do Frete
 +
                      + valor_II -- Valor II
 +
                      + valor_ant -- Anti Dumping
 +
                      + valor_adu -- Despesas Aduaneiras Tributáveis
 +
                      + valor_icms -- Valor de ICMS
  
TR_MOV
+
== Sub Formulas utilizadas ==
SAL_CM ? Guarda o saldo (Qtd) de estoque após a última movimentação do dia
+
* Compras/Nota Complementar
VLR_CM ? Guarda o valor de estoque após a última movimentação do dia
+
  Valor_item = ((valor_liquido_compra-valor_sub_compra)*(total_item+valor_ipi)/Nvlz(valor_bruto_compra, 1))-valor_ipi
Obs.: Não é guardado o custo médio, mas para obtê-lo basta dividir o valor pela quantidade
+
  
TT_SAL
+
  Se tipo_icms = 'Tributado' AND tributacao_na_venda = 'Substituído' AND retem_substituicao = 'T'
CAL_CM  - Data até a qual já foi calculado o custo médio, utilizado para continuar o cálculo sem necessitar recalcular tudo novamente (Lembrando que o custo médio não é calculado logo após uma compra ou uma venda pois isto iria tornar este processo demorado)
+
    Valor_ICMS_calculado = Valor_retencao
INI_CM ? Data inicial para se calcular o custo médio
+
  Senão
VLR_CM ? Valor em estoque na data de início do custo médio
+
  Valor_ICMS_calculado = substituicao_item
QTD_CM ? Quantidade em estoque na data de início do custo médio
+
    + Valor_retencao
 +
    - Se tributacao_na_venda <> 'Substituído' então VLRICM senão 0  
  
Observação: Os 3 últimos campos são para registrar um custo médio inicial para clientes que não tem como resgatar o seu estoque desde o inicio de suas atividades.
+
  Se substituido_federal='F' e isento_pis='F' então
Neste caso o sistema começará o cálculo a partir desta data e levando em conta estes valores iniciais.
+
      Se piscofins_no_ipi = 'T'
 +
    valor_pis = ((pis/100)*(Valor_item+valor_ipi)) -- Valor PIS
 +
      Senão 
 +
    valor_pis = ((pis/100)*(Valor_item))            -- Valor PIS
 +
  Senão valor_pis = 0
 +
 
 +
== Select verificar valores de custo médio detalhados ==
 +
 
 +
{{LinkInterno|\\ttadm\Docs\publico\Base de Conhecimento\backoffice\produtos\custo médio\Detalhamento_Custo_Medio.sql}}
 +
 
 +
== Dicionário de Dados ==
 +
 
 +
=== TT_ACM ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| ORD_CM || NUMBER(10) || Ordem para Cálculo
 +
|-
 +
| VLRAJU || NUMBER(16,4) || Valor do Ajuste (fiscal igual ao gerencial)
 +
|-
 +
| SAL_CM || NUMBER(16,4) || Quantidade em estoque do produto no instante do lançamento
 +
|-
 +
| TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto no instante do lançamento
 +
|-
 +
| TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto no instante do lançamento
 +
|}
 +
 
 +
:''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.''
 +
:''VLRAJU são os valores que afetarão o custo médio daquele dia. É equivalente às colunas VLR_CM e VLRCMG da TT_ICO.''
 +
:''QTD_CM está fixo 0 na rotina de cálculo.''
 +
:''O ajuste de CM é considerado no início do dia, antes dos demais movimentos.''
 +
 
 +
=== TT_ICO ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| ORD_CM || NUMBER(10) || Ordem para Cálculo
 +
|-
 +
| QTD_CM || NUMBER(12,4) || Quantidade movimentada
 +
|-
 +
| VLR_CM || NUMBER(16,4) || Custo fiscal do item da compra
 +
|-
 +
| VLRCMG || NUMBER(16,4) || Custo gerencial do item da compra
 +
|-
 +
| SAL_CM || NUMBER(16,4) || Quantidade em estoque do produto no instante da compra
 +
|-
 +
| TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto no instante da compra
 +
|-
 +
| TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto no instante da compra
 +
|}
 +
 
 +
:''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.''
 +
:''QTD_CM é obtido pelo QTDMOV na trigger''.
 +
:''VLR_CM, VLRCMG e QTD_CM são os custos da compra/nota complementar que serão considerados nos cálculos.''
 +
 
 +
=== TT_LAN ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| ORD_CM || NUMBER(10) || Ordem para Cálculo
 +
|-
 +
| QTD_CM || NUMBER(12,4) || Quantidade movimentada
 +
|-
 +
| SAL_CM || NUMBER(16,4) || Quantidade em estoque do produto no instante do lançamento
 +
|-
 +
| TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto no instante do lançamento
 +
|-
 +
| TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto no instante do lançamento
 +
|}
 +
 
 +
:''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.''
 +
:''QTD_CM é obtido pelo QTDMOV na trigger''.
 +
 
 +
=== TT_IVE ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| ORD_CM || NUMBER(10) || Ordem para Cálculo
 +
|-
 +
| QTD_CM || NUMBER(12,4) || Quantidade movimentada
 +
|-
 +
| VLR_CM || NUMBER(16,4) || Custo fiscal do item na compra "importação"
 +
|-
 +
| VLRCMG || NUMBER(16,4) || Custo gerencial do item da compra "importação"
 +
|-
 +
| SAL_CM || NUMBER(16,4) || Quantidade em estoque do produto no instante da venda
 +
|-
 +
| TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto no instante da venda
 +
|-
 +
| TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto no instante da venda
 +
|}
 +
 
 +
:''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.''
 +
:''QTD_CM é obtido pelo QTDMOV na trigger''.
 +
:''VLR_CM, VLRCMG e QTD_CM são os custos da importação que serão considerados nos cálculos''.
 +
 
 +
=== TR_MOV ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| SAL_CM || NUMBER(16,4) || Quantidade em estoque no fim do dia
 +
|-
 +
| VLR_CM || NUMBER(16,4) || Valor do estoque fiscal no fim do dia
 +
|-
 +
| VLRCMG || NUMBER(16,4) || Valor do estoque gerencial no fim do dia
 +
|}
 +
 
 +
:''Não é guardado o custo médio unitário, mas para obtê-lo basta dividir o valor pela quantidade.''
 +
 
 +
=== TT_SAL ===
 +
{| class="wikitable"
 +
|-
 +
! Coluna !! Tipo e Precisão !! Descrição
 +
|-
 +
| CAL_CM || DATE || Até quando custo médio está calculado
 +
|-
 +
| ATU_CM || VARCHAR(1) || Indica se existe ou não necessidade do cálculo ["T" ou "F"]
 +
|-
 +
| INI_CM || DATE || Data inicial para cálculo do custo médio (data anterior a primeira compra)
 +
|-
 +
| QTD_CM || NUMBER(14,2) || Quantidade em estoque inicial
 +
|-
 +
| VLR_CM || NUMBER(16,4) || Valor do estoque fiscal inicial
 +
|-
 +
| VLRCMG || NUMBER(16,4) || Valor do estoque gerencial inicial
 +
|-
 +
| EST_CM || NUMBER(14,2) || Quantidade em estoque atual
 +
|-
 +
| TOT_CM || NUMBER(16,4) || Valor do estoque fiscal atual
 +
|-
 +
| TOTCMG || NUMBER(16,4) || Valor do estoque gerencial atual
 +
|}
 +
 
 +
:''CAL_CM é utilizado para continuar o cálculo sem necessitar recalcular tudo novamente.Lembrando que o custo médio não é calculado logo após uma compra ou uma venda pois isto iria tornar este processo demorado.''
 +
:''Os campos QTD_CM, VLR_CM e VLRCMG são para registrar um custo médio inicial para clientes que não tem como resgatar o seu estoque desde o inicio de suas atividades.''
 +
:''Neste caso o sistema começará o cálculo a partir desta data e levando em conta estes valores iniciais.''
  
 
== Funções de Banco Envolvidas ==
 
== Funções de Banco Envolvidas ==
  
CalculaCustoMedio(pCODFIL,pFILMAT,pCODMAT,pCODCOR,pCODTAM)
+
'''CalculaCustoMedio:'''
 +
<syntaxhighlight lang="SQL">
 +
CalculaCustoMedio(pCODFIL, pFILMAT, pCODMAT, pCODCOR, pCODTAM)
 +
</syntaxhighlight>
 +
 
 
Calcula o custo médio de um determinado produto.
 
Calcula o custo médio de um determinado produto.
 
O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio).
 
O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio).
Linha 67: Linha 244:
 
No final do processo é gravado em CAL_CM a data da ultima movimentação calculada.
 
No final do processo é gravado em CAL_CM a data da ultima movimentação calculada.
  
 +
'''CalculaCustoMedioFilial:'''
 +
 +
<syntaxhighlight lang="SQL">
 
CalculaCustoMedioFilial(pCODFIL)
 
CalculaCustoMedioFilial(pCODFIL)
 +
</syntaxhighlight>
 +
 
Calcula o custo médio de toda uma filial.
 
Calcula o custo médio de toda uma filial.
 
Utiliza os mesmos processos da CalculaCustoMedio
 
Utiliza os mesmos processos da CalculaCustoMedio
  
 +
'''CustoMedio:'''
 +
 +
<syntaxhighlight lang="SQL">
 
CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef)
 
CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef)
 +
</syntaxhighlight>
 +
 
Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado:
 
Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado:
 
Se Tipo=1 -> Retorna Quantidade em estoque
 
Se Tipo=1 -> Retorna Quantidade em estoque
Linha 78: Linha 265:
 
Se não for passada uma data calcula até a data atual.
 
Se não for passada uma data calcula até a data atual.
  
'''JOB_Recalcula_Custo_Medio'''
+
'''JOB_Recalcula_Custo_Medio:'''
  
 +
<syntaxhighlight lang="SQL">
 
  CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS
 
  CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS
 
  vCODFIL TD_FIL.CODFIL%TYPE;
 
  vCODFIL TD_FIL.CODFIL%TYPE;
Linha 96: Linha 284:
 
  end ProcCalculaCustoMedio;
 
  end ProcCalculaCustoMedio;
 
  /
 
  /
 
+
</syntaxhighlight>
 +
<br/>
 +
<syntaxhighlight lang="SQL">
 
  VARIABLE JOBNO NUMBER;
 
  VARIABLE JOBNO NUMBER;
 
  BEGIN
 
  BEGIN
Linha 106: Linha 296:
 
  END;
 
  END;
 
  /
 
  /
 +
</syntaxhighlight>
  
 +
== Recalcular Custo Médio ==
  
'''Recalcula_Custo_Medio'''
+
O custo médio só é materializado nas tabelas por causa do custo-banco de se calcular o custo progressivamente desde a data inicial até o momento de determinada operação ou resumo. Mas se modificarmos a função, teremos que recalcular os valores que estão materializados para que fiquem condizentes com a mudança da função. Abaixo estão alguns exemplos de como fazer isso.
  
 +
Para recalcular o custo dos últimos dois meses podemos marcar na tabela de saldo que o custo médio está calculado até 2 meses atrás.
 +
<syntaxhighlight lang="SQL">
 +
update tt_sal
 +
    set cal_cm = add_day(Trunc(Agora()),-60),
 +
        atu_cm = 'F'
 +
  where codmul = 0
 +
    and cal_cm >= add_day(Trunc(Agora()),-60)
 +
</syntaxhighlight>
 +
 +
Nos clientes, o JOB_CALCULACUSTOMEDIOFILIAL está agendado para rodar todas as noites. Ele fará o recalculo para nós.
 +
 +
Mas se quisermos o resultado na hora, podemos chamar a função CalculaCustoMedioFilial para cada filial.
 +
<syntaxhighlight lang="SQL">
 
  DECLARE
 
  DECLARE
 
  vCODFIL TD_FIL.CODFIL%TYPE;
 
  vCODFIL TD_FIL.CODFIL%TYPE;
Linha 126: Linha 331:
 
  end;
 
  end;
 
  /
 
  /
 
+
</syntaxhighlight>
 
+
<br/>
[[Categoria: Totall Backoffice]]
+
<br/>
[[Categoria: Funcionalidades]]
+
<small>{{Referencias}}</small>

Edição atual tal como às 10h09min de 31 de dezembro de 2018

Tag-icone-mini.png Totall Backoffice

O Totall Backoffice possui em sua base funções para cálculo e apresentação de custo médio que são utilizadas pelos módulos do sistema para exibir o mesmo. Estas funções são utilizadas por exemplo nos forms de Inventário, SPED, Sintegra e Histórico de Produtos. Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio.

Cálculo do Custo Médio

O cálculo do custo médio é baseado nas vendas (TT_VEN) e compras/nota complementar/importação (TT_COM + TT_VEN->TD_NAT.TIPNAT = 'I') de um determinado produto.

Não leva em conta lançamentos avulsos do produto (TT_LAN).

A fórmula utilizada está descrito abaixo. É feito um select com todas as vendas e compras/nota complementar/importação, ordenadas por data, de um determinado produto. E para cada linha se calcula:

Qtd em Estoque: Qtd em Estoque Anterior + Qtd Movimentada → Se for uma compra/importação

Valor do Estoque: Valor do Estoque Anterior + Valor Movimentado;

Custo Médio: Valor Estoque / Qtd Estoque → (Se for uma venda)

Valor do Estoque: Valor do Estoque Anterior + (Qtd Movimentada pela venda * Custo Médio)

Observações:

a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior.

b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o cálculo das linhas subsequentes ficará inconsistente.

c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio.

Exemplo de cálculo: Ver planilha Custo Médio.xls

d) Nota Complementar altera apenas o valor do custo médio a quantidade se mantém.

Select para validar Custo Médio

  • Custos relativos a notas de entradas será utilizado a fórmula para compra/nota complementar.
  • Custos relativos a notas de importação será utilizado a fórmula para importação.

Fórmula do Custo Médio Fiscal

  • Compras/Nota Complementar
  cm_uni_calculado = Valor_item -- Valor do Item
 		    + custo_frete -- Valor Frete
 		    + valor_ipi + --Valor IPI
 		    + Valor_ICMS_calculado
 		    - valor_pis
 		    - valor_cofins
  • Importação
  cm_uni_calculado = valor_item -- Valor Total NF
                   + valor_ipi + Valor IPI
                   + valor_seguro -- Valor do Seguro
                   + valor_frete -- Valor do Frete
                   + valor_II -- Valor II 
                   + valor_pis -- Valor PIS
                   + valor_cofins -- Valor COFINS 
                   + valor_ant -- Anti Dumping
                   + valor_adu -- Despesas Aduaneiras Tributáveis
                   + valor_icms -- Valor de ICMS
                   - valor_pis_cre -- Valor PIS Creditável 
                   - valor_cof_cre -- Valor COFINS Creditável

Fórmula do Custo Médio Gerencial

  • Compras/Nota Complementar
   cmg_uni_calculado =     Valor_item  -- Valor do Item
 			  + custo_frete  -- Valor Frete
 			  + valor_ipi -- Valor IPI
 			  + substituicao_item
 			  + Valor_retencao
  • Importação
   cmg_uni_calculado = valor_item -- Valor Total NF
                     + valor_ipi + Valor IPI
                     + valor_seguro -- Valor do Seguro
                     + valor_frete -- Valor do Frete
                     + valor_II -- Valor II 
                     + valor_ant -- Anti Dumping
                     + valor_adu -- Despesas Aduaneiras Tributáveis
                     + valor_icms -- Valor de ICMS

Sub Formulas utilizadas

  • Compras/Nota Complementar
 Valor_item = ((valor_liquido_compra-valor_sub_compra)*(total_item+valor_ipi)/Nvlz(valor_bruto_compra, 1))-valor_ipi
 Se tipo_icms = 'Tributado' AND tributacao_na_venda = 'Substituído' AND retem_substituicao = 'T' 
    Valor_ICMS_calculado = Valor_retencao	
 Senão
 Valor_ICMS_calculado = substituicao_item 
 					   + Valor_retencao
 					   - Se tributacao_na_venda <> 'Substituído' então VLRICM senão 0				   
 Se substituido_federal='F' e isento_pis='F' então
     Se piscofins_no_ipi = 'T' 
 	   valor_pis = ((pis/100)*(Valor_item+valor_ipi))  -- Valor PIS
     Senão  
 	   valor_pis = ((pis/100)*(Valor_item))            -- Valor PIS
 Senão valor_pis = 0

Select verificar valores de custo médio detalhados

\\ttadm\Docs\publico\Base de Conhecimento\backoffice\produtos\custo médio\Detalhamento_Custo_Medio.sql

Dicionário de Dados

TT_ACM

Coluna Tipo e Precisão Descrição
ORD_CM NUMBER(10) Ordem para Cálculo
VLRAJU NUMBER(16,4) Valor do Ajuste (fiscal igual ao gerencial)
SAL_CM NUMBER(16,4) Quantidade em estoque do produto no instante do lançamento
TOT_CM NUMBER(16,4) Valor total de custo médio do produto no instante do lançamento
TOTCMG NUMBER(16,4) Valor total de custo gerencial do produto no instante do lançamento
ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
VLRAJU são os valores que afetarão o custo médio daquele dia. É equivalente às colunas VLR_CM e VLRCMG da TT_ICO.
QTD_CM está fixo 0 na rotina de cálculo.
O ajuste de CM é considerado no início do dia, antes dos demais movimentos.

TT_ICO

Coluna Tipo e Precisão Descrição
ORD_CM NUMBER(10) Ordem para Cálculo
QTD_CM NUMBER(12,4) Quantidade movimentada
VLR_CM NUMBER(16,4) Custo fiscal do item da compra
VLRCMG NUMBER(16,4) Custo gerencial do item da compra
SAL_CM NUMBER(16,4) Quantidade em estoque do produto no instante da compra
TOT_CM NUMBER(16,4) Valor total de custo médio do produto no instante da compra
TOTCMG NUMBER(16,4) Valor total de custo gerencial do produto no instante da compra
ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
QTD_CM é obtido pelo QTDMOV na trigger.
VLR_CM, VLRCMG e QTD_CM são os custos da compra/nota complementar que serão considerados nos cálculos.

TT_LAN

Coluna Tipo e Precisão Descrição
ORD_CM NUMBER(10) Ordem para Cálculo
QTD_CM NUMBER(12,4) Quantidade movimentada
SAL_CM NUMBER(16,4) Quantidade em estoque do produto no instante do lançamento
TOT_CM NUMBER(16,4) Valor total de custo médio do produto no instante do lançamento
TOTCMG NUMBER(16,4) Valor total de custo gerencial do produto no instante do lançamento
ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
QTD_CM é obtido pelo QTDMOV na trigger.

TT_IVE

Coluna Tipo e Precisão Descrição
ORD_CM NUMBER(10) Ordem para Cálculo
QTD_CM NUMBER(12,4) Quantidade movimentada
VLR_CM NUMBER(16,4) Custo fiscal do item na compra "importação"
VLRCMG NUMBER(16,4) Custo gerencial do item da compra "importação"
SAL_CM NUMBER(16,4) Quantidade em estoque do produto no instante da venda
TOT_CM NUMBER(16,4) Valor total de custo médio do produto no instante da venda
TOTCMG NUMBER(16,4) Valor total de custo gerencial do produto no instante da venda
ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
QTD_CM é obtido pelo QTDMOV na trigger.
VLR_CM, VLRCMG e QTD_CM são os custos da importação que serão considerados nos cálculos.

TR_MOV

Coluna Tipo e Precisão Descrição
SAL_CM NUMBER(16,4) Quantidade em estoque no fim do dia
VLR_CM NUMBER(16,4) Valor do estoque fiscal no fim do dia
VLRCMG NUMBER(16,4) Valor do estoque gerencial no fim do dia
Não é guardado o custo médio unitário, mas para obtê-lo basta dividir o valor pela quantidade.

TT_SAL

Coluna Tipo e Precisão Descrição
CAL_CM DATE Até quando custo médio está calculado
ATU_CM VARCHAR(1) Indica se existe ou não necessidade do cálculo ["T" ou "F"]
INI_CM DATE Data inicial para cálculo do custo médio (data anterior a primeira compra)
QTD_CM NUMBER(14,2) Quantidade em estoque inicial
VLR_CM NUMBER(16,4) Valor do estoque fiscal inicial
VLRCMG NUMBER(16,4) Valor do estoque gerencial inicial
EST_CM NUMBER(14,2) Quantidade em estoque atual
TOT_CM NUMBER(16,4) Valor do estoque fiscal atual
TOTCMG NUMBER(16,4) Valor do estoque gerencial atual
CAL_CM é utilizado para continuar o cálculo sem necessitar recalcular tudo novamente.Lembrando que o custo médio não é calculado logo após uma compra ou uma venda pois isto iria tornar este processo demorado.
Os campos QTD_CM, VLR_CM e VLRCMG são para registrar um custo médio inicial para clientes que não tem como resgatar o seu estoque desde o inicio de suas atividades.
Neste caso o sistema começará o cálculo a partir desta data e levando em conta estes valores iniciais.

Funções de Banco Envolvidas

CalculaCustoMedio:

CalculaCustoMedio(pCODFIL, pFILMAT, pCODMAT, pCODCOR, pCODTAM)

Calcula o custo médio de um determinado produto. O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio). Para cada lançamento grava a ordem que o mesmo foi processado(ORD_CM), para reordenação posterior. A cada dia é gravado na TR_MOV o VLR_CM e QTD_CM para futuras consultas do custo médio. No final do processo é gravado em CAL_CM a data da ultima movimentação calculada.

CalculaCustoMedioFilial:

CalculaCustoMedioFilial(pCODFIL)

Calcula o custo médio de toda uma filial. Utiliza os mesmos processos da CalculaCustoMedio

CustoMedio:

CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef)

Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado: Se Tipo=1 -> Retorna Quantidade em estoque Se Tipo=2 -> Valor Total do Estoque (Padrão) Se Tipo=3 -> Custo Médio do Produto Se não for passada uma data calcula até a data atual.

JOB_Recalcula_Custo_Medio:

 CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS
 vCODFIL TD_FIL.CODFIL%TYPE;
 cTemp VARCHAR(20);
 CURSOR Filiais IS
 SELECT vCODFIL
  FROM TD_FIL;
 BEGIN
  OPEN Filiais;
  LOOP
    FETCH Filiais INTO vCODFIL;
    EXIT WHEN Filiais%NOTFOUND;
    cTemp:=CalculaCustoMedioFilial(vCODFIL);
  END LOOP;         
  CLOSE Filiais;
 END ProcCalculaCustoMedio;
 /


 VARIABLE JOBNO NUMBER;
 BEGIN
     DBMS_JOB.SUBMIT(:JOBNO
                    ,'ProcCalculaCustoMedio;'
                    ,SYSDATE
                    ,'trunc(SYSDATE) + 23/24'
                    );
 END;
 /

Recalcular Custo Médio

O custo médio só é materializado nas tabelas por causa do custo-banco de se calcular o custo progressivamente desde a data inicial até o momento de determinada operação ou resumo. Mas se modificarmos a função, teremos que recalcular os valores que estão materializados para que fiquem condizentes com a mudança da função. Abaixo estão alguns exemplos de como fazer isso.

Para recalcular o custo dos últimos dois meses podemos marcar na tabela de saldo que o custo médio está calculado até 2 meses atrás.

 UPDATE tt_sal
    SET cal_cm = add_day(Trunc(Agora()),-60),
        atu_cm = 'F'
  WHERE codmul = 0
    AND cal_cm >= add_day(Trunc(Agora()),-60)

Nos clientes, o JOB_CALCULACUSTOMEDIOFILIAL está agendado para rodar todas as noites. Ele fará o recalculo para nós.

Mas se quisermos o resultado na hora, podemos chamar a função CalculaCustoMedioFilial para cada filial.

 DECLARE
 vCODFIL TD_FIL.CODFIL%TYPE;
 cTemp VARCHAR(20);
 CURSOR Filiais IS
 SELECT vCODFIL
  FROM TD_FIL;
 BEGIN
  OPEN Filiais;
  LOOP
    FETCH Filiais INTO vCODFIL;
    EXIT WHEN Filiais%NOTFOUND;
    cTemp:=CalculaCustoMedioFilial(vCODFIL);
  END LOOP;        
  CLOSE Filiais;
 END;
 /



Referenciado por: Produtos |