iReport, entendendo-o [RESOLVIDO]

31 respostas
G

Gente to fazendo, ou melhor, tentando fazer uns relatórios para um sistema, eu jah consegui criar o relatório e tal bonitinho, puxando os dados com um SELECT do banco, mas eu queria saber como eu vou fazer isso para integrar ao meu sistema, tipo quando eu clicar no “Gerar” ele acionar o evento e criar o relatório na hora, ou já puxar um pronto. Já importei o .JAR do iReport, tenho o plugin instalado para NetBeans 6.8, acho q a versão do plugin eh 3.7.3, Sistema desktop!

toda a ajuda eh bem vinda :wink:

vlw :smiley:

Codigo que eu peguei de outro topico, mas naum ajudou mto.

package Testes;

import Classes.DAO.DAOPai;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class ChamaRel extends DAOPai {

    public ChamaRel(){
        super();
    }

    public void geraRel() throws SQLException, JRException{
        super.rs = super.stm.executeQuery("SELECT * FROM fn_class_grupo");
        JRResultSetDataSource jrs = new JRResultSetDataSource(rs);
        HashMap map = new HashMap();
        JasperPrint imprimeRel = JasperFillManager.fillReport("Relatorio.jasper", map, jrs);
        JasperExportManager.exportReportToPdfFile(imprimeRel, "Arquivo");
        JasperViewer view = new JasperViewer(imprimeRel, true);
        view.setVisible(true);
    }
}

31 Respostas

T

Qual o problema?

Seja mais claro no seu problema, para que alguem possa tentar ajuda-lo…
Att. Jonas

G

Assim, eu consigo criar um relatório, mas naum sei como chamá-lo!
E também queria saber se posso criar na hora que executar o evento do botão ou tenho q deixa-lo previamente criado!

T

o exemplo de codigo acima faz isso…

é só usar o trecho de código que vc mesmo postou…

G

aquilo ta gerando erro:

stack:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:60)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:536)
        at Testes.ChamaRel.geraRel(ChamaRel.java:23)
        at Classes.Main.main(Main.java:24)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 4 more

Sabe me dizer como arrumar?

T

vc nao adicionou a library do commons-logging ao projeto…

vai achar ele no diretorio do iReport… procura la que vc acha :wink:

G

Vou dar uma olhada!

G

eh o arquivo xalan.JAR ?

Tentei importando esse Xalan, mas naum deu!

G

Amigo encontrei o .JAR, mas ele ta pedindo outro que naum to achando aque!

o nome eh ReferenceMap

T

nao existe isso.

o jar nao é xalan. eu falei commons-logging,
vc ta esquecendo de adicionar os jars padrões do iReport…

da uma olhada ai no forum, já passei algumas vezes a lista…

G

Acho q importei tudo q é necessário, mas agora deu um problema que ele naum ta encontrando uma coluna da minha tabela, será q eh no relatório ou no BD?

ERRO:

net.sf.jasperreports.engine.JRException: Unknown column name : grupo
        at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:355)
        at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:112)
        at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:823)
        at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:787)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1478)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:125)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540)
        at Testes.ChamaRel.geraRel(ChamaRel.java:23)
        at Classes.Main.main(Main.java:24)

vlw pela força :wink:

T

no sql ele ta procurando um id chamado grupo.

existe esse ID ?

se existe, no relatório existe um field chamado grupo?

bom é isso, agora preciso trabalhar… boa sorte

G

Vlw pela força TheKill vou continuar pesquisando aqui!

G

Vlw mesmo TheKill consegui puxar um relatório já criado quando executei o programa!

Agora vou ver se consigo criar o relatório no braço, tipo, não deixar ele pronto e chamar na hora entende! Se souberem algo que possa me ajudar com isso, seria legal :wink:

vlw a todos ai q deram uma força!

G

Gente a minha duvida agora na realidade são duas:

1ª boolean a = Tem como eu criar o relatório (arquivo .jasper) no momento que o usuário clicar no botão?  usando código sem a interface do iReport?

if(a){

aceitoMaterial = true;

}
2ª boolean b = Tem como eu colocar dentro do relatório criado no iReport campos com fórmulas que na hora que eu chamar esse relatório essas formulas consultem os dados no Banco e gerem a resposta atualizada?

if(b){

aceitoMaterial = true;

aceitoExemplos = true;

}

vlw :smiley:

