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

De TotaliWiki
Ir para: navegação, pesquisa
Linha 76: Linha 76:
 
Se Tipo=3 -> Custo Médio do Produto
 
Se Tipo=3 -> Custo Médio do Produto
 
Se não for passada uma data calcula até a data atual.
 
Se não for passada uma data calcula até a data atual.
 +
 +
----------------------------------------------------------------------
 +
 +
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.
 +
 +
1. 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
 +
 +
2. 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
 +
Obs.:  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;
 +
/
  
  
 
[[Categoria: Totall Backoffice]]
 
[[Categoria: Totall Backoffice]]
 
[[Categoria: Funcionalidades]]
 
[[Categoria: Funcionalidades]]

Edição das 14h50min de 3 de abril de 2009

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.

1. 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


2. 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

Obs.: 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.


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.

1. 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

2. 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 Obs.: 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; /