Dúvida com JasperReports e iReports

9 respostas
Ruttmann

Boa tarde pessoal…

Então, estou fazendo o projeto final aqui no curso, o qual é um aplicativo para gerenciamento pessoal…

Com eventos financeiros e eventos pessoais, e possibilidade de cadastrar uma agenda de contatos…

Estou fazendo em grupo e pensamos em fazer uma espécie de extrato em forma de relatório, no qual saíssem os eventos financeiros. Um relatório simples a princípio, só para o usuário ter uma visão geral de suas movimentações no programa…

Mas aí que tá, li vários tutoriais sobre essas ferramentas de geração de relatórios, mas eles apenas ensinam a fazer relatórios “puxando” os dados inseridos no database e jogando no relatório…

Até aí tudo bem, também estou trabalhando com database, mas de uma forma diferente…

Ao cadastrar um evento, posso determinar o período no qual ele vai acontecer, e o intervalo de tempo entre os eventos(por exemplo o salário, acontece entre 01/01/2012 a 31/12/2012(periodo) no intervalo de 30 dias(intervalo de tempo). Mas o evento é cadastrado apenas uma vez no banco, e não faço vários inserts pra cada vez que o evento vai acontecer, é meu programa em Java que calcula os dias e informa ao usuário…

As tabelas de eventos só tem os campos: Nome, dataInicial, dataFinal, valor, intervaloDeTempo e observacoes…

Tem como eu gerar relatórios com estas ferramentas, onde eles(os relatórios) são gerados com base no banco e na minha lógica?

9 Respostas

R

Ruttmann:

Tem como eu gerar relatórios com estas ferramentas, onde eles(os relatórios) são gerados com base no banco e na minha lógica?

Não tem problema,basta vc fazer a consulta e passar a lista filtrada pro relatório.

Ruttmann

raf4ever:
Ruttmann:

Tem como eu gerar relatórios com estas ferramentas, onde eles(os relatórios) são gerados com base no banco e na minha lógica?

Não tem problema,basta vc fazer a consulta e passar a lista filtrada pro relatório.

Certo, vou conversar com o pessoal do grupo e imaginar como posso fazer isso.

Pois como citei antes, eu preciso gerar diversos eventos através um único INSERT do banco de dados…

Se alguém tiver uma dica de como faço isso, se já passou por isso alguma vez, por favor…

Obrigado!

R

Como seriam esses cálculos que vc precisa fazer,pode explicar melhor?

Ruttmann

Assim, a gente fez um calendário(o visual ficou igual calendario de parede mesmo), onde são adicionados os eventos nos dias correspondentes…

Aí por exemplo, no dia de hoje tem 3 eventos, eu posso clicar em cima do nome do evento(que é o que aparece no calendario), e abre uma jdialog com as informações do evento…

O problema é que quando cadastro um novo evento, ele gera apenas 1 insert no banco de dados, independente se esse evento é unico ou se vai se repetir a cada 3 dias, entende?

No banco eu só coloco a data inicial, a data final do evento e de quanto em quanto tempo ele vai acontecer, e de posse dessas informações a gente gera os eventos pra poder colocar no calendario…

Aí que reside meu problema, nos tutoriais que li, ensina somente a puxar os inserts do banco e jogar no relatório, isso pra mim é simples…

Mas de que adianta eu puxar um insert dos eventos que eu gerei, sendo que eles podem se repetir por inumeras vezes, eu datas predeterminadas…

Quero jogar todos os eventos no relatório, e não só "o usuario criou o evento salario, que começa em janeiro, termina em dezembro e acontece a cada 30 dias. Quero que todos os salários sejam exibidos no relatório, entende?

charleston10

Deixa eu ver se eu entendi.

Voce tem um calendario onde aparece eventos cadastrados por voce;

No seu programa voce cadastra esse evento uma unica vez informando a data inicial dele e a data final;

Voce quer que o calendario apareça esse evento em todos os meses;

É isso?

Ruttmann

charleston10:
Deixa eu ver se eu entendi.

Voce tem um calendario onde aparece eventos cadastrados por voce;

No seu programa voce cadastra esse evento uma unica vez informando a data inicial dele e a data final;

Voce quer que o calendario apareça esse evento em todos os meses;

É isso?

Não não, o calendário já está pronto.

Preciso saber como faço pra gerar um relatório com todos os eventos, sendo que só vou ter um insert no banco de dados que vai servir pra vários eventos, entende?

Assim como o exemplo do evento salario que dei acima, vai ser um insert só que vai informar vários eventos(os eventos de salario)…

charleston10

Sim, entendi…

Eu acredito que o problema esteja na elaboração do banco de dados.
Você precisa ter mais de uma tabela para cadastrar um evento.

Os dados do evento não pode se misturar com a datas, isso que voce quer fazer é base de criar parcelas em um sistema de vendas.

No seu programa voce tem que criar duas tabelas, uma para os dados do evento e outra para guardar as datas do evento.

Tabela_eventos
codigo_evento integer primary key not null;
nome_evento
outros dados…

Tabela_datas_evento
codigo_evento integer
data_evento date

Assim, voce precisa pelo menos ter todas as datas cadastradas no seu banco de dados.
Quando voce puxar o relatorio voce faz um select relacionando as duas tabelas para gerar um resultado.
No seu sistema, vai ter que fazer um Array para pegar o dia e o mes do seu evento e guardar isso na sua tabela.
E depois no relatorio puxar o evento com o mes desejado. Assim voce pega o mes de janeiro e todos eventos desse mes.

Se voce fizer so no relatorio isso, vai dar um gambiarra e só.
E é por isso que voce nao consegue enxergar alguma coisa com apenas um Insert ou registro.

Ruttmann

charleston10:
Sim, entendi…

Eu acredito que o problema esteja na elaboração do banco de dados.
Você precisa ter mais de uma tabela para cadastrar um evento.

Os dados do evento não pode se misturar com a datas, isso que voce quer fazer é base de criar parcelas em um sistema de vendas.

No seu programa voce tem que criar duas tabelas, uma para os dados do evento e outra para guardar as datas do evento.

Tabela_eventos
codigo_evento integer primary key not null;
nome_evento
outros dados…

Tabela_datas_evento
codigo_evento integer
data_evento date

Assim, voce precisa pelo menos ter todas as datas cadastradas no seu banco de dados.
Quando voce puxar o relatorio voce faz um select relacionando as duas tabelas para gerar um resultado.
No seu sistema, vai ter que fazer um Array para pegar o dia e o mes do seu evento e guardar isso na sua tabela.
E depois no relatorio puxar o evento com o mes desejado. Assim voce pega o mes de janeiro e todos eventos desse mes.

Se voce fizer so no relatorio isso, vai dar um gambiarra e só.


Entendi amigo, e concordo com vc também…

Eu queria fazer desse modo no início do trabalho, mas o resto do pessoal achou que ia ficar um banco extenso demais. Só que agora estamos tendo que programar a mais pra compensar a cagada no banco de dados…

Vou falar com o pessoal amanhã e ver o que conseguimos fazer, mas acho que vamos ter que abandonar esse esquema de relatório, ou tentar gerar de qualquer outro modo, o que vai tomar bastante tempo…

Obrigado pela atenção!

charleston10

O banco de dados não fica muito extenso, dependendo dele, se usar MySQL ou semelhante vai funcionar muito bem e ainda bem rápido;
Agora se usar Firebird, Access vai ficar extremamente lento.

Vai a dica, se fizer da maneira vai ficar mais facil e simples fazer.
Agora voce ja tem a base e ideia, vai ser bem rápido;

Ou também pode ter uma maneira de fazer isso no relatório, pelo menos eu nunca vi, quem sabe tenha.
Se o Jasper tiver uma programação interna com java, da pra voce criar esse array la mesmo somente com a data inicial sem precisar cadastrar no banco.
É que eu não sou muito bom em relatório, não é eu que faço geralmente…

Criado 24 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 9
Participantes 3