Mudanças entre as edições de "Custo Médio"
(→Representação física no banco) |
|||
Linha 74: | Linha 74: | ||
== Representação física no banco == | == Representação física no banco == | ||
− | |||
− | + | '''TT_ICO''' | |
− | + | {| class="wikitable sortable" | |
− | ORD_CM | + | |- |
+ | ! Coluna !! Tipo e Precisão !! Descrição | ||
+ | |- | ||
+ | | ORD_CM || NUMBER(10) || Ordem para Cálculo<br/>(Somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem) | ||
+ | |- | ||
+ | | QTD_CM || NUMBER(12,4) || Quantidade movimentada utilizada no cálculo<br/>(Equivalente a QTDMOV) | ||
+ | |- | ||
+ | | 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 antes da compra | ||
+ | |- | ||
+ | | TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto antes da compra | ||
+ | |- | ||
+ | | TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto antes da compra | ||
+ | |} | ||
− | TT_IVE | + | '''TT_IVE''' |
+ | {| class="wikitable sortable" | ||
+ | |- | ||
+ | ! Coluna !! Tipo e Precisão !! Descrição | ||
+ | |- | ||
+ | | ORD_CM || NUMBER(10) || Ordem para Cálculo | ||
+ | |- | ||
+ | | QTD_CM || NUMBER(12,4) || Quantidade movimentada utilizada no cálculo<br/>(Equivalente a QTDMOV) | ||
+ | |- | ||
+ | | SAL_CM || NUMBER(16,4) || Quantidade em estoque do produto antes da venda | ||
+ | |- | ||
+ | | TOT_CM || NUMBER(16,4) || Valor total de custo médio do produto antes da venda | ||
+ | |- | ||
+ | | TOTCMG || NUMBER(16,4) || Valor total de custo gerencial do produto antes da venda | ||
+ | |} | ||
− | + | '''TR_MOV''' | |
− | + | {| class="wikitable sortable" | |
− | + | |- | |
+ | ! 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 | ||
+ | |} | ||
− | + | :''Obs.: Não é guardado o custo médio unitário, mas para obtê-lo basta dividir o valor pela quantidade'' | |
− | + | '''TT_SAL''' | |
− | VLR_CM | + | {| class="wikitable sortable" |
− | + | |- | |
+ | ! Coluna !! Tipo e Precisão !! Descrição | ||
+ | |- | ||
+ | | CAL_CM || DATE || Até quando custo médio está calculado. 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. | ||
+ | |- | ||
+ | | ATU_CM || VARCHAR(1) || "T" ou "F". Indica se existe ou não necessidade do cálculo | ||
+ | |- | ||
+ | | 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 | ||
+ | |} | ||
− | + | :''Obs.: 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.'' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | '' | + | |
− | 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 == |
Edição das 19h09min de 19 de agosto de 2014
Índice
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
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo (Somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem) |
QTD_CM | NUMBER(12,4) | Quantidade movimentada utilizada no cálculo (Equivalente a QTDMOV) |
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 antes da compra |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto antes da compra |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto antes da compra |
TT_IVE
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo |
QTD_CM | NUMBER(12,4) | Quantidade movimentada utilizada no cálculo (Equivalente a QTDMOV) |
SAL_CM | NUMBER(16,4) | Quantidade em estoque do produto antes da venda |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto antes da venda |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto antes da venda |
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 |
- Obs.: 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. 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. |
ATU_CM | VARCHAR(1) | "T" ou "F". Indica se existe ou não necessidade do cálculo |
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 |
- Obs.: 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(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; /