Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
danilostochi
Creator II
Creator II

Execução de um script tendo uma lista de materiais

bom dia pessoal,

Possuo um script que gera o saldo diário de um estoque, ele calcula certinho o acumulativo do movimento, o problema é que eu não consigo executá-lo com todos os materiais pois ele acaba acumulando movimento de outros materiais.

Minha ideia seria executar todo o script de forma autônoma por uma lista de materiais instanciados em uma Variável como se fosse um array, alguém teria alguma sugestão ou dica para este caso?

segue script:

 

 

//tentativa de criar array 
//set vMaterial = '51858, 51762';
//for vMat = 51762 to 51858;
set vMat = 51762,51858;
set vMaxMat = $(vMat); //Guarda o ultimo material

material:
LOAD SubField('$(vMat)',',') as material
AutoGenerate(1);

MovimentoSaldoDiario:
LOAD
CD_MATERIAL&' | '&date(MonthStart(DT_MESANO_REFERENCIA) +IterNo() -1)&' | '&CD_ESTABELECIMENTO as JoinMovimento,//ligação que por ventura pode contemplar o local de estoque
date(MonthStart(DT_MESANO_REFERENCIA) +IterNo() -1) as DataPeriodo,
Date(DT_MESANO_REFERENCIA) as DataMesReferencia,
CD_ESTABELECIMENTO as Estabelecimento,
LOCAL_ESTOQUE as LocalEstoque,
CD_MATERIAL as CodigoMaterial,
QT_ESTOQUE as QuantidadeSaldo,
SALDO_MES_ANTERIOR as QuantidadeSaldoAnterior
FROM tb_saldo_estoque.qvd(qvd) While date(MonthStart(DT_MESANO_REFERENCIA) +IterNo() -1) <= MonthEnd(DT_MESANO_REFERENCIA) and CD_MATERIAL = '51858';

Left Join (MovimentoSaldoDiario)

LOAD
CD_MATERIAL&' | '&date#(date(DT_MOVIMENTO_ESTOQUE))&' | '&CD_ESTABELECIMENTO as JoinMovimento,
date#(date(DT_MOVIMENTO_ESTOQUE)) as DataMovimentoEstoque,
Date#(date(DT_MESANO_REFERENCIA)) as DataMesReferencia,
sum(if(IE_ENTRADA_SAIDA = 'S' and CD_ACAO = '1', -QT_MOVIMENTO,
if(IE_ENTRADA_SAIDA = 'S' and CD_ACAO = '2', QT_MOVIMENTO,
if(IE_ENTRADA_SAIDA = 'E' and CD_ACAO = '1', QT_MOVIMENTO,
if(IE_ENTRADA_SAIDA = 'E' and CD_ACAO = '2', -QT_MOVIMENTO,
QT_MOVIMENTO))))) as QuantidadeMovimento
FROM tb_movimento_estoque.qvd(qvd) where CD_MATERIAL = '51858'
Group by
date#(date(DT_MOVIMENTO_ESTOQUE)),
CD_MATERIAL,
CD_ESTABELECIMENTO,
//LOCAL_ESTOQUE,
Date#(date(DT_MESANO_REFERENCIA)) ;
MovimentoSaldoDiario2:
LOAD
DataPeriodo,
CodigoMaterial,
DataMesReferencia,
DataMovimentoEstoque,
Estabelecimento,
LocalEstoque,
if(isNull(QuantidadeMovimento),'0', QuantidadeMovimento) as QuantidadeMovimento,
NumSum(Peek('Acumulado',-1)) + NumSum(if(isNull(QuantidadeMovimento),'0', QuantidadeMovimento)) as Acumulado,
QuantidadeSaldo,
QuantidadeSaldoAnterior,
JoinMovimento
Resident MovimentoSaldoDiario
order by DataPeriodo asc;
DROP Table MovimentoSaldoDiario;


MovimentoSaldoDiario3:
LOAD
*,
QuantidadeSaldoAnterior + Acumulado as SaldoDiario
Resident MovimentoSaldoDiario2;
DROP Table MovimentoSaldoDiario2;

 

 

 

 

 

 

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
1 Solution

Accepted Solutions
danilostochi
Creator II
Creator II
Author

consegui resolver!
utilizando um array como variável consegui executar o conteúdo do script por sequencia.
SET vMaterial= '51762, 51858'; //lista de materiais sera via .txt

ListaMaterial:
LOAD SubField('$(vMaterial)',',') as MaterialLista AutoGenerate(1);//Transforma a linha de materiais em uma lista de materiais

FOR vCont = 0 to NoOfRows('ListaMaterial')
LET vArray = Peek('MaterialLista', $(vCont), 'ListaMaterial');



//no final do script é adicionado
NEXT
EXIT SCRIPT


+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com

View solution in original post

1 Reply
danilostochi
Creator II
Creator II
Author

consegui resolver!
utilizando um array como variável consegui executar o conteúdo do script por sequencia.
SET vMaterial= '51762, 51858'; //lista de materiais sera via .txt

ListaMaterial:
LOAD SubField('$(vMaterial)',',') as MaterialLista AutoGenerate(1);//Transforma a linha de materiais em uma lista de materiais

FOR vCont = 0 to NoOfRows('ListaMaterial')
LET vArray = Peek('MaterialLista', $(vCont), 'ListaMaterial');



//no final do script é adicionado
NEXT
EXIT SCRIPT


+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com