Modificado pela última vez em 31 de dezembro de 2018 às 09h09min

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

(Cálculo do Custo Médio)
 
(7 revisões intermediárias por um outro usuário não estão sendo mostradas)
Linha 1: Linha 1:
{{Tags|Totall Backoffice|Funcionalidades}}
+
{{Tags|Totall Backoffice}}
{{Referencias}}
+
{{MenuLateral|[[Totall Commerce]]|[[Totall Backoffice]]|[[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.
== 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.
 
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.
 
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.
Linha 50: Linha 47:
 
       - valor_cofins
 
       - valor_cofins
 
* Importação
 
* Importação
   cm_uni_calculado = base_II -- Base II
+
   cm_uni_calculado = valor_item -- Valor Total NF
      + valor_II -- Valor II  
+
                    + valor_ipi + Valor IPI
      + valor_pis -- Valor PIS
+
                    + valor_seguro -- Valor do Seguro
      + valor_cofins -- Valor COFINS  
+
                    + valor_frete -- Valor do Frete
      + valor_ant -- Anti Dumping
+
                    + valor_II -- Valor II  
      + valor_adu -- Despesas Aduaneiras
+
                    + valor_pis -- Valor PIS
      - valor_pis_cre -- Valor PIS Creditável  
+
                    + valor_cofins -- Valor COFINS  
      - valor_cof_cre -- Valor COFINS Creditável
+
                    + 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 ==
 
== Fórmula do Custo Médio Gerencial ==
Linha 67: Linha 68:
 
     + Valor_retencao
 
     + Valor_retencao
 
* Importação
 
* Importação
     cmg_uni_calculado =     base_II -- Base II
+
     cmg_uni_calculado = valor_item -- Valor Total NF
    + valor_II -- Valor II  
+
                      + valor_ipi + Valor IPI
    + valor_ant -- Anti Dumping
+
                      + valor_seguro -- Valor do Seguro
    + valor_adu -- Despesas Aduaneiras
+
                      + 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 ==
 
== Sub Formulas utilizadas ==
Linha 327: Linha 332:
 
  /
 
  /
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
<br/>
 +
<br/>
 +
<small>{{Referencias}}</small>

Edição atual tal como às 09h09min 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 |