Bom dia, estou tentando desenvolvendo um subrelatorio usando ireport e hibernate mas não ta funcionando, procurei varios exemplos na net mas não deu certo. Tenho uma tabela de cadastro de pacientes e um cadastro de convenios, cada um em sua respectiva tabela, eu preciso imprimir a ficha desse paciente e mostrar tambem qual o convenio que ele foi cadastrado. Na minha tabela de pacientes eu tenho uma FK de convenio.
Eu ja criei o relatorio que mostra o cadastro do paciente e está funcionando perfeitamente, o problema é para poder criar o subrelatorio de convenio. Alguem pode me ajudar?
Outro problema que tenho é que quando recuperdo a data cadastrada no mysql não consigo converter para ##/##/#### mas vem como esta no banco ####-##-##, ja adicionei a mascara no campo do relatorio mas continua errado. Estou usando o ireport 3.7.4.
hvivox
Cara, apesar de conhecer e utilizar hibernate em minhas aplicações, para gerar relatorios utilizo JDBC.
na epoca q tentei gerar relatorio em Hibernate não consegui. por isso utilizo JDBC para manipular consultas para os relatorios e hibernate para cadastro, processamentos e outros
R
raf4ever
Como assim não conseguiu?
Tanto faz Hibernate ou JDBC,no fim o que vai ser passado pro Ireport é um List
wagne23
Correto, passo um list para o relatorio, mas como faço com o subrelatorio?
Guevara, eu ja tinha olhado esse seu post mas não funcionou para mim, simplesmente o subrelatorio aparece em branco. Não sei o que pode ser.
R
raf4ever
Na aba ‘Propriedades’ do teu Subreport,o que tem na opção ‘When no Data’?
hvivox
Então, vamos trocar informações, vc me ajuda a utilizar hibernate c/ subrelatorios e te ensino a utilizar os subrelatórios.
vamos ao meu problema e depois ao seu ok.
MEU Problema.
Quando vc gera relatorio vc tem um classe em java q gerar o relatorio. Está classe eu tenho porém ela está configurada para JDBC. não consegui configurar para hibernate, até cheguei a pesguisar a questão do list mas acabei deixando de lado.
Seu problemas
Para que eu possa te ajudar preciso saber qual a versão do teu iReport, tenho uns modelos de subrelatorios que podem te ajudar!
Assim q eu tiver um tempo vou colocar um passo a passo para vc montar um subrelatorio. é bem simples,
att.
wagne23
Ta bom, não sei mais o que fazer. A minha situação é a seguinte:
Tabela Rah (Tabela de Pacientes)
-idRah (PK)
-descricao
-idConvenio (FK)
Tabela Convenio:
-idConvenio
-nome
Ai criei um relatorio pricipal com os dados de Rah e criei um Parametro chamado idConvenio.
Adicionei tambem um subreport nesse relatorio principal(Rah)
Ficou assim as propriedades do sureport:
Ai no meu subrelatorio eu criei apenas com o campo de nome do convenio.
Criei tambem um Parametro chamado idConvenio no subrelatorio.
Mas quando mando gerar ele não gera nada no subrelatorio. Alguem pode me ajudar?
wagne23
Ok hvivox, vc conhece alguma coisa de hibernate? Ou sua duvida é so em como utilizar o hibernate com o ireport?
A minha classe que gera o relatorio está assim:
Então da minha aplicação eu instancio essa classe e chamo o metodo geraRelatorio passando um list de todos os os cadastros de Rah(Pacientes) que eu busquei com o hibernate.
private DaoRah dao = new DaoRah();
new GeraRelatorio().geraRelatorio(dao.listarTodos());
Claro que de modo resumido, esse metodo listarTodos que vai me retornar o list para passar para o relatorio.
Acho que resumindo é isso.
wagne23
Respondendo a sua pergunta raf4ever na opção ‘When no Data’ tem ‘No Pages’.
hvivox
parceiro! faz assim me envie o seu email via mensagem privada aqui msm pelo forum. Dessa forma vou lhe enviar uns modelos de subrelatorio que tenho aqui pronto.
O passo a passo lhe envio a noite sem falta qdo tiver um tempo.
blz
hvivox
Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.
R
raf4ever
Mude para ‘All Sections,No Details’ e veja se aparece o relatório.
R
raf4ever
hvivox:
Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.
Cara confesso que ainda não consegui entender a dificuldade :lol:
Se no fim das contas vc vai trabalhar com uma lista de objetos,qual a diferença de ser JDBC ou Hibernate?
Vc teria um exemplo de código em q vc tenta gerar o relatório usando Hibernate?
wagne23
raf4ever, mudei como vc disse e continua sem buscar o convenio do paciente. Olha como ficou.
Eu coloquei como teste o parametro idConvenio para imprimir e ele sai como null, e coloquei tambem a propriedade idConvenio e essa sim vem com valor, o que está parecendo é que ele não está ligando o parametro com o valor da propriedade.
hvivox
raf4ever:
hvivox:
Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.
Cara confesso que ainda não consegui entender a dificuldade :lol:
Se no fim das contas vc vai trabalhar com uma lista de objetos,qual a diferença de ser JDBC ou Hibernate?
Vc teria um exemplo de código em q vc tenta gerar o relatório usando Hibernate?
Então, minha duvida é especificamente como passar uma LIST por parametro para dentro do relatórios, atualmente trabalho assim:
meu relatorio tem data inicio e fim, para isso passo por parametro um dateInicio e dateFim, apenas isso, minha duvida é como passo um list? para dentro do relatorio? utilizando o hibernate?
att.
wagne23
Então hvivox. vc viu o meu exemplo anterior, la eu mostrei como passar esse list para o relatorio:
Repare que esse metodo recebe uma collection como parametro, então vc so precisa fazer a sua pesquisa com data inicio e data fim (Com hibernate ou JDBC)e colocar esse retorno dentro de um list, ai vc passa esse list para o metodo, ai é gerado o relatorio
wagne23
So uma observação que ainda continuo com problemas para gerar esse subrelatorio.
R
raf4ever
wagne23:
raf4ever, mudei como vc disse e continua sem buscar o convenio do paciente. Olha como ficou.
Eu coloquei como teste o parametro idConvenio para imprimir e ele sai como null, e coloquei tambem a propriedade idConvenio e essa sim vem com valor, o que está parecendo é que ele não está ligando o parametro com o valor da propriedade.
Vc criou esse ‘idConvenio’ no relatorio pai e no subreport?
wagne23
Sim
R
raf4ever
Então é simples.
Abra a aba Propriedades do seu subreport(clique no subreport dentro do relatório pai) e na opção ‘Parameters’ mapeie o parametro que deseja.
hvivox
wagne23:
Então hvivox. vc viu o meu exemplo anterior, la eu mostrei como passar esse list para o relatorio:
Repare que esse metodo recebe uma collection como parametro, então vc so precisa fazer a sua pesquisa com data inicio e data fim (Com hibernate ou JDBC)e colocar esse retorno dentro de um list, ai vc passa esse list para o metodo, ai é gerado o relatorio
Entedi a logica do codigo java mas.... no relatorio propriamento dito? como preparar o relatorio para receber um list ao inves de uma Query? no meu caso meu relatorio está configurado assim:
Ainda continuo como duvidas para configurar o relatorio no iReport para receber um list.
Alguém pode ajudar?
wagne23
hvivox , vc viu o exemplo que eu mostrei. La mostra como configurar o ireport para receber um list.
JasperPrintjpt=null;publicvoidgeraRelatorio(Collectiondata)throwsJRException,Exception{Mapparameters=newHashMap();jpt=JasperFillManager.fillReport("RAH.jasper",parameters,newJRBeanCollectionDataSource(data,false));// passa para o metodo fillReport um JRBeanCollectionDataSource//com a list que vc recuperou do bancoJasperViewer.viewReport(jpt,false);}
hvivox
jpt = JasperFillManager.fillReport("RAH.jasper", parameters, new JRBeanCollectionDataSource(data, false));
O erro está ocorrendo neste parantro new JRBeanCollectionDataSource(data, false) acredito que seja configuração no relatorio
Não entendo uma coisa! vc tem que ter um consulta para ser mostrado o fieldName, pelo query report depois disso vc associa o fieldname ao TextField correto? se eu nao tiver nenhum consulta então como faço isso??
hvivox
hvivox:
jpt = JasperFillManager.fillReport("RAH.jasper", parameters, new JRBeanCollectionDataSource(data, false));
O erro está ocorrendo neste parantro new JRBeanCollectionDataSource(data, false) acredito que seja configuração no relatorio
Não entendo uma coisa! vc tem que ter um consulta para ser mostrado o fieldName, pelo query report depois disso vc associa o fieldname ao TextField correto? se eu nao tiver nenhum consulta então como faço isso??
alguém pode dar um força ???
wagne23
Mas qual o erro que está dando? Faça Assim no relatorio, no ireport em query report selecione em Query language o tipo para hibernate Query language, e escreva a query em HQL tipo:
Para isso vc tem que ter adicionado o jar da sua aplicação no ireport.
Ai ele vai disponobilizar os campos do seu “bean” para adicionar como variaveis e poder colocar no seu relatorio associando aos TextFields.
hvivox
wagne23:
Mas qual o erro que está dando? Faça Assim no relatorio, no ireport em query report selecione em Query language o tipo para hibernate Query language, e escreva a query em HQL tipo:
Para isso vc tem que ter adicionado o jar da sua aplicação no ireport.
Ai ele vai disponobilizar os campos do seu “bean” para adicionar como variaveis e poder colocar no seu relatorio associando aos TextFields.
Certo! já estou conectando o iReport com o hibernate.
Mas… além do que vc informou é necessario fazer outro tipo de configuração para que o relatorio receba um LIST?
Por que tudo isso q vc informou já estou fazendo. o iReport o relatorio roda. Mas quando executo o relatorio pelo iReport não jogo um list para ele, correto. Mas quando rodo pela aplição eu preciso jogar um LIST para o relatorio.
wagne23
Não ha necessidade de fazer outra configuração. Ele ta retornando algum erro?
Só a observação de que vc tem que passar um JRBeanCollectionDataSource para o metodo fillReport, sendo que o seu List vc passa no construtor do JRBeanCollectionDataSource.
JasperPrint jpt = null;
Map parameters = new HashMap();
jpt = JasperFillManager.fillReport("SeuRelatorio.jasper", parameters, new JRBeanCollectionDataSource(seuListPreenchido, false));
JasperViewer.viewReport(jpt, false);