Relatório Financeiro por ano dividido por Mes

Delphi

21/11/2011

Olá
Tenho um banco de dados assim

Pagamento
Cliente, Dtpagamento,valor

dai qero que no relatorio apareca a ssim:

Cliente | Jan/10 | Fev/10 | mar/10 |etc......
_________________________________________________________________________
Francisco de amoras | R$ 12,20 | R$ 0,00 | R$ 12,20 |
Maria de Olaria | R$ 22,09 | R$ 1,11 | R$ 0,09 |
etc..

Gente como eu faço isso no delphi, por favor me ajudem....Se tiver um vídeo qe me mostre como fazer isso...

Aguardo
Kleber Silva

Kleber Silva

Curtidas 0

Respostas

Sérgio Andrade.

Sérgio Andrade.

21/11/2011

Amigo, tem que verificar que gerador de relatório e qual base de dados vc utiliza.

Diz para podermos pensar numa forma para resolver seu problema.


estou aguardando...
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

Olá

QReport....Banco Firebird...
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

Por favor...Me ajudem....
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

21/11/2011

se o numero de meses a ser listado for fixo, pode ser feito via stored procedure.

se o numero de meses a ser listado for variável, e melhor fazer no Delphi.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

21/11/2011

conseguiu resolver ?
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

conseguiu resolver ?


Nao, nao consegui, porfavor me mostre como fazer...
GOSTEI 0
Leandro

Leandro

21/11/2011

Amigo isso é muito simples vc consegue montar tudo no sql...

exe:

select nomecli, sum(janeiro) as janeiro, sum(fevereiro) as fevereiro
from(
select nomecli,
case when extract(month from datarecebimento) = 1 then sum(valorrecebido) end as janeiro,
case when extract(month from datarecebimento) = 2 then sum(valorrecebido) end as fevereiro,
from
--sua_tabela
where
--filtros
group by nomecli,datarecebimento
as selecao
group by nomecli



essa sintax do sql é do postgres acredito que funcione no FB com alguns ajustes
q coisa posta ai

abraços.
GOSTEI 0
Leandro

Leandro

21/11/2011

Deu certo ?
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

Olá, nao deu certo...Me atrapalhei acho!!!

Olha, meu banco ta assim:

Cliente
Id,Nome

Caixa
Data,Valor,Cliente

Porfavor, ajusta o script para mim nesse formato..

Obrigado..
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

21/11/2011

tente com a instrução abaixo. assim você terá uma idéia de como obter o que deseja.

select
cx.cliente, cl.nome,
sum(case when extract(month from cx.data) = 1 then cx.valor else 0 end) as janeiro,
sum(case when extract(month from cx.data) = 2 then cx.valor else 0 end) as fevereiro,
sum(case when extract(month from cx.data) = 3 then cx.valor else 0 end) as marco,
sum(case when extract(month from cx.data) = 4 then cx.valor else 0 end) as abril,
sum(case when extract(month from cx.data) = 5 then cx.valor else 0 end) as maio,
sum(case when extract(month from cx.data) = 6 then cx.valor else 0 end) as junho,
sum(case when extract(month from cx.data) = 7 then cx.valor else 0 end) as julho,
sum(case when extract(month from cx.data) = 8 then cx.valor else 0 end) as agosto,
sum(case when extract(month from cx.data) = 9 then cx.valor else 0 end) as setembro,
sum(case when extract(month from cx.data) = 10 then cx.valor else 0 end) as outubro,
sum(case when extract(month from cx.data) = 11 then cx.valor else 0 end) as novembro,
sum(case when extract(month from cx.data) = 12 then cx.valor else 0 end) as dezembro
from
caixa cx
inner join
cliente cl on cl.id = cx.cliente
where
cx.data between 15.04.2011 and 31.07.2011
group by
cx.cliente, cl.nome
GOSTEI 0
Mauricio Neves.

Mauricio Neves.

21/11/2011

Ola

A solução mais prática seria vc criar um clientdataset, por nele os campos do jeito que vc precisa e popular ele via sqlquery, o clientdaset é daqueles não ligado ao banco de dados.
Se tiver dúvidas posta ai.

Maurício das Neves
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

select
cx.cliente,
cx.data,
cx.valor,
cl.id,
cl.nome,
sum(case when extract(month from cx.data) = 1 then cx.valor else 0 end) as janeiro,
sum(case when extract(month from cx.data) = 2 then cx.valor else 0 end) as fevereiro,
sum(case when extract(month from cx.data) = 3 then cx.valor else 0 end) as marco,
sum(case when extract(month from cx.data) = 4 then cx.valor else 0 end) as abril,
sum(case when extract(month from cx.data) = 5 then cx.valor else 0 end) as maio,
sum(case when extract(month from cx.data) = 6 then cx.valor else 0 end) as junho,
sum(case when extract(month from cx.data) = 7 then cx.valor else 0 end) as julho,
sum(case when extract(month from cx.data) = 8 then cx.valor else 0 end) as agosto,
sum(case when extract(month from cx.data) = 9 then cx.valor else 0 end) as setembro,
sum(case when extract(month from cx.data) = 10 then cx.valor else 0 end) as outubro,
sum(case when extract(month from cx.data) = 11 then cx.valor else 0 end) as novembro,
sum(case when extract(month from cx.data) = 12 then cx.valor else 0 end) as dezembro
from
caixa cx inner join cliente cl on cl.id = cx.cliente
where
cx.data between 01-01-2011 and 30-12-2011
group by
cx.cliente
order by
cx.data


Usei assim, e acontece esse erro...

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

o qe faço???
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

select
cx.cliente,
cx.data,
cx.valor,
cl.id,
cl.nome,
sum(case when extract(month from cx.data) = 1 then cx.valor else 0 end) as janeiro,
sum(case when extract(month from cx.data) = 2 then cx.valor else 0 end) as fevereiro,
sum(case when extract(month from cx.data) = 3 then cx.valor else 0 end) as marco,
sum(case when extract(month from cx.data) = 4 then cx.valor else 0 end) as abril,
sum(case when extract(month from cx.data) = 5 then cx.valor else 0 end) as maio,
sum(case when extract(month from cx.data) = 6 then cx.valor else 0 end) as junho,
sum(case when extract(month from cx.data) = 7 then cx.valor else 0 end) as julho,
sum(case when extract(month from cx.data) = 8 then cx.valor else 0 end) as agosto,
sum(case when extract(month from cx.data) = 9 then cx.valor else 0 end) as setembro,
sum(case when extract(month from cx.data) = 10 then cx.valor else 0 end) as outubro,
sum(case when extract(month from cx.data) = 11 then cx.valor else 0 end) as novembro,
sum(case when extract(month from cx.data) = 12 then cx.valor else 0 end) as dezembro
from
caixa cx inner join cliente cl on cl.id = cx.cliente
where
cx.data between 01-01-2011 and 30-12-2011
group by
cx.cliente
order by
cx.data


Usei assim, e acontece esse erro...

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

o qe faço???


alguem pode me ajudar...
GOSTEI 0
Kleber Silva

Kleber Silva

21/11/2011

Ok, encerrado...

era besteira minha....

Obrigado pelo codigo, funcionou legal...
GOSTEI 0
POSTAR