Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia.
Eu de novo....
Preciso saber quanto de saldo tenho, no final de uma determinada data....
O que eu faço?
Exemplo:
Tenho milhares de produtos....
Centenas de Grupos de Produto...
Dezenas de almoxarifados...
Preciso em uma determinada data, por exemplo no dia 30/09/2014, informar QUANTO foi o valor que ficou em meu saldo...
Quer seria quantidade de saldo multiplicado pelo valor unitário de cada item em estoque, meu problema é saber como mostrar saldo do final do dia.... Não sei como fazer...
Somados estes saldos, terei valor do produto, do grupo, do almoxarifado, da garagem (empresa de ônibus), etc....
Meus campos são:
LOAD
DATA AS DT_HIST_SALDO,
MonthStart(DATA) AS dt_inicio_mes,
MonthEnd(DATA) AS DT_fim_mes,
MonthEnd(AddMonths(DATA, -1)) AS DT_ULTIMO_DIA_MES_ANTERIOR,
CD_ALMOXARIFADO,
CD_EMPRESA,
QT_HISTORICO_SALDO,
VL_MEDIO AS VL_ITEM_SALDO,
(QT_HISTORICO_SALDO * VL_MEDIO) AS VL_TOTAL_SALDO,
DT_ULT_MOVIMENTACAO AS DT_ULT_MOV_SALDO
FROM
Fonte\Suprimentos\historico_saldo.qvd
(qvd)
Se puderem dar mais esta força....
Obrigado.
Marcos.
Em um dos painéis que temos, para achar este saldo em R$, este código foi feito (que nem seu se funciona), ainda não testei, mas a dúvida é, precisa realmente desse monte de código para mostrar isso?
// SALDOS
HIST_SALDO:
LOAD DISTINCT ID_PRODUTO RESIDENT PRODUTO;
LEFT JOIN
LOAD (ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO & '|' & DT_HISTORICO_SALDO) AS SK_HIST_SALDO,
ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(QT_HISTORICO_SALDO*VL_MEDIO) AS SALDO_ESTOQUE,
DT_HISTORICO_SALDO,
MonthName(DT_HISTORICO_SALDO) AS [Mês do Saldo],
Year(DT_HISTORICO_SALDO) as [Ano do Saldo]
FROM [Fonte\Suprimentos\historico_saldo.qvd] (qvd)
WHERE DT_HISTORICO_SALDO >=date#('01/01/2009')
and DT_HISTORICO_SALDO <= DT_ULT_MOVIMENTACAO;
// Recupera a menor e maior data
TMP_MaxMinData:
LOAD
Max(DT_HISTORICO_SALDO) AS Max,
Min(DT_HISTORICO_SALDO) AS Min
Resident HIST_SALDO;
LET vMaxOrderDate = Peek('Max');
LET vMinOrderDate = Peek('Min');
DROP Table TMP_MaxMinData;
// Gera tabela com as datas entre menor e maior data
CALENDARIO_TEMP1:
NoConcatenate
Load
date(DT_HISTORICO_SALDO, 'DD/MM/YYYY') AS DT_HISTORICO_SALDO;
Load
date('$(vMinOrderDate)' + Recno() - 1) as DT_HISTORICO_SALDO
AutoGenerate (YearEnd(vMaxOrderDate) - vMinOrderDate + 1);
// só recupera o dia primeiro de cada mês
HIST_SALDO_TEMP:
NoConcatenate
Load
date(DT_HISTORICO_SALDO, 'DD/MM/YYYY') AS DT_HISTORICO
Resident CALENDARIO_TEMP1
where day(DT_HISTORICO_SALDO) = day(MonthEnd(DT_HISTORICO_SALDO));
DROP Table CALENDARIO_TEMP1 ;
JOIN (HIST_SALDO_TEMP)
LOAD distinct ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA
Resident HIST_SALDO;
LEFT JOIN (HIST_SALDO_TEMP)
LOAD ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO ) AS AGRUPADOR,
SALDO_ESTOQUE,
DT_HISTORICO_SALDO as DT_HISTORICO
Resident HIST_SALDO;
DROP TABLE HIST_SALDO;
HIST_SALDO:
NoConcatenate
LOAD
DT_HISTORICO as DT_HISTORICO_SALDO,
ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO & '|' & DT_HISTORICO) AS SK_HIST_SALDO,
MonthName(DT_HISTORICO) AS [Mês do Saldo],
Year(DT_HISTORICO) as [Ano do Saldo],
if(AGRUPADOR <> Previous(AGRUPADOR),
if(isnull(SALDO_ESTOQUE),0,SALDO_ESTOQUE),
if (isnull(SALDO_ESTOQUE),if(isnull(Previous(SALDO_ESTOQUE)),0,Peek('SALDO_ESTOQUE')),SALDO_ESTOQUE)) AS SALDO_ESTOQUE
Resident HIST_SALDO_TEMP
order by DT_HISTORICO, ID_ALMOXARIFADO, ID_PRODUTO, ID_EMPRESA;
DROP TABLE HIST_SALDO_TEMP;
Boa tarde Marco. Antes de avaliar sua pergunta, me chamou atenção você citar que trabalha com Empresa de Ônibus, sendo que também atuo exclusivamente nesta área a 15 anos.
Quanto ao saldo você já tentou:
Sum( If(Data <= MonthEnd(DATA), (QT_HISTORICO_SALDO * VL_MEDIO) ) as SaldoNoFinalDoMes
Opa.... Trabalho na Rio Ita, somos um grupo de empresas com cerca de 1600 ônibus, aqui no Rio.....
Vou testar e te falo, obrigado pela ajuda....
Marcos.
Em um dos painéis que temos, para achar este saldo em R$, este código foi feito (que nem seu se funciona), ainda não testei, mas a dúvida é, precisa realmente desse monte de código para mostrar isso?
// SALDOS
HIST_SALDO:
LOAD DISTINCT ID_PRODUTO RESIDENT PRODUTO;
LEFT JOIN
LOAD (ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO & '|' & DT_HISTORICO_SALDO) AS SK_HIST_SALDO,
ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(QT_HISTORICO_SALDO*VL_MEDIO) AS SALDO_ESTOQUE,
DT_HISTORICO_SALDO,
MonthName(DT_HISTORICO_SALDO) AS [Mês do Saldo],
Year(DT_HISTORICO_SALDO) as [Ano do Saldo]
FROM [Fonte\Suprimentos\historico_saldo.qvd] (qvd)
WHERE DT_HISTORICO_SALDO >=date#('01/01/2009')
and DT_HISTORICO_SALDO <= DT_ULT_MOVIMENTACAO;
// Recupera a menor e maior data
TMP_MaxMinData:
LOAD
Max(DT_HISTORICO_SALDO) AS Max,
Min(DT_HISTORICO_SALDO) AS Min
Resident HIST_SALDO;
LET vMaxOrderDate = Peek('Max');
LET vMinOrderDate = Peek('Min');
DROP Table TMP_MaxMinData;
// Gera tabela com as datas entre menor e maior data
CALENDARIO_TEMP1:
NoConcatenate
Load
date(DT_HISTORICO_SALDO, 'DD/MM/YYYY') AS DT_HISTORICO_SALDO;
Load
date('$(vMinOrderDate)' + Recno() - 1) as DT_HISTORICO_SALDO
AutoGenerate (YearEnd(vMaxOrderDate) - vMinOrderDate + 1);
// só recupera o dia primeiro de cada mês
HIST_SALDO_TEMP:
NoConcatenate
Load
date(DT_HISTORICO_SALDO, 'DD/MM/YYYY') AS DT_HISTORICO
Resident CALENDARIO_TEMP1
where day(DT_HISTORICO_SALDO) = day(MonthEnd(DT_HISTORICO_SALDO));
DROP Table CALENDARIO_TEMP1 ;
JOIN (HIST_SALDO_TEMP)
LOAD distinct ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA
Resident HIST_SALDO;
LEFT JOIN (HIST_SALDO_TEMP)
LOAD ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO ) AS AGRUPADOR,
SALDO_ESTOQUE,
DT_HISTORICO_SALDO as DT_HISTORICO
Resident HIST_SALDO;
DROP TABLE HIST_SALDO;
HIST_SALDO:
NoConcatenate
LOAD
DT_HISTORICO as DT_HISTORICO_SALDO,
ID_ALMOXARIFADO,
ID_PRODUTO,
ID_EMPRESA,
(ID_EMPRESA & '|' & ID_ALMOXARIFADO & '|' & ID_PRODUTO & '|' & DT_HISTORICO) AS SK_HIST_SALDO,
MonthName(DT_HISTORICO) AS [Mês do Saldo],
Year(DT_HISTORICO) as [Ano do Saldo],
if(AGRUPADOR <> Previous(AGRUPADOR),
if(isnull(SALDO_ESTOQUE),0,SALDO_ESTOQUE),
if (isnull(SALDO_ESTOQUE),if(isnull(Previous(SALDO_ESTOQUE)),0,Peek('SALDO_ESTOQUE')),SALDO_ESTOQUE)) AS SALDO_ESTOQUE
Resident HIST_SALDO_TEMP
order by DT_HISTORICO, ID_ALMOXARIFADO, ID_PRODUTO, ID_EMPRESA;
DROP TABLE HIST_SALDO_TEMP;
Olha o mundo é mesmo muito pequeno. Ano passado no congresso da ANTP aí no Rio de Janeiro mencionei o QlikView em uma palestra que apresentei, e em seguida o pessoa do seu grupo de empresas veio falar comigo sobre o QlikView. hehe.
Abraço!
Marcos
É difícil validar um código grande assim (principalmente verificar se existe uma forma mais simples) sem dados para testar. Você consegue gerar e postar aqui um exemplo .QVW ?
Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada
Have fun, be Qlik