Subrelatorio nao aparece

12 respostas
marciosouzajunior

Pessoal, ja pesquisei aqui no forum e vi que muita gente passou por isso mas tentei as soluções dadas e também não dá certo.
Já tentei setar a opção "when no data" para "all sections..." também não adiantou.
O caminho relativo ta tudo certinho. Consegui fazer a passagem de parametro do relatorio master pro sub.
Quando eu mando visualizar no iReport aparece tudo certinho. Sò que quando chamo pelo eclipse só o subrelatorio nao aparece.
Vejam meu codigo:

JasperReport relatorio = null;
					JasperDesign desenho;
					File rel = new File("relatorios");
					
					try {
						desenho = JRXmlLoader.load(rel.getPath() + "/Pedido.jrxml");
						relatorio = JasperCompileManager.compileReport( desenho );
		
					} catch (JRException e2) {
						e2.printStackTrace();
					}
			   
					
					ResultSet rs = null;
					try {
							Connection con = Conexao.getConnection();
							Statement stm = con.createStatement();
							String query = "select * from pesquisa_pedido;"; //depois passo o numero certo
							rs = stm.executeQuery( query );
					} catch (SQLException e1) {
						e1.printStackTrace();
					}

					JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
			   
					Map parametros = new HashMap();
					parametros.put("NumeroPedido", 1);
					parametros.put("SUBREPORT_DIR" , rel.getAbsolutePath() + "\\");
					
					JasperPrint impressao = null;
					
					try {
						impressao = JasperFillManager.fillReport(relatorio , parametros, jrRS);
					} catch (JRException e1) {
						e1.printStackTrace();
					}
			   
					JasperViewer viewer = new JasperViewer( impressao , true );
					viewer.show();

Lá no meu relatorio eu recebo esse NumeroPedido e passo ele pro subrelatorio. O subrelatorio pesquisa em outra tabela do banco, será que é isso?
Por favor quem souber solucionar ficarei mto agradecido!

Ate mais

12 Respostas

Gerva

mas quando voce vizualisa no IReport, o valor que voce passa como default é o mesmo que ele recebe quando é chamado pelo eclipse??

marciosouzajunior

Sim, quando eu testo ele no iReport eu deixo marcado aquela opção para ele me perguntar qual valor. E quando testo ele na aplicação eu passo o valor assim:

Gerva

ja aconteceu isso comigo umas 3 vezes

verifique o seguinte:
-Se com os valores que estão sendo recebidos o select do subrelatorio retorna realmente um valor
-Se o tamanho do subrelatorio não é maior do que o tamanho disponibilizado para ele no relatorio principal
-Se a banda que o subrelatorio se encontra realmente é chamada

(não tem problema nenhum o subrelatorio pesquisar em outra tabela)

marciosouzajunior

O negócio ta tenso viu…

-Se com os valores que estão sendo recebidos o select do subrelatorio retorna realmente um valor
Eu testando somente o subrelatorio, pedindo pra digitar o parametro, retorna alguns valores.

-Se o tamanho do subrelatorio não é maior do que o tamanho disponibilizado para ele no relatorio principal
Sim, tem tamanho suficiente para todos os registros. Quando testo no iReport aparece tudo numa boa.

-Se a banda que o subrelatorio se encontra realmente é chamada
Pelo menos no iReport é. Mas quando chamo pelo programa, conforme o código que ta aí em cima,
não aparece nada! Mesmo q nao tivesse nenhum resultado era pra mostrar o cabeçalho certo?

Qual é a banda certa pra colocar os subreports? Eu tenho q colocar 2 aqui. To começando a pensar
que o problema está na aplicação, pq no iReport aparece tudo certinho…

marciosouzajunior

Como faço pra ter certeza q a banda será exibida?

marciosouzajunior

Olha, a propriedade Connection Type deve ta em Use datasource expression?? Acho q tem alguma coisa a ver com isso.
Pq eu li algumas coisas aqui e testei uma expressao a new net.sf.jasperreports.engine.JREmptyDataSource()
e o subrelatorio apareceu mas com todos valores null.
Deve ser pq no programa to passando um jrresultset e no ireport os subs nao tao lendo isso.

Gerva

beeeeem provavel, para ter certeza que a banda foi exibida é só voce colocar um texto estatico nela e ver se ele é imprimido mas já que voce falou que ele estava recebendo null…

infelizmente sobre jrresultset eu n posso ajudar pq nunk gerei jaspers atraves deles :confused:

marciosouzajunior

Como q vc gera os seus? Vc usa subreports com consulta a outras tabelas??
Vou procurar algo sobre isso aqui mas se tiver alguma dica eu aceito.

Gerva

eu monto a query no proprio IReport, e sim no subrelatorio posso montar outra query
o único problema é que ele só execua select’s (e 1 por relatorio/subrelatorio)

qual a sua versão do IReport? (não sei nas antigas mas nas novas versões é bem simples trabalhar com isso)

não posso falar mal do modo como voce manda as informações pq nunca fiz assim, mas pela quantidade de reclamações que aparecem…

marciosouzajunior

Qual conection type vc seleciona quando clica no objeto do subreport?
Minha versão é a 3.7.4, acho q é mais nova.
Eu sempre trabalhei com visual basic + crystal reports e fazia assim, passando uma string.
Qual seria o melhor jeito entao?

marciosouzajunior

Gerva, consegui resolver aqui cara! Fiz o seguinte: Criei outro resultset para o subrelatorio. Passei ele pro JRResultSetDataSource:

Passei ele como parametro:

La nas propriedades do sub coloquei use a datasource expression e usei a expressao $P{SUBREPORT1_DS}

Tava quase desistindo e querendo tentar no crystal reports!
Agradeço a paciência aí e espero que meu erro possa evitar que outros também tenham dores de cabeça.

Valeu!

Gerva

que bom que deu certo :slight_smile:
só pra consta no meu conection expression eu uso $P{REPORT_CONNECTION} (que é a conexão que mando para o relatorio principal)

Criado 2 de setembro de 2010
Ultima resposta 3 de set. de 2010
Respostas 12
Participantes 2