 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
jescudeiro Aprendiz

Registrado: Segunda-Feira, 2 de Abril de 2012 Mensagens: 261 Localização: ribeirao preto
|
Enviada: Qui Mar 05, 2015 1:14 pm Assunto: Gerar Fluxo de caixa tabela Cpagar e Creceber SQL |
|
|
Boa tarde,
Tenho duas tabelas Cpagar e Creceber no SqlServer 2008 e Delphi 7.
Preciso montar uma consulta de fluxo de caixa como exemplo abaixo.
Data Valor Pagar Valor Receber Saldo
04/03/15 0,00 50,00 50,00
05/03/15 10,00 15,00 55,00
--------------------------------------------------------------
10,00 65,00 55,00
muito obrigado |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Mar 05, 2015 2:48 pm Assunto: |
|
|
Boa tarde,
Experimente mais ou menos dessa forma:
Código: | with
CTE_P as
(
select
Data,
sum(Valor) as Valor
from Cpagar
group by
Data
),
CTE_R as
(
select
Data,
sum(Valor) as Valor
from Creceber
group by
Data
),
CTE_Join as
(
select
coalesce(p.Data, r.Data) as Data,
coalesce(p.Valor, 0) as ValorPagar,
coalesce(r.Valor, 0) as ValorReceber
from CTE_P as p
full join CTE_R as r
on r.Data = p.Data
)
select
j.Data,
j.ValorPagar,
j.ValorReceber,
(select sum(s.ValorReceber - s.ValorPagar)
from CTE_Join as s
where s.Data < j.Data) + j.ValorReceber - j.ValorPagar as Saldo
from CTE_Join as j |
Espero que ajude.
Editado pela última vez por imex em Sex Set 29, 2023 12:11 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
jescudeiro Aprendiz

Registrado: Segunda-Feira, 2 de Abril de 2012 Mensagens: 261 Localização: ribeirao preto
|
Enviada: Sex Mar 06, 2015 10:38 am Assunto: Fluxo de caixa |
|
|
Boa tarde, Imex e muito obrigado pela Grande Ajuda...
Só tem um detalhe no script que nao consegui entender, o campo saldo da primeira linha sai com valor null..
exemplo
Data Pagar Receber Saldo
10-03-2015 499,99 300,00 null
11-03-2015 499,00 300,00 -399,98
12-03-2015 499,99 300,00 -599,97
muito obrigado mais uma vez Abraço |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 06, 2015 11:42 am Assunto: |
|
|
Bom dia,
Experimente acrescentar o Coalesce na subquery da parte final:
Código: | coalesce((select sum(s.ValorReceber - s.ValorPagar)
from CTE_Join as s
where s.Data < j.Data), 0) +
j.ValorReceber -
j.ValorPagar as Saldo |
Espero que ajude. |
|
Voltar ao Topo |
|
 |
jescudeiro Aprendiz