T

simples.

tire tudo que for sql do relatório.

faça na aplicação… assim vai ter dados precisos.

G

Ta, não entendi direito.

Seguinte, pq no iReport tu vai indo nas etapas que ele te diz:

“agora escolha o layout”

“Agora escolha as tabelas”

“Agora defina grupos de ordenação”

entende, como vou fazer isso na mão?
Por isso perguntei se também naum tem como eu embutir contas no relatório que dai eu forçaria ele a manter os dados atualizados sempre!

T

esquece isso.

faça um relatorio em branco…
e coloque apenas os campos que vc quer que apareça…

e pronto, joga as informações do sistema para o relatório e tudo feito ;D

se não é isso, nao entendi. olha os exemplo mano… tem muita coisa no fórum

G

Talvez não tenha entendido é mais ou menos assim, tem alguns relatórios onde os campos serão resultados de formulas matematicas entende! Como eu irei fazer dai, e mais uma coisa, tipo quando eu crio o iReport ele pede uma Query dae eu faço la "SELECT … " tipo esses dados virão sempre atualizados ou seja o “SELECT” q eu mandei qdo criei o iReport não vai puxar os dados, criar o relatório e quando eu atualizar o banco não atualizar o relatório?

Desculpe se estou sendo meio confuso!
vlw pela força! :wink:

T

amigo, ja falei…

nao coloca nada de sql no relatório,
faz oque tive de sql no sistema e envia para o relatório
o resultSet populado… e essas formulas matematicas pode passar
através de HashMap para o relatório.

Esqueça as Query do relatório.
Faça um relatório em branco

G

Humm, vou tentar fazer assim
Acho q entendi!

G

Mais uma duvida, como eu vou organizar o relatório se eu soh jogar o ResultSet la dentro?

T

vc tem que criar os fields no relatório…

os fields que contem no seu resultSet…
veja bem estou falando de Fields…

E se for passar alguma formula matematica…
pode passar por hashMap…

isso eh feito com Parameter

G

Bah amigo fritei aqui! e jah ta cuase acabando meu expediente, amanha vou pensar nisso, mas de ql qr forma vlw pela ajuda!

Amanha volto pra guerra! :smiley:

vlw

T

Amigo,

veja o exemplo em anexo.
isso deve ser oque deve conter no seu relatorio iReport.
nada de querys SQL, nada.

G

Acho q te entendi amigo, eu tenho q colocar os campos referentes aos nomes das colunas no iReport Isso?

Vou tentar fazer um assim!

G

No caso a busca nos dados ao banco seria feita atraves do ResultSet passado quando se instancia um JRResultSetDataSource, mais ou menos assim?

rs = stm.executeQuery("SELECT grupo, descricao, criterio, classificacao FROM fn_grupo");
JRResultSetDataSource jrs = new JRResultSetDataSource(rs);

e depois eu mandaria criar um JasperPrint:

JasperPrint imprimeRel = JasperFillManager.fillReport("Relatoriotst.jasper", null, jrs);

e para visualizar:

JasperViewer view = new JasperViewer(imprimeRel, true);
view.setVisible(true);

mas ele gera a exeção JRValidationException, acho que porque os campos que eu coloquei no aquivo jrxml não são encontrados.

arquivo:

T

nao use o arquivo jasper
JasperPrint imprimeRel = JasperFillManager.fillReport(“Relatoriotst.jasper”, null, jrs);

use o arquivo .jrxml

G

Amigo tentei isso mas ele ta gerando esse erro:

net.sf.jasperreports.engine.JRException: Error loading object from file : D:\Pisom\JAVA-projetos\GRÁFICA\Projeto\Grafica\src\Testes\Relatoriotst.jrxml at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:101) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:536) at Testes.ChamaRel.geraRel(ChamaRel.java:21) at Classes.Main.main(Main.java:24) Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:53) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:96) ... 3 more

PS.: o endereço do arquivo .jrxml ta correto!

G

Tipo se eu coloco o arquivo .jasper ele roda, mas volta um relatório todo em branco! :open_mouth:

G

Agradeço a ajuda do TheKill q me ajudou muito e me proporcionou a colocar mais uma TAG [RESOLVIDO] no guj!

T

Opa, parabens…

é isso ai

Criado 8 de junho de 2010
Ultima resposta 9 de jun. de 2010
Respostas 31
Participantes 2