Como obter saldo anterior

Delphi

26/08/2014

Olá pessoal, mais uma vez recorro a vcs numa rotina sql que já me bateu muito.... kkkk

É o seguinte tenho uma tabela chamada lançamentos e estou querendo obter a apresentação de: Data de Lançamento, Conta, Saldo Anterior, Valor Entrada, Valor Saída, Saldo Atual, Histórico....

Já tenho a seguinte sql que está funcionando perfeitamente:

criterio:='select '+
'l.dt_lanca as Data, '+
'l.autor as Descricao, '+
'sum(l.vl_entra) as Entrada, '+
'sum(l.vl_sai) as Saida, '+
'(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, '+
'c.conta as conta '+
'from '+
'lancamentos l, contas c '+
'where '+
'l.cod_conta = c.cod_conta '+
'and '+
'l.cod_recurso = '+EdtCod_recurso.Text +
' and '+
'l.dt_lanca between "'+FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "'+FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" '+
'group by '+
'l.dt_lanca,l.autor, c.conta '+
'order by '+
'l.dt_lanca';

Com tudo preciso exibir o saldo anterior, o que confeço não estou conseguindo.... alguém ai pode ajudar????

Desde já agradeço!!!!
Hardsoft Informática

Hardsoft Informática

Curtidas 0

Melhor post

Renato Rubinho

Renato Rubinho

18/11/2015

Buenos,

Sinceramente nem lembro dos detalhes deste post... rsrs
Revisei a query e acredito que ainda tinha uma falha, com relação ao join do saldo anterior. Como estava como inner, caso não houvesse saldo anterior, não traria registros.

Criei as tabelas para o teste com os scripts que estavam no post.
Criei duas contas e 4 lançamentos para cada.
Seguem os comandos sql para popular as tabelas.

Corrigido o sql alterando para left outer join dos lançamentos anteriores.
Adicionada coluna de SALDO_REAL, pois a coluna SALDO é a somatória dos lançamentos do período, a coluna SALDO_ANT é a somatória dos valores anteriores e a nova coluna traz o saldo real do período pesquisado.

Obs: Não possuo sql server para teste. Meus testes são no Oracle. Confirme se a sintaxe para o filtro de datas está correta ou se precisa alterar o formato no sql server.

-- COMANDOS DE LANCAMENTOS PARA O EXEMPLO 
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (1,TO_DATE('17/11/15','DD/MM/RR'),'0,01','11',15,1,0.01,0,NULL,NULL,NULL,NULL,0,0.01,NULL,NULL,NULL,NULL,'N',NULL);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (2,TO_DATE('17/11/15','DD/MM/RR'),'0,02','11',15,1,0.02,0,NULL,NULL,NULL,NULL,0,0.03,NULL,NULL,NULL,NULL,'N',NULL);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (3,TO_DATE('18/11/15','DD/MM/RR'),'0,03','11',15,1,0.03,0,NULL,NULL,NULL,NULL,0,0.06,NULL,NULL,NULL,NULL,'N',NULL);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (4,TO_DATE('18/11/15','DD/MM/RR'),'-0,04','11',15,1,0,0.04,NULL,NULL,NULL,NULL,0,0.02,NULL,NULL,NULL,NULL,'N',NULL);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (5,TO_DATE('17/11/15','DD/MM/RR'),'0,05','11',15,2,0.05,0,NULL,NULL,NULL,NULL,0,0.05,NULL,NULL,NULL,NULL,'N',NULL);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (6,TO_DATE('17/11/15','DD/MM/RR'),'0,06','11',15,2,0.06,0,NULL,NULL,NULL,NULL,0,0.11,NULL,NULL,NULL,NULL,'N',NULL);
Insert into LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) values (7,to_date('18/11/15','DD/MM/RR'),'-0,07','11',15,2,0,0.07,null,null,null,null,0,0.04,null,null,null,null,'N',null);
INSERT INTO LANCAMENTOS (SEQ_LANCA,DT_LANCA,NR_DOC,MES,ANO,COD_CONTA,VL_ENTRA,VL_SAI,COD_HIST,COMPLEMENTO,COD_SECRET,AUTOR,COD_RECURSO,SALDO,COD_EVENTO,FORMPGTO,SALDO_RECURSO,SEGMENTO,EXPORTADO,DATA_EXPORTADO) VALUES (8,TO_DATE('18/11/15','DD/MM/RR'),'0,08','11',15,2,0.08,0,NULL,NULL,NULL,NULL,0,0.12,NULL,NULL,NULL,NULL,'N',NULL);