Registrado: Segunda-Feira, 2 de Abril de 2012 Mensagens: 261 Localização: ribeirao preto
|
Enviada: Sex Mar 06, 2015 12:03 pm Assunto: [Resolvido] |
|
|
Imex, muito obrigado..Parabéns....
Abraço |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Dez 19, 2016 7:01 am Assunto: |
|
|
Revivendo esse tópico.
imex, parabéns pelo codigo, muito bom.
Se importa de me ajudar com 2 coisas?
Onde posso definir a data que eu desejar para gerar esse relatorio? Tipo através de 2 datetimepicker?
De que forma eu poderia mostrar esse resultado também num grafico?
Obrigado. |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Dez 19, 2016 8:02 am Assunto: |
|
|
Para definir a data, você vai ter que passar o valor da mesma por parâmetro, ficando assim:
Código: | with
CTE_P as
(
select
Data,
sum(Valor) as Valor
from Cpagar
group by
Data
),
CTE_R as
(
select
Data,
sum(Valor) as Valor
from Creceber
group by
Data
),
CTE_Join as
(
select
coalesce(p.Data, r.Data) as Data,
coalesce(p.Valor, 0) as ValorPagar,
coalesce(r.Valor, 0) as ValorReceber
from CTE_P as p
full join CTE_R as r
on r.Data = p.Data
)
select
j.Data,
j.ValorPagar,
j.ValorReceber,
(select sum(s.ValorReceber - s.ValorPagar)
from CTE_Join as s
where s.Data < j.Data) + j.ValorReceber - j.ValorPagar as Saldo
from CTE_Join as j
where j.data = :Data |
quanto aos gráficos, pode utilizar os componentes da guia TeeChart do próprio Delphi |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Dez 19, 2016 10:37 am Assunto: |
|
|
Opa, bom dia.
ok, entendi.
Estou testando tudo no ibexpert, mas estou com dificuldades de colocar isso no delphi. da erro que não reconhece o CTE_P, por exemplo.
Sobre o componente de grafico, vi uns tutoriais, mas com uma sql desse tamanho não sei bem como fazer a ligação. |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Dez 19, 2016 10:56 am Assunto: |
|
|
renanbg escreveu: | Opa, bom dia.
ok, entendi.
Estou testando tudo no ibexpert, mas estou com dificuldades de colocar isso no delphi. da erro que não reconhece o CTE_P, por exemplo.
Sobre o componente de grafico, vi uns tutoriais, mas com uma sql desse tamanho não sei bem como fazer a ligação. |
Quanto ao erro de não reconhecer o CTE, poste como ficou o código no Delphi p/ o pessoal poder avaliar.
Quanto a ligação dos campos, esse sql vai retornar os campo:
Citação: | j.Data,
ValorPagar,
ValorReceber,
Saldo |
toda a estrutura montada é para conseguir esses 3 valores, e é em cima desses 3 que você vai trabalhar no seu gráfoco |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Dez 19, 2016 3:29 pm Assunto: |
|
|
Alterei a ultima linha para:
Código: | where j.data >= :INICIO and j.data <= :FIM |
Criei esses 2 parametros direto na propriedade params da query
Joguei todo o codigo da SQL dentro da propriedade SQL da query, no object inspector.
Aí chamei, por um button, dessa forma:
Código: | close;
parambyname('INICIO').asdate:= datetimepicker1.date;
parambyname('FIM').asdate:= datetimepicker2.date;
open; |
Só que não está trazendo os dados de acordo, como trazia no ibexpert.
Fora isso, percebi que o saldo nunca inicia corretamente, pois ele esta pegando valores anteriores as datas informadas.
O saldo só inicia certo, caso eu não use os parametros para filtrar por periodo. |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Dez 19, 2016 3:57 pm Assunto: |
|
|
tenta desse jeito aqui:
Código: | with
CTE_P as
(
select
Data,
sum(Valor) as Valor
from Cpagar
group by
Data
),
CTE_R as
(
select
Data,
sum(Valor) as Valor
from Creceber
group by
Data
),
CTE_Join as
(
select
coalesce(p.Data, r.Data) as Data,
coalesce(p.Valor, 0) as ValorPagar,
coalesce(r.Valor, 0) as ValorReceber
from CTE_P as p
full join CTE_R as r
on r.Data = p.Data
where p.Data Between :DataIni and :DataFim
)
select
j.Data,
j.ValorPagar,
j.ValorReceber,
(select sum(s.ValorReceber - s.ValorPagar)
from CTE_Join as s
where s.Data < j.Data) + j.ValorReceber - j.ValorPagar as Saldo
from CTE_Join as j |
|
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Dez 19, 2016 4:19 pm Assunto: |
|
|
No ibexpert rodou blz. Agora traz o saldo certo, de acordo com o periodo.
Estou saindo do trabalho, amanhã vou tentar novamente botar isso na query e ver se descubro porque lá não está filtrando direito.
Postarei aqui.
obrigado pela ajuda. |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Dez 19, 2016 4:27 pm Assunto: |
|
|
ok, mas chegou a testar esse último código na query? |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Ter Dez 20, 2016 9:40 am Assunto: |
|
|
Bom dia Leo.
Acabei de testar na query. Como antes eu joguei toda essa instrução na propriedade SQl e atraves de um button chamei assim
Código: | close;
parambyname('DataIni').asdate:= datetimepicker1.date;
parambyname('DataFim').asdate:= datetimepicker2.date;
open; |
Rodou com perfeição.
Agora me ocorreu uma coisa em relação as contas a receber, via boleto.
Neste caso, se eu filtrar as contas que vencem hoje, estaria fazendo errado, pois o credito delas se dará amanhã. De que forma você trataria isso?
Outra curiosidade, suponhamos que eu tenha saldo em minhas contas bancárias...Eu poderia de alguma forma trazer esse saldo para o fluxo? Assim eu saberia exatamente a data que vou precisar buscar dinheiro, caso necessite.
Do grafico ainda não sobrei tempo, mas em breve vou ver se consigo montar um grafico em linhas para facilitar o entendimento. |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Jan 02, 2017 11:43 am Assunto: |
|
|
Olá amigos.
Alguem sabe como pegar as contas que vencem 1 dia antes e botar nessa SQL?
Além disso precisaria pegar o valor que tenho nos meus bancos e considerar.
Qualquer ajuda é bem vinda |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|