[RESOLVIDO]IReport

33 respostas
fabricioempresa

Bom pessoal tenho uma Jtable com dados e gostaria de passar esses dados para o IReport alguém tem alguma idéia?

33 Respostas

TheKill

Pode criar um objeto, popular ele com os dados da JTable e enviar uma JCollection para o iReport

fabricioempresa

Bah vlw pela dica mas tu sabe me dizer como posso fazer isso nunca trabalhei com Ireport???

O meu problema é como criar um campo dentro do Jasper (o tipo dele).
Desde já agradeço pela sua atenção.

TheKill

Tem vários tutoriais aqui no fórum na sessão tutorial …

E também nos tópicos da galera… Estou bem ocupado, mas se pintar algum erro
eu tento ajuda-lo

fabricioempresa

Bom eu entendi o que você me propôs mas como trabalho com o JCollection que tido de dado ele é?

Valeu pelos esclarecimentos

TheKill

Collection são ArrayList<> com as informações dos teus objetos.
Pode ser qualquer coisa.
Exemplo:

ArrayList<Funcionario> listaFuncionario;
onde este contem TUDO de funcionario

fabricioempresa

Ah blz entao era mais ou menos isso que eu precisava vou testar aqui depois te do um toque.

fabricioempresa

Oh meu amigo quis são as biblioteca necessárias para eu usar este recurso do IReport

TheKill

as mesmas para qualquer relatório que for fazer…

Já postei em vários tópicos aqui do GUJ elas…
não lembro de cabeça, mas se procurar aki vai encontrar certinho :wink:

fabricioempresa

Eu coloquei as bibliotecas necessarias porem me apresenta esse erro

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: net/sf/ja
sperreports/engine/JRException
        at br.com.nautec.flowtracklite.Application.startup(Application.java:71)
        at org.jdesktop.application.Application$1.run(Application.java:171)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRExcep
tion
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        ... 10 more
ERROR [Prototyper] (Prototyper.java:105) - Prototype
org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another
 process". Possible solutions: close all other connection(s); use the server mod
e; SQL statement:
null/129a7e4f160618e71edff7525b8dd3aff62b356e8a8 [90020-137]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
        at org.h2.message.DbException.get(DbException.java:167)
        at org.h2.message.DbException.get(DbException.java:144)
        at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:436)
        at org.h2.store.FileLock.lockFile(FileLock.java:331)
        at org.h2.store.FileLock.lock(FileLock.java:129)
        at org.h2.engine.Database.open(Database.java:523)
        at org.h2.engine.Database.openDatabase(Database.java:207)
        at org.h2.engine.Database.<init>(Database.java:202)
        at org.h2.engine.Engine.openSession(Engine.java:56)
        at org.h2.engine.Engine.openSession(Engine.java:146)
        at org.h2.engine.Engine.getSession(Engine.java:125)
        at org.h2.engine.Session.createSession(Session.java:119)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.jav
a:239)
        at org.h2.engine.SessionRemote.createSession(SessionRemote.java:217)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95)
        at org.h2.Driver.connect(Driver.java:58)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(D
efaultConnectionBuilder.java:39)
        at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java
:159)
        at org.logicalcobwebs.proxool.Prototyper.sweep(Prototyper.java:102)
        at org.logicalcobwebs.proxool.PrototyperThread.run(PrototyperThread.java
:44)

Tem alguma idéia do que pode ser

Valeu pela atenção.

TheKill

org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mod e;

Provavelmente vc colocou conexao ao banco de dados no Relatório, e esta abrindo a conexao na Aplicação também.
A mensagem diz o Database já esta em uso, ou Fechado por outro processo.

fabricioempresa

Daew cara o seguinte eu primeiramente estou fazendo um simples exemplo com o ireport sem consulta ao banco sem nada sendo assim se conseguir passar os parametros corretamente depois faço com que o meu relatório receba um colection.

Como eu fiz
1º Gerei um jasper com os os parametros $P{DATAHORA},$P{VOLUME},$P{DESCRICAO},$P{PORTA};

E em seguida na minha aplicação fiz o seguinte código

