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

De TotaliWiki
Ir para: navegação, pesquisa
Linha 33: Linha 33:
 
Ver planilha Custo Médio.xls
 
Ver planilha Custo Médio.xls
  
 +
== Select para validar Custo Médio ==
 +
 +
 
== Fórmula do Custo Médio Fiscal ==
 
== Fórmula do Custo Médio Fiscal ==
  Custo Médio Fiscal = "Valor do Item" + "Valor Frete" +
+
  cm_uni_calculado =  
                      "Valor IPI" - "Valor ICMS"
+
                    Valor_item -- Valor do Item
 +
  + custo_frete -- Valor Frete
 +
  + valor_ipi + --Valor IPI
 +
  + Valor_ICMS_calculado
 +
  - valor_pis
 +
  - valor_cofins
  
Se a origem for tributada e destino for substituído então:
+
== Fórmula do Custo Médio Gerencial ==
  Custo Médio Fiscal = Custo Médio Fiscal +
+
                      "Valor Retido de ST"
+
Senão
+
  Custo Médio Fiscal = Custo Médio Fiscal + "Valor de ST" +
+
                      "Valor Retido de ST" - "Crédito de ICMS (se houver)"
+
  
Se configurado para retirar PIS e COFINS (TD_FIL.TCMIPI) então:
+
    cmg_uni_calculado =     Valor_item  -- Valor do Item
  Custo Médio Fiscal = Custo Médio Fiscal - "Valor PIS" - "Valor Cofins"
+
    + custo_frete  -- Valor Frete
 +
    + valor_ipi -- Valor IPI
 +
    + substituicao_item
 +
    + Valor_retencao
  
== Fórmula do Custo Médio Gerencial ==
+
== Sub Formulas utilizadas ==
 +
  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
  
  Custo Médio Gerencial = "Valor do Item" + "Valor Frete" + "Valor IPI" + "Valor de ST" + "Valor Retido de ST"
+
== Select verificar valores de custo médio detalhados ==
 +
  \\ttadm\Docs\publico\Base de Conhecimento\backoffice\produtos\custo médio\Detalhamento_Custo_Medio.sql
  
 
== Representação física no banco ==
 
== Representação física no banco ==

Edição das 15h09min de 2 de dezembro de 2010

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, 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 (TT_COM) de um determinado produto.

Não leva em conta lançamentos avulsos do produto(TT_LAN). 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 ~> Se for uma compra

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 calculo das linhas subseqüente 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

Select para validar Custo Médio

Fórmula do Custo Médio Fiscal

  cm_uni_calculado = 
                   Valor_item -- Valor do Item
 		+ custo_frete -- Valor Frete
 		+ valor_ipi + --Valor IPI
 		+ Valor_ICMS_calculado
 		- valor_pis
 		- valor_cofins

Fórmula do Custo Médio Gerencial

   cmg_uni_calculado =     Valor_item  -- Valor do Item
 			  + custo_frete  -- Valor Frete
 			  + valor_ipi -- Valor IPI
 			  + substituicao_item
 			  + Valor_retencao

Sub Formulas utilizadas

 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

Representação física no banco

TT_ICO

QTD_CM - Guarda a quantidade movimentada a ser utilizada no cálculo VLR_CM - Guarda o valor movimentado a ser utilizada no cálculo 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)

TT_IVE

QTD_CM - Idem ao TT_ICO VLR_CM - Idem ao TT_ICO ORD_CM - Idem ao TT_ICO

TR_MOV

SAL_CM ? Guarda o saldo (Qtd) de estoque após a última movimentação do dia VLR_CM ? Guarda o valor de estoque após a última movimentação do dia Obs.: Não é guardado o custo médio, mas para obtê-lo basta dividir o valor pela quantidade

TT_SAL

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) INI_CM ? Data inicial para se calcular o custo médio VLR_CM ? Valor em estoque na data de início do custo médio QTD_CM ? Quantidade em estoque na data de início do custo médio

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. 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(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(pCODFIL): Calcula o custo médio de toda uma filial. Utiliza os mesmos processos da CalculaCustoMedio

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;
/


Recalcula_Custo_Medio

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;
/