Problema ao Gerar Relatorio IREPORT

18 respostas Resolvido
ireportjavamysqlmvc
W

é o seguinte galera estou trabalhando com MVC, no jFrame que estou tentando chamar o relatorio estou importando a minha classe conexao crio um objeto pra essa classe. conexao conectaRelat=new conexao(); e no initcomponents estou inicializando a conexao > conectaRelat.conexao(), até ai tudo beleza mas la no meu botão imprimir que vai gerar o relatorio está assim.

private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {

int imprime=JOptionPane.showConfirmDialog(null, Tem Certeza que Deseja Imprimir esse Recibo ?,Atenção,JOptionPane.YES_NO_OPTION);

if(imprime==JOptionPane.YES_OPTION){

try {

HashMap filtro = new HashMap();

filtro.put(os, Integer.parseInt(cxtID.getText()));

JasperPrint print=JasperFillManager.fillReport("…/…/relatorios/recibo.jasper", filtro, NÃO SEI O QUE COLOCAR AQUI);

} catch (Exception e) {

JOptionPane.showMessageDialog(null, Erro ao Imprimir Recibo !);

}

}

}

meu problema e justamente nessa linha > print=JasperFillManager.fillReport("…/…/relatorios/recibo.jasper", filtro, NÃO SEI O QUE COLOCAR AQUI);

18 Respostas

M

Aí pelo que eu lembre vai a lista do teu dataset. Precisa de algum conteudo pra gerar o relatório. Mas se quiser gerar um relatorio em branco bota null

W

como assim lista do meu dataset ?

M

Do que é o relatório que tu quer gerar? Uma lista de alguma coisa?

W

montei um recibo no ireport e passe a seguinte string sql: select * from tbl_recibo where id_recibo=parametroCriado, relatorio ja funciona so falta enviar o parâmetro e chamar ele no meu sistema o problema e nessa linha ja tentei no final dela colocar dessa forma pra ver se funciona > JasperPrint print=JasperFillManager.fillReport("…/…/relatorios/recibo.jasper", filtro, conectaRelato.conexao());

mas não vai assim

M

Eu usei uma vez desse jeito: carrega esse select em um arraylist lista, por exemplo. Aí nessa linha tu bota JasperPrint print=JasperFillManager.fillReport("…/…/relatorios/recibo.jasper", filtro, new JRBeanCollectionDataSource(lista));

W

não deu certo dessa forma o select ja foi passado no ireport apenas estou tentando enviar o parâmetro pra ele

R

Recomendo vc fazer essa consulta via seu software e depois passar os dados por parâmetro já que não é uma lista

W

não estou conseguindo, estou quebrando a cabeça a manhã toda

W
Solucao aceita

Olá,

Eu utilizo essa abordagem:

public static byte[] gerarRelatorio(List<AlgumaCoisa> coisas) throws Exception {

       //Esse forma de pegar o jrxml deve ser adaptado para seu cenario
		InputStream jrxml = Faces.getResourceAsStream("/WEB-INF/relatorios/relatorioAlgumaCoisa.jrxml");
		InputStream logo = Faces.getResourceAsStream("/WEB-INF/relatorios/imagens/brasao.gif");
		
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("IMAGEM_LOGO", logo);

		JasperReport report = JasperCompileManager.compileReport(jrxml);
		JasperPrint print = JasperFillManager.fillReport(report, parametros, new JRBeanCollectionDataSource(coisas));

		return JasperExportManager.exportReportToPdf(print);
	}
A

O que ocorre ? algum erro ? Eu faço de um jeito bem parecido com o seu (escrevo o sql dentro do report e passo parametro em tempo de execução). Só uso um objeto diferente pros parametros - um array de JRParameter ao invés de HashMap, mas dá meio que na mesma.

W

o que acontece e que tenho que passar minha conexão com o banco no final > print=JasperFillManager.fillReport("…/…/relatorios/recibo.jasper", filtro, conectaRelato.conexao()); mas da erro somente nessa linha

R

Não tem que! Nem recomendo. Pode passar apenas os dados, como já foi demonstrado.

W

o que vai em coisas, algumas coisas e de onde vem esse faces?

W

Lista<AlgumaCoisa> coisas; = Isso vai ser as informações do relatório (Exemplo: resultado de sua consulta no banco)

InputStream jrxml = Faces.getResourceAsStream( <- Esse trecho você vai ter que adaptar utilizando sua forma de carregar o arquivo

A

Qual o motivo para não recomendar ?

A

Qual o erro ?

R

Não é erro. Apenas não é uma boa prática. As regras de negócio devem ficar na sua respectiva camada e não na VIEW/front. Isso é ainda pior que uma tela(jframe) executar uma SQL no banco, no padrão MVC isso é abominável. Também não se sai distribuindo conexões por aí para terceiros, deve ser restrito a camada controller do software.

W

Obrigado pela força Galera tentei os métodos passados qui no tópico a tarde inteira mas não consegui adaptar ao meu projeto por falta da conhecimento (Sou iniciante). Vou absorver todas as dicas aqui passadas e passar a estudar mais afundo por meus códigos ficam uma verdadeira bagunça. Consegui resolver meu problema da seguinte forma. eu estava fazendo dessa forma > HashMap filtro=new HashMap(); ; então la na minha linha do JasperPrint print=JasperFillManager.fillReport dava erro depois de horas olhando o codigo fiz da seguinte forma Map filtro=new java.util.HashMap(); e gerou o relatorio normalmente. meu código ficou da seguinte forma.

int imprime=JOptionPane.showConfirmDialog(null, Tem Certeza que Deseja Imprimir esse Recibo ?,Atenção,JOptionPane.YES_NO_OPTION);

if(imprime==JOptionPane.YES_OPTION){

try {

Map filtro=new java.util.HashMap();

filtro.put(“id_recibo”, Integer.parseInt(cxtID.getText()));

JasperPrint print=JasperFillManager.fillReport(“C:/Users/informatica01/Documents/NetBeansProjects/SisAluguel/relatorios/recibo.jasper,filtro,teste);

JasperViewer.viewReport(print,false);

} catch (Exception e) {

JOptionPane.showMessageDialog(null, “Erro ao Imprimir Recibo !” +e);

}
}
Criado 9 de junho de 2017
Ultima resposta 9 de jun. de 2017
Respostas 18
Participantes 5