Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde,
Pessoal, estou precisando de uma ajuda em um fluxo de caixa onde os saldos são compostos pelo Saldo Anterior + Entradas - Saídas = Saldo Final, porém se eu filtrar uma determinada data o saldo anterior busca sempre o saldo que fixei no script e não busca o saldo anterior a data que filtrei. Existe uma forma de deixar acumulado esse valor para que o saldo anterior não busque o valor original dele lá do script?
LOAD * INLINE [
BCC_CODIGO, SALDO_INICIAL
11, 1620,00
];
Segue abaixo script.
LOAD * INLINE [
BCC_CODIGO, SALDO_INICIAL
11, 1620,00
];
//--- Bancos Movimentos ---//
// ---- PEDIDO DE VENDA ---- //
LOAD *,
YEAR(BCI_DATA) AS ANO,
MONTH(BCI_DATA) AS MES,
DAY(BCI_DATA) AS DIA,
DATE(BCI_DATA) AS DATA,
WEEK(BCI_DATA) AS SEMANA,
WEEKDAY(BCI_DATA) AS DIA_SEMANA;
SQL SELECT
BCI_CON_CODIGO AS BCC_CODIGO,
BCI_COMPLEMENTO,
BCI_VALOR,
BCI_REGISTRO,
BCI_DC,
// ENTRADA
CASE
WHEN BCI_DC = '1'
THEN (BCI_VALOR)
ELSE
0
END
AS VALOR_ENTRADA,
// SAIDA
CASE
WHEN BCI_DC = '-1'
THEN (BCI_VALOR)
ELSE
0
END
AS VALOR_SAIDA,
BCI_DATA
FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';
//--- Bancos / Contas ---//
SQL SELECT
BCC_NUMERO,
BCC_CODIGO
FROM BANCOS_CONTAS;
LOAD * INLINE [
BCC_CODIGO,BCC_NUMERO,Nome_Conta
11,11000,Banco Brasil 11000-0
];
André,
teste se estas expressões te atendem:
//SD. INICIAL
If(BCC_CODIGO <> Above(BCC_CODIGO),
SALDO_INICIAL + If(DATA = Min({1}TOTAL <BCC_CODIGO> DATA), 0, Sum({$<DATA={"<$(=Max(DATA))"}>}TOTAL <BCC_CODIGO> VALOR_ENTRADA - VALOR_SAIDA)),
Rangesum(Above([SD. INICIAL]), Above(Sum(VALOR_ENTRADA - VALOR_SAIDA)))
)
//SALDO DIA
Sum(VALOR_ENTRADA - VALOR_SAIDA) + [SD. INICIAL]
Abs,
Felipe
Olá André, tudo bem?
Você precisa fazer a "ligação" entre essas informações.
Observe que no seu script você tem apenas o saldo, você precisa dizer quando foi esse saldo, logo, ao escolher a data aparecerá o valor correspondente.
Abraço.
Oi Aderlan, td ótimo e vc?
Certo, realmente não fiz a ligação entre a data e saldo inicial LOAD * INLINE, porém se Eu definir a data desse saldo inicial a expressão que tenho como SD. INICIAL não funciona.
If(IsNull(Above(Sum(VALOR_ENTRADA - VALOR_SAIDA))),
SALDO_INICIAL,
Above([SALDO DIA]))
Anexo postei o .qvw se puder me dar uma nova dica lhe agradeço muito.
Um abraço
André Tonini
André,
teste se estas expressões te atendem:
//SD. INICIAL
If(BCC_CODIGO <> Above(BCC_CODIGO),
SALDO_INICIAL + If(DATA = Min({1}TOTAL <BCC_CODIGO> DATA), 0, Sum({$<DATA={"<$(=Max(DATA))"}>}TOTAL <BCC_CODIGO> VALOR_ENTRADA - VALOR_SAIDA)),
Rangesum(Above([SD. INICIAL]), Above(Sum(VALOR_ENTRADA - VALOR_SAIDA)))
)
//SALDO DIA
Sum(VALOR_ENTRADA - VALOR_SAIDA) + [SD. INICIAL]
Abs,
Felipe
Olá André,
Talvez a dica do Felipe funcione, mas na minha opinião, você precisa acertar o modelo antes de tentar qualquer expressão.
No arquivo que você anexou, a ligação está sendo feita somente pelo codigo, você precisa "dizer" em que dia aquele saldo inicial, então, ao escolher o dia diferente daquele o valor na coluna "saldo inicial" será diferente, talvez zero.
Então, a partir dai, entra os cálculos, seja no script (recomendado) ou no objeto.
Exemplo:
LOAD CO,
DA,
(NumSum(SI, peek('SI'))+EN)-SA as SI,
EN,
SA;
LOAD * INLINE [
CO,DA,SI,EN,SA
11,1/6/14,1600,0,0
11,2/6/14,,10,0
11,3/6/14,,0,20];
CO | DA | SI | EN | SA |
---|---|---|---|---|
11 | 1/6/14 | 1600 | 0 | 0 |
11 | 2/6/14 | 1610 | 10 | 0 |
11 | 3/6/14 | 1590 | 0 | 20 |
Abraço.
Bom dia Aderlan, td bem?
Acabei precisando deixar de lado esse assunto do Extrato, por alguns dias, mas agora essa semana pretendo solucionar.
Realmente estou "apanhando" para conseguir filtrar determinada data em que apresente o saldo inicial (que é o saldo final do último dia) + entrada - saída = saldo final do dia.
Acredito que seja a forma como estou tratando a minha expressão o problema.
1) No mês de fevereiro defini um saldo inicial correspondente ao dia desse saldo.
2) Agora se eu tentar utilizar o calendário acima, para saber o saldo do dia 25/02/2014 por exemplo ele aparece como saldo inicial zero.
3) Se eu tentar filtrar o mês de março/2014 no calendário acima não está buscando o saldo final como saldo, para 03/2014.
Caso possa me ajudar desde já agradeço, pois com certeza é alguma falha que estou cometendo e não sei atualmente como resolver!
Anexo segue .qvw caso seja útil.
Abraço,
André Tonini
Fala André, tudo bem, graças a Deus.
Então, o teu modelo de dados está com problema, tem muita chave sintética, isso pode lhe atrapalhar, convém eliminar essas chaves em primeiro lugar, isso resultará em uma tabela onde você poderá trabalhar os dados com o comando resident, com o exemplo que passei a cima.
Observe que quando usa os comandos no objeto, faz com que os cálculos fique responsivo aos filtros, nesse caso, é interessante que os cálculos sejam feitos no script, para quando usar os filtros, o resultado seja o mesmo.
Abraço.
Olá André,
Sua demanda é o caso clássico em que se calcula o saldo inicial no script e não no layout. Sugiro você dar uma olhada neste outro post Razão Contábil que vai te dar uma idéia de como calcular o saldo em script.
Abraço,
Olá Pablo, tudo bem?
Segui sua orientação, porém não sei se entendi - como segue abaixo o script, mas ao carregar ocorre um erro de que coloca que existe nome de campos iguais, mas não identifiquei no LOAD * INLINE campos com mesma descrição!
SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';
SET DayNames='seg;ter;qua;qui;sex;sáb;dom';
ODBC CONNECT TO Microsys;
//--- Bancos Movimentos ---//
LOAD *,
YEAR(BCI_DATA) AS ANO,
MONTH(BCI_DATA) AS MES,
DAY(BCI_DATA) AS DIA,
DATE(BCI_DATA) AS DATA,
WEEK(BCI_DATA) AS SEMANA,
WEEKDAY(BCI_DATA) AS DIA_SEMANA;
SQL SELECT
BCI_CON_CODIGO AS BCC_CODIGO,
BCI_COMPLEMENTO,
BCI_VALOR,
BCI_REGISTRO,
BCI_DC,
// ENTRADA
CASE
WHEN BCI_DC = '1'
THEN (BCI_VALOR)
ELSE
0
END
AS VALOR_ENTRADA,
// SAIDA
CASE
WHEN BCI_DC = '-1'
THEN (BCI_VALOR)
ELSE
0
END
AS VALOR_SAIDA,
BCI_DATA
FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';
//--- Bancos / Contas ---//
SQL SELECT
BCC_NUMERO,
BCC_CODIGO
FROM BANCOS_CONTAS;
// ---- Saldo Inicial ---- //
LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';
LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];
LOAD * INLINE [
BCC_CODIGO,BCC_NUMERO,Nome_Conta ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA
11 ,11000 ,Banco Brasil 11000-0,'1.620,53' , '0,00' , '0,02' , '0,01' ,'04/02/2014 00:00:00'
];
André,
O problema está aqui
// ---- Saldo Inicial ---- //
3º LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';
2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];
1º LOAD * INLINE [
BCC_CODIGO,BCC_NUMERO,Nome_Conta ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA
11 ,11000 ,Banco Brasil 11000-0,'1.620,53' , '0,00' , '0,02' , '0,01' ,'04/02/2014 00:00:00'
];
No 2º load você criou um novo campo e está usando o * trazendo todos os campos do load anterior inclusive o campo original que tem o mesmo nome.
Sugiro fazer o seguinte ajuste para resolver o problema de execução do script:
3º LOAD *, [SALDO_INICIAL_AJUSTADO]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';
2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL_AJUSTADO];
1º LOAD * INLINE [
BCC_CODIGO,BCC_NUMERO,Nome_Conta ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA
11 ,11000 ,Banco Brasil 11000-0,'1.620,53' , '0,00' , '0,02' , '0,01' ,'04/02/2014 00:00:00'
];
Abraço,