@Action void Gerar(){
        try {
            Map parametros = new HashMap();
            parametros.put("DATAHORA", 1);
            parametros.put("VOLUME", 2);
            parametros.put("DESCRICAO", 3);
            parametros.put("PORTA", 4);
            InputStream is = this.getClass().getClassLoader().getResourceAsStream("report2.jasper"); //pega o .jasper (em resumo).
            JasperPrint jp = JasperFillManager.fillReport(is, parametros); //como havia falado, recebe os parâmetros, e o InputStream.
            JasperViewer viewer = new JasperViewer(jp); //recebe um JasperPrint como parâmetro.
            viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException ex) {
            Logger.getLogger(ApplicationView.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

Isso está certo???

Coloquei na minha aplicação e ele gerou o seguinte erro

Caused by: java.lang.IllegalAccessException: Class org.jdesktop.application.Appl
icationAction can not access a member of class br.com.nautec.flowtracklite.view.
ApplicationView with modifiers ""

OBrigado mesmo pela ajuda

TheKill
InputStream caminhoJasper = getClass().getResourceAsStream(
				"report2.jasper");
		ArrayList<String> numPaginas = new ArrayList<String>();
		numPaginas.add("");
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
				numPaginas);
		try {
			JasperPrint jp = JasperFillManager
			.fillReport(caminhoJasper, hm, ds);
			JasperViewer.viewReport(jp, false);
		} catch (JRException e) {
			e.printStackTrace();
		}

PS.: hm é o seu parametros
Tenta isso, já deu uma pesquisada no Fórum como mensionei?
De boa, tem muito material de como começar a utilizar o iReport… é bom dar uma estudada no material do Fórum…
Valeu

fabricioempresa

Valeu mesmo testo aqui vejo os resultados

Quanto as pesquisa continuarei pesquisando (estou desde ontem dazendo isso)

Inclusive vi vários posts teus por isso continuo a te perguntar pois pelo que vi voce domina essa ferramenta

Valeu pela ajuda

fabricioempresa

Bom já estou conseguindo passar os parametros porem não estou conseguindo fazer com que os registros aparecem dentro do ireport vocÊ tem alguma idéia do que pode ser isso???

TheKill

Não sei dizer…

Pode ser várias coisas…
Verificou se realmente esta passando alguma informação para o relatório ???

fabricioempresa

Ele nãp apresentou nenhum tipo de erro

Além de antes disso ele me detectar erro de tipo de variável.

Assim que eu corrigi ele veio a funcionar porem não mostra nada nos relatórios vlw pela ajuda

TheKill

E no java? Coloque alguns System.out.print, nos teus objetos. e verifique se estão preenchidos

fabricioempresa

Cara seguinte as informações aparecem no View do Ireport porém quando as chamo não aparece nada tem alguma do que pode ser?

TheKill

vc colocou sql no Query do relatório?

então não sei, eu não faço isso. Particularmente NAO GOSTO…
De uma pesquisada aqui no fórum, tem alguns usuarios que fazem assim
e talvez possam te ajudar

fabricioempresa

Cara seguinte já está funcionando certinho agora falta o mais simples

Fazer o JCollection,

Dúvidas:

1º No meu IREPORT o campo que irá receber os dados ele será collection ou String?
2º Irei passar um JRCollection e como ele passará para o próximo registro?

Valeu pela ajuda

TheKill

no Ireport vai ser apenas Fields, do tipo que vc colocar na Collection.

Imagine Funcionario:

String nome;
int idade;



no collection:

nome = pedro;

idade = 18;

no iReport;

$F{nome}
$F{idade}

fabricioempresa

Seguinte cara conseguir passar um colecction so que o problema mora na apresentaocao pois tenho dentro do meu
Jtable o seguinte

/////////////////////////////////
//pulso//address/port//vol//
//1 //1 /1 /1 ///
//2 //2 /2 /2///
//3 //3 /3 /3///
//4 //4 /4 /4///
//////////////////////////////

E no meu Ireport apresenta da seguinte maneira

/////////////////////////////////////////////
//pulso//address/port//vol//////////////
//1,2,3,4 //1,2,3,4/1,2,3,4 /1,2,3,4 ///
///////////////////////////////////////////

Valeu pela dica e pela compreensão.

TheKill

E como ta seu relatorio?

fabricioempresa

Esta assim ele colocou tudo na mesma linha
/////////////////////////////////////////////
//pulso//address/port//vol//////////////
//1,2,3,4 //1,2,3,4/1,2,3,4 /1,2,3,4 ///
///////////////////////////////////////////

Valeu pela compreensao

TheKill

Eu perguntei como está montado seu relatório,
e não como saiu o resultado…

esta:

$F{pulso} $F{address} $F{port} $F{vol}

??

fabricioempresa

É esta assim mesmo

TheKill

entao é a sua collection que tá errada

fabricioempresa
Estou tentando de duas formas uma delas é a seguinte
@Action
    public void Gerar() throws JRException {
        JasperPrint jp = null;
        TableModel model = new ReportTableModel();
        
        JRTableModelDataSource ds = new JRTableModelDataSource(model);
        //JasperFillManager.fillReport(report, map, ds);

        Map parametros = new HashMap();
        Map registro = new HashMap();
        System.out.println("this.reportTable.getRowCount() = " + this.reportTable.getRowCount());
        for (int j = 0; j < this.reportTable.getRowCount(); j++) {
            String date = this.reportTable.getValueAt(j, 0).toString();
            System.out.println("dt = " + date);
            String vol = this.reportTable.getValueAt(j, 1).toString();
            System.out.println("vol = " + vol);
            String desc = this.reportTable.getValueAt(j, 2).toString();
            System.out.println("desc = " + desc);
            String port = this.reportTable.getValueAt(j, 3).toString();
            System.out.println("port = " + port);
            registro.put("data", date);
            registro.put("desc", desc);
            registro.put("vol", vol);
            registro.put("port", port);
            parametros.putAll(registro);
        }
        System.out.println("parametros.size() = " + parametros.size());
        try {
            jp = JasperFillManager.fillReport("report4.jasper", parametros, ds);
            JasperViewer.viewReport(jp, false);
         } catch (JRException e) {
            e.printStackTrace();
        }
    }

Sendo que no meu ireport todos os campos estao como Strings porem desse jeito ele só retorna o último registro da minha tabela.(apenas um linha),porém minha JTable tem 23

Valeu

TheKill
fabricioempresa:
Estou tentando de duas formas uma delas é a seguinte
@Action
    public void Gerar() throws JRException {
        JasperPrint jp = null;
        TableModel model = new ReportTableModel();
        
        JRTableModelDataSource ds = new JRTableModelDataSource(model);
        //JasperFillManager.fillReport(report, map, ds);

        Map parametros = new HashMap();
        Map registro = new HashMap();
        System.out.println("this.reportTable.getRowCount() = " + this.reportTable.getRowCount());
        for (int j = 0; j < this.reportTable.getRowCount(); j++) {
            String date = this.reportTable.getValueAt(j, 0).toString();
            System.out.println("dt = " + date);
            String vol = this.reportTable.getValueAt(j, 1).toString();
            System.out.println("vol = " + vol);
            String desc = this.reportTable.getValueAt(j, 2).toString();
            System.out.println("desc = " + desc);
            String port = this.reportTable.getValueAt(j, 3).toString();
            System.out.println("port = " + port);
            registro.put("data", date);
            registro.put("desc", desc);
            registro.put("vol", vol);
            registro.put("port", port);
            parametros.putAll(registro);
        }
        System.out.println("parametros.size() = " + parametros.size());
        try {
            jp = JasperFillManager.fillReport("report4.jasper", parametros, ds);
            JasperViewer.viewReport(jp, false);
         } catch (JRException e) {
            e.printStackTrace();
        }
    }

Sendo que no meu ireport todos os campos estao como Strings porem desse jeito ele só retorna o último registro da minha tabela.(apenas um linha),porém minha JTable tem 23

Valeu

Cade o New HashMap dentro do for?
vc ta sobrescrevendo o conteudo da mesma linha Sempre.
por isto retorna sempre a ultima linha.

Amigo.. tente dar uma analisada com seus System.out.Printlns...
Vai evitar bastante coisas deste genero, vou trabalhar..
Tenho bastante serviço para fazer.

Att. Jonas

fabricioempresa

Funcionou a solução está em http://www.guj.com.br/posts/list/211879.java#1078058

TheKill

é isso ai.

fabricioempresa

Caro TheKill acabei esquecendo de te agradecer valeu mesmo pela ajuda.

ABração

TheKill

relaxa. ta de boa…

parabens :slight_smile:

Criado 5 de julho de 2010
Ultima resposta 8 de jul. de 2010
Respostas 33
Participantes 2