-- COMANDOS DE CONTAS PARA O EXEMPLO 
INSERT INTO CONTAS (COD_CONTA,CONTA,CLASSE,TIPO,MOVIMENTO,SALDO,SALDOPER1,SALDOPER2,SALDOPER3,SALDOPER4,SALDOPER5,SEGMENTO,AGREGAR,COD_INTEGRA) VALUES (1,'SALDO ABERTURA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO CONTAS (COD_CONTA,CONTA,CLASSE,TIPO,MOVIMENTO,SALDO,SALDOPER1,SALDOPER2,SALDOPER3,SALDOPER4,SALDOPER5,SEGMENTO,AGREGAR,COD_INTEGRA) VALUES (2,'ALIMENTAÇÃO',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);


-- SQL COM SALDO
SELECT
LCTOS.DATA, 
LCTOS.DESCRICAO, 
LCTOS.ENTRADA, 
LCTOS.SAIDA, 
LCTOS.SALDO, 
LCTOS.CONTA,
LCTOS.COD_CONTA,
(SUM(SALDO_ANT.VL_ENTRA) - SUM(SALDO_ANT.VL_SAI)) AS SALDO_ANT,
((SUM(SALDO_ANT.VL_ENTRA) - SUM(SALDO_ANT.VL_SAI)) + LCTOS.SALDO) AS SALDO_REAL
FROM 
(
SELECT 
L.DT_LANCA AS DATA, 
L.AUTOR AS DESCRICAO, 
SUM(L.VL_ENTRA) AS ENTRADA, 
SUM(L.VL_SAI) AS SAIDA, 
(SUM(L.VL_ENTRA) - SUM(L.VL_SAI)) AS SALDO, 
C.CONTA,
L.COD_CONTA 
FROM 
LANCAMENTOS L, CONTAS C
WHERE 
     L.COD_CONTA = C.COD_CONTA 
AND  L.COD_RECURSO = 0
--FILTRAR AQUI O PERIODO QUE QUER CONSULTAR
AND  L.DT_LANCA BETWEEN '18.11.2015' AND '18.11.2015'
--
GROUP BY 
  L.DT_LANCA,L.AUTOR, C.CONTA, L.COD_CONTA
ORDER BY 
  L.DT_LANCA
) 
LCTOS
LEFT OUTER JOIN LANCAMENTOS SALDO_ANT ON LCTOS.COD_CONTA = SALDO_ANT.COD_CONTA 
--FILTRAR AQUI MENOR QUE O PERIODO QUE QUER CONSULTAR
                                     AND SALDO_ANT.DT_LANCA < '18.11.2015'
--
GROUP BY 
  LCTOS.DATA, 
  LCTOS.DESCRICAO, 
  LCTOS.ENTRADA, 
  LCTOS.SAIDA, 
  LCTOS.SALDO, 
  LCTOS.CONTA,
  LCTOS.COD_CONTA
ORDER BY 
  LCTOS.DATA


Abraççç
GOSTEI 1

Mais Respostas

Joel Rodrigues

Joel Rodrigues

26/08/2014

Na sua estrutura de tabelas, existem campos que lhe permitam obter este dado?
O que você considera saldo anterior? Seria o saldo antes do último lançamento?
Por exemplo:
1) Entrada: 10 | Saída: 0 | Saldo: 10
2) Entrada: 10 | Saída: 0 | Saldo: 20
3) Entrada: 0 | Saída: 5 | Saldo: 15

Saldo atual: 15
Saldo anterior: 20?
GOSTEI 0
Renato Rubinho

