[RESOLVIDO] É possível criar Grid ou Table no IReport?

[color=darkblue]Queria saber se é possível criar Grid`s ou Table no IReport, se possível queria um Exemplo prático, estou com dificuldades em encontrar.

Quem puder ajudar desde já agradeço.[/color]

Você pode fazer um relatório em forma tabular sem problema nenhum.

[color=darkblue] Você conhece algum tutorial para seguir, teria algum exemplo apenas para iniciar ?[/color]

Aqui nesse site http://www.furutani.com.br/tag/ireport/ eu tenho alguns tutoriais.
Espero que te ajude.

[color=darkblue] Ajudou :smiley: , muito obrigado ![/color]

Bom galera estou tentando acessar este link para ver como se faz e não estou conseguindo… estou precisando criar uma tabela também.

[color=darkblue] No começo também tive problemas, mas de qualquer forma tente acessar esse aqui :[/color]

Tutorial JasperReports - IReports

Bom colegas será que isso seria uma solução para o meu problema?
O meu problema está neste tópico:

http://www.guj.com.br/posts/list/131145.java

Fico no aguardo, abraço e brigado pela atenção

[quote=Paezani]Bom colegas será que isso seria uma solução para o meu problema?
O meu problema está neste tópico:

http://www.guj.com.br/posts/list/131145.java

Fico no aguardo, abraço e brigado pela atenção[/quote]

[color=darkblue] Não sei isso resolveria seu problema pelo que vi, mas eu tentaria dessa forma, usei SubReport e funcionou perfeitamente, meu ralatório possui campos estatícos e uma tabela dentro de um Form, solucionei todos os meu problemas assim, se tiver alguma dúvida é só postar que eu respondo, se quiser deixo aqui um arquivo de teste para você com código[/color]

Então mas o problema está no detail que é preenchido de acordo com os dados de uma tabela do banco de dados que pode variar de acordo com o funcionário, um pode ter 5, outro 10…e queria ter um tamanho fixo independente do número de registros…
Se puder deixar um arquivo de teste seria talvez de melhor entendimento…

abraço

[quote=Paezani]Então mas o problema está no detail que é preenchido de acordo com os dados de uma tabela do banco de dados que pode variar de acordo com o funcionário, um pode ter 5, outro 10…e queria ter um tamanho fixo independente do número de registros…
Se puder deixar um arquivo de teste seria talvez de melhor entendimento…

abraço[/quote]

[color=darkblue]Eu não sei bem como você trabalha com os dados, mas vamos partir do ponto de que seus dados vêm de uma pesquisa, claro que a uma tabela no banco, logo você poderia simplesmente limitar a origem dos seus dados com um “limit” (MySql) ou um “Rownum” (Oracle).

Caso sua fonte de dados estaja em uma coleção qualquer, você poderia percorrer 5 registros dessa coleção inserindo em outra coleção a qual o Jasper recebe os dados.

Eu partiria desse princípio, se não é possível trabalhar no Jasper, limitaria isso na fonte.

[/color]

Bom, estou usando o MySql, mas acho que o limit não seria útil pois, limitaria o número de registros… Mas o que quero, é que se tenho 7 ou 5 ou 3 registros neste recibo, tenha 10 linhas por exemplo, na banda detail.
Pensei em incluir registros em branco para completar o numero de registros no banco, mas ocuparia espaço…sem dados …se tivesse 7 itens, incluiria 3 em branco…

[color=darkblue] Ao invés de criar os registros em branco no banco, não seria possível criar uma função simples, do tipo, [/color]

[color=darkblue] A função simplesmente iria completar a “List” que carrega os valores para o Jasper[/color]

Bom Metaleiro, eu faço a consulta na query no Ireport…Usando o:

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(completaCampos(list));  

Eu não teria que fazer a consulta na classe java? Eu nunca usei desta maneira… Se quiser eu posto a classe que gera o relatório…
Obrigado pela paciência e atenção

[color=darkblue] Sim você poderia fazer em uma classe ou simplemente criar um método para usar como postei.[/color]

Bom eu uso este relatório na WEB, chamo ele através da servlet abaixo, ele mostra o relatório em pdf:

import java.sql.*;
import java.text.DecimalFormat;
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

import beans.BDConnection;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

import java.util.Calendar;
import java.util.Map; 
import java.util.HashMap; 

import java.sql.*; 

public class rRecibo extends HttpServlet
{ 
 boolean status ;
 ResultSet rs ;
 String codFun, mesano;
 
 public void doGet (HttpServletRequest req , HttpServletResponse res)
        throws IOException, ServletException
 { 
  codFun = req.getParameter("codFunc");
  mesano = req.getParameter("mesano");
		   
  Conectar conexao = new Conectar();	 
  if(conexao.conecta(true))
 {
   ServletContext context = getServletContext();   
   byte[] bytes = null;   
   try {   
	   
         JasperReport relatorioJasper= null ;
         String pathJasper = getServletContext().getRealPath("/WEB-INF/reports/") + "/";
         String path = getServletContext().getRealPath("/"); 
         Map parametros = new HashMap();
	   
         relatorioJasper = (JasperReport)JRLoader.loadObject(context.getRealPath("/WEB-INF/reports/recibo.jasper"));   
	          
          parametros.put("mesano","'"+mesano+"'");//valor da competência
          parametros.put("codFun","'"+codFun+"'");//código do funcionário
  
         // direciona a saída do relatório para um stream   
         bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conexao.MinhaConexao);   
       } 
       catch (JRException e) {   
	       e.getMessage();  
       }   

       // envia o relatório em formato PDF para o browser   
       res.setContentType("application/pdf");
	      
	res.setContentLength(bytes.length);   
	ServletOutputStream ouputStream = res.getOutputStream();   
	ouputStream.write(bytes, 0, bytes.length);   
	ouputStream.flush();   
	ouputStream.close();    
	     
      try {
	conexao.MinhaConexao.close();
      } 
      catch (SQLException e) {
        e.printStackTrace();
      }
  }	 
  else
  {
   ServletOutputStream ouputStream2 = null;
   ouputStream2.print("Não foi possível se conectar com o banco de dados.");  
  }

 } 
 
}

Agora aonde entraria o JRBeanCollectionDataSource? Eu como te falei nunca mexi com este recurso… Se vc pudessse me ensinar passo a passo…
Fico no aguardo,

Obrigado pela atenção e paciência


[color=darkblue]Agora entendi a dificuldade, é que geralmente eu passo uma list, para facilitar qualquer tipo de validação, então o que eu faria realmente seria na query, limitar os números de registros e passar parâmetros com "" , assim você poderia controlar, query dá para fazer uma série de coisas, é só você usar algo do tipo : [/color]

[url=http://talibamartins.wordpress.com/2007/09/20/if-e-case-no-mysql/]IF e CASE no Mysql[/url]

[color=darkblue]Assim você pode controlar se o valor vier "null" você passar uma String "", limitando a 10 valores a partir do que já estiver correto [/color]

[color=darkblue]Agora entendi a dificuldade, é que geralmente eu passo uma list, para facilitar qualquer tipo de validação, então o que eu faria realmente seria na query, limitar os números de registros e passar parâmetros com “” , assim você poderia controlar, query dá para fazer uma série de coisas, é só você usar algo do tipo : [/color]

IF e CASE no Mysql

[color=darkblue]Assim você pode controlar se o valor vier “null” você passar uma String “”, limitando a 10 valores a partir do que já estiver correto [/color]

Bom pessoal consegui resolver o problema pela query do relatório, usando o union all e o limit no MySQL:

select
   func.nome,
   func.salario as sal,
   folhapgto.bruto,
   folhapgto.liq as liq
from folhapgto
inner join funcionarios as func on func.id = folhapgto.idfuncionario

Union All

select
'' as nome,
0.00 as sal,
0.00 as bruto, 
0.00 as liq
from funcionarios

order by func.nome
limit 12 

O limite 12 junto com union all retornará 12 registros , por exemplo, 5 com dados e 7 td em branco…
Talvez exista uma solução via relatório com as propriedades, mas valeu

Obrigado Metaleiro pela paciência

[color=darkblue]Ficou legal a solução [/color]

Blz Paezani…
Será q vc poderia postar a classe q vc citou?
Gostaria de entender melhor…
Tenho q criar um relatorio, mas estou patinando…

Desde de já Agradeço…
Vlw