Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal!
Estou precisando identificar quantos dias o meu produto não tinha em estoque(estoque zero), com base no estoque de hoje desse mesmo produto e a movimentação de entradas e saidas nos últimos 90 dias.
Ex.:Produto A > Data = 01-08-19 > Estoque = 10
Data: 31-07-19 > Estoque Inicial = 12 > Vendas = 2 > Estoque Final = 10
Data: 30-07-19 > Estoque Inicial= 15 > Vendeu = 3 > Estoque Final = 12
Data: 27-07-19 > Estoque Inicial = 0 > Comprou = 15 > Estoque Final = 15
Data 20-07-19 > Estoque Inicial = 2 > Vendeu = 2 > Estoque Final = 0
Assim por diante, durante 90 dias.
O que eu preciso identificar é que no dia 20-07 o estoque do produto ficou = 0 e só foi comprado no dia 27, ou seja 7 dias com estoque '0' , isso durante os 90 dias, em quantos dias esse produto era igual a '0'.
Não estou conseguindo trazer essa informação.
A segunda parte os calculos.
Primeiro junto as tabelas e depois ORDENO por Produto,Data. Assim podemos controlar para calcular os dias sem estoque
//===================================================
// Junta as tabelas
CalculoEstoque_Tmp:
NoConcatenate
Load
date(MakeDate(2000,1,1)) as Data,
Produto,
Qtde
Resident EstoqueInicial;
Concatenate (CalculoEstoque_Tmp)
Load
Data,
Produto,
// Coloco o - para diminuir as vendas
Qtde
Resident Vendas;
Concatenate (CalculoEstoque_Tmp)
Load
Data,
Produto,
Qtde
Resident Compras;
//
Drop Tables Vendas,Compras,EstoqueInicial;
//
// Coloca em ordem para poder calcular o estoque
TabelaFinal:
NoConcatenate
Load
Produto,
Data,
Qtde,
if(Produto = Previous(Produto),rangesum(peek(Saldo),Qtde),Qtde) as Saldo,
if(Produto = Previous(Produto),
// Se saldo anterior é Zero e tem Qtde positiva (Compra)
if(peek(Saldo)=0 and Qtde > 0,Data - peek(Data)) ) as Dias_Sem_Saldo
Resident CalculoEstoque_Tmp order by Produto,Data ;
//
drop Table CalculoEstoque_Tmp;
Segue
Segue o script
Fiz em duas partes.
A primeira são as "tabelas origens"
//===================================================
//
Vendas:
LOAD * Inline [
Data , Produto , Qtde
31/07/2019 , A , -2
30/07/2019 , A , -3
20/07/2019 , A , -2
];
Compras:
NoConcatenate
LOAD * Inline [
Data , Produto , Qtde
27/07/2019 , A , 2
];
EstoqueInicial:
LOAD * Inline [
Produto , Qtde
A , 2
];
//===================================================
A segunda parte os calculos.
Primeiro junto as tabelas e depois ORDENO por Produto,Data. Assim podemos controlar para calcular os dias sem estoque
//===================================================
// Junta as tabelas
CalculoEstoque_Tmp:
NoConcatenate
Load
date(MakeDate(2000,1,1)) as Data,
Produto,
Qtde
Resident EstoqueInicial;
Concatenate (CalculoEstoque_Tmp)
Load
Data,
Produto,
// Coloco o - para diminuir as vendas
Qtde
Resident Vendas;
Concatenate (CalculoEstoque_Tmp)
Load
Data,
Produto,
Qtde
Resident Compras;
//
Drop Tables Vendas,Compras,EstoqueInicial;
//
// Coloca em ordem para poder calcular o estoque
TabelaFinal:
NoConcatenate
Load
Produto,
Data,
Qtde,
if(Produto = Previous(Produto),rangesum(peek(Saldo),Qtde),Qtde) as Saldo,
if(Produto = Previous(Produto),
// Se saldo anterior é Zero e tem Qtde positiva (Compra)
if(peek(Saldo)=0 and Qtde > 0,Data - peek(Data)) ) as Dias_Sem_Saldo
Resident CalculoEstoque_Tmp order by Produto,Data ;
//
drop Table CalculoEstoque_Tmp;
A ideia seria o calculo ao contrário, pois eu só tenho o estoque na data de hoje e preciso identificar o estoque das datas anteriores com base nas movimentações de compra e venda.
Mas a logica seria a mesma. Mudaria o Order e colocaria um DESC para ser descendente. Mas o caminho (um deles pelo menos) seria este.
Solução perfeita! ajustando o Order colocando um DESC na Data o resultado era exatamente o que eu estava precisando. Muito obrigado pela ajuda!