Renato Rubinho

26/08/2014

Buenos,

Do resultado do seu select faça um novo join com a tabela de lançamentos calculando o saldo do período anterior.

select 
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo.vl_entra) - sum(saldo.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta as conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = EdtCod_recurso.Text +
and  l.dt_lanca between "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" 
group by 
  l.dt_lanca,l.autor, c.conta 
order by 
  l.dt_lanca
) 
lctos, 
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" 
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,
order by 
  lctos.Data


Abraççç,
Renato
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Na sua estrutura de tabelas, existem campos que lhe permitam obter este dado?
O que você considera saldo anterior? Seria o saldo antes do último lançamento?
Por exemplo:
1) Entrada: 10 | Saída: 0 | Saldo: 10
2) Entrada: 10 | Saída: 0 | Saldo: 20
3) Entrada: 0 | Saída: 5 | Saldo: 15

Saldo atual: 15
Saldo anterior: 20?


Isso mesmo joel, é para exibir o último saldo antes do lançamento. por exemplo tenho lá passagens. quero exibir quanto tava ontem (saldo anterior), para depois exibir Entrada hoje ou Saída e quanto ficou... mas to levando um esquenta no saldo anterior..
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Buenos,

Do resultado do seu select faça um novo join com a tabela de lançamentos calculando o saldo do período anterior.

select 
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo.vl_entra) - sum(saldo.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta as conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = EdtCod_recurso.Text +
and  l.dt_lanca between "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" 
group by 
  l.dt_lanca,l.autor, c.conta 
order by 
  l.dt_lanca
) 
lctos, 
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" 
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,
order by 
  lctos.Data


Abraççç,
Renato


Meu jovem primeiro lhe agradeço a atenção.... bom fiz como vc sugeriu mas ai agora ta dando erro..

Dynamic Sql Error
Sql erro code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Buenos,

Do resultado do seu select faça um novo join com a tabela de lançamentos calculando o saldo do período anterior.

select 
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo.vl_entra) - sum(saldo.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta as conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = EdtCod_recurso.Text +
and  l.dt_lanca between "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" 
group by 
  l.dt_lanca,l.autor, c.conta 
order by 
  l.dt_lanca
) 
lctos, 
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" 
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,
order by 
  lctos.Data


Abraççç,
Renato


Meu jovem primeiro lhe agradeço a atenção.... bom fiz como vc sugeriu mas ai agora ta dando erro..

Dynamic Sql Error
Sql erro code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Buenos,

Do resultado do seu select faça um novo join com a tabela de lançamentos calculando o saldo do período anterior.

select 
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo.vl_entra) - sum(saldo.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta as conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = EdtCod_recurso.Text +
and  l.dt_lanca between "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" 
group by 
  l.dt_lanca,l.autor, c.conta 
order by 
  l.dt_lanca
) 
lctos, 
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" 
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,
order by 
  lctos.Data


Abraççç,
Renato


Meu jovem primeiro lhe agradeço a atenção.... bom fiz como vc sugeriu mas ai agora ta dando erro..

Dynamic Sql Error
Sql erro code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Buenos,

Do resultado do seu select faça um novo join com a tabela de lançamentos calculando o saldo do período anterior.

select 
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo.vl_entra) - sum(saldo.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta as conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = EdtCod_recurso.Text +
and  l.dt_lanca between "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" and "FormatDateTime('mm/dd/yyyy',DtpFinal.Date)+'" 
group by 
  l.dt_lanca,l.autor, c.conta 
order by 
  l.dt_lanca
) 
lctos, 
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < "FormatDateTime('mm/dd/yyyy',DtpInicio.date)+'" 
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,
order by 
  lctos.Data


Abraççç,
Renato


Meu jovem primeiro lhe agradeço a atenção.... bom fiz como vc sugeriu mas ai agora ta dando erro..

Dynamic Sql Error
Sql erro code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Eta le le alguém ai pode me ajudar nesse bendido Saldo_anterior????

Nesse modelo sql que fiz está me retornando de maneira correta as Entradas, as Saídas e o Saldo Atual....

select
l.dt_lanca as Data,
c.conta as Descricao,
sum(l.vl_entra) as Entrada,
sum(l.vl_sai) as Saida,
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo,
l.autor as Historico
from
lancamentos l, contas c
where
l.cod_conta = c.cod_conta
and
l.cod_recurso = 1
and
l.dt_lanca between '01.08.2014' and '31.08.2014'
group by
l.dt_lanca,l.autor, c.conta
order by
l.dt_lanca

Mas preciso obter também o saldo anterior de cada registro exibido no dbgrid....

A estrutura da minha tabela é:

CREATE TABLE LANCAMENTOS (
SEQ_LANCA INTEGER NOT NULL,
DT_LANCA DATE,
NR_DOC VARCHAR(20),
MES VARCHAR(10),
ANO INTEGER,
COD_CONTA INTEGER,
VL_ENTRA DOUBLE PRECISION,
VL_SAI DOUBLE PRECISION,
COD_HIST INTEGER,
COMPLEMENTO VARCHAR(40),
COD_SECRET INTEGER,
AUTOR VARCHAR(255),
COD_RECURSO INTEGER,
SALDO DOUBLE PRECISION,
COD_EVENTO INTEGER,
FORMPGTO INTEGER,
SALDO_RECURSO DOUBLE PRECISION,
SEGMENTO VARCHAR(15),
EXPORTADO VARCHAR(1) DEFAULT 'N',
DATA_EXPORTADO DATE
);

O resultado que estou obtendo até agora com a sql acima esta assim...
GOSTEI 0
Alisson Santos

Alisson Santos

26/08/2014

Boa noite amigo.

No caso qual é a estrutura de código dentro do programa.
Pois antes de executar a rotina sql tem que primeiro entender como o seu programa está, pois dentro dele provavelmente terá que fazer um laço para retorna essas informações ou fazer uma procedure que execute de uma só vez retornando os valores para a query.
Qual o banco?
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Boa noite, Alisson

Meu banco de dados é Firebird, uso como acesso aos dados ibquery no delphi 7.... Acho que não entendi bem o que quis me dizer...

Minha aplicação tem uma tela onde o usuário vai informar o período a ser consulta e dai após a consulta deverá exibir num grid o nome da conta, o saldo anterior, valor de entrada, valor de saída e saldo atual

Data Lançamento | Conta | Saldo anterior | Entrada | Saída | Saldo Atual
07/08/2014 | Saldo Abertura | 0,00 | 600,00 | 0,00 | 600,00
07/08/2014 | Alimentação |0,00 | 0,00 | 12,00 | -12,00
08/08/2014 | Alimentação |-12,00 | 0,00 | 12,00 | -24,00
GOSTEI 0
Renato Rubinho

Renato Rubinho

26/08/2014

Fiz o comando, mas não tenho sua estrutura para validar.
Deixei uma vírgula perdida no último campo do group by
Veja se funciona sem ela.
Se não funcionar, posta o sql da sua tabela "contas" para simular o comando com as tabelas criadas.

group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta,   <<<<---
order by 
  lctos.Data
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

Olá, boa noite

A tabela contas tem a seguinte estrutura:

CREATE TABLE CONTAS (
COD_CONTA INTEGER NOT NULL,
CONTA VARCHAR(40),
CLASSE VARCHAR(17),
TIPO VARCHAR(10),
MOVIMENTO VARCHAR(10),
SALDO DOUBLE PRECISION,
SALDOPER1 DOUBLE PRECISION,
SALDOPER2 DOUBLE PRECISION,
SALDOPER3 DOUBLE PRECISION,
SALDOPER4 DOUBLE PRECISION,
SALDOPER5 DOUBLE PRECISION,
SEGMENTO VARCHAR(15),
AGREGAR CHAR(3),
COD_INTEGRA INTEGER
);

Dela só preciso o nome da conta o restante vem da tabela LANCAMENTOS que já mensionei
Vou tentar com o sql q vc sugeriu
GOSTEI 0
Renato Rubinho

Renato Rubinho

26/08/2014

Tinha outros erros no comando que montei.
Simulei com esse e funcionou.

select
lctos.Data, 
lctos.Descricao, 
lctos.Entrada, 
lctos.Saida, 
lctos.Saldo, 
lctos.conta,
lctos.cod_conta,
(sum(saldo_ant.vl_entra) - sum(saldo_ant.vl_sai)) as Saldo_Ant
from 
(
select 
l.dt_lanca as Data, 
l.autor as Descricao, 
sum(l.vl_entra) as Entrada, 
sum(l.vl_sai) as Saida, 
(sum(l.vl_entra) - sum(l.vl_sai)) as Saldo, 
c.conta,
l.cod_conta 
from 
lancamentos l, contas c
where 
     l.cod_conta = c.cod_conta 
and  l.cod_recurso = 0
and  l.dt_lanca between '01.08.2014' and '01.08.2014'
group by 
  l.dt_lanca,l.autor, c.conta, l.cod_conta
order by 
  l.dt_lanca
) 
lctos,
lancamentos saldo_ant
where
     lctos.cod_conta = saldo_ant.cod_conta 
and  saldo_ant.dt_lanca < '01.08.2014'
group by 
  lctos.Data, 
  lctos.Descricao, 
  lctos.Entrada, 
  lctos.Saida, 
  lctos.Saldo, 
  lctos.conta,
  lctos.cod_conta
order by 
  lctos.Data


Abraççç,
Renato
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

blz, fiz a sql modificada, mais entao... ela agora não trás resultado nenhum... vc poderia me ajudar renato se preferir eu te enviou o banco de dados, pode ser???
GOSTEI 0
Targino Silveira

Targino Silveira

26/08/2014

Olá rrubinho como vc já está quase tudo pronto seria interessante criar um artigo que ajudaria várias outras pessoas.

Abraços
GOSTEI 0
Marcos P

Marcos P

26/08/2014

Cara, difícil retomar um post depois de um ano e meio, hein ?!?

Sql Server, né mesmo ?

Faz o seguinte : vai no Fiddle, cria tua estrutura de dados e coloca a query como está hoje.

Depois volta aqui e me avisa, que tento de ajudar.

Ok ?!?
GOSTEI 0
Alisson Santos

Alisson Santos

26/08/2014

Boa noite jovem.
Qual e o banco de dados que esta usando?
Por você quer retornar o saldo por sql e montando ou que retornar o saldo em uma variável e fazer a codificação dentro do programa?
GOSTEI 0
Marcos P

Marcos P

26/08/2014

É... melhor que esse último post, não tem como !!!
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

26/08/2014

Após ativar sua consulta de saldo do cliente.
Set para o ultimo registro.
Depois volte um registro.
Table.Last; // Último registro
Table.Prior;// Registro anterior

Label_Saldo_anterior:=table,fielbyname('SALDO').ASSTRING;

A ideia é só para clarear a mente.

Espero que ajude.
GOSTEI 0
Hardsoft Informática

Hardsoft Informática

26/08/2014

companheiro, qual é seu email te envio meu banco e mais detalhes to pra rancar os cabelos por nao estar conseguindo fazer essa rotina
GOSTEI 0
Renato Rubinho

Renato Rubinho

26/08/2014

Bom dia,

Vamos resolver por aqui e fica documentado para outras pessoas que também tenham a mesma dúvida.
Não precisa me mandar seu banco. Montei um cenário que atende para os testes, conforme os scripts que enviei.
Qual é a sua dificuldade agora ? Não traz o resultado que espera ?
Passe o que está fazendo e o que está ocorrendo.
Uma sugestão: Monte um ambiente de testes, apague suas tabelas CONTAS e LANCAMENTOS, crie novamente com os scripts que postou e rode os demais scripts que eu passei.
Teste o último comando sql que está funcionando e tem que funcionar. Compare os registros que cadastrei na unha com os que você tem no seu banco.

Abraççç
GOSTEI 0
POSTAR