Dúvidas com passagem de Paramentro do IReport

12 respostas
lais_freitas

Olá a todos
Estou desenvolvendo um relatório no IReport 3.5.0 para uma aplicação Desktop com NetBeans, no meu trabalho. O que eu gostária é o seguinte, que o usuário irá digitar no campo a letra e depois o inicio do Número e o final da contagem
Ex: A de 1 até 80…
Isso vai ser impresso em uma impressora de Etiquetas com 3 colunas no qual cada uma vai ter a sua numeração definida pela contagem que o usuário determinou de 1 até 80 Ex: etiqueta 1,2,3…
O Relatório está 80% pronto, pois o que está faltando é como fazer com que os campos que vão ser inseridos os numero no IReport vão fazer a contagem de 1,2,3,4… e assim por diante, pois é essa a minha GRANDE DÚVIDA!
“Obs.Estou passando por parametro cada campo para o Netbeans…”

Atenciosamente

Lais

12 Respostas

M

manda o parametro para uma variavel e incrementa ela conforme o select ou a pagina …

M

mandando por parametro cada campo ?
ou monta um select + facil e rapido
select * from tabela where campo = campo order by campo offset 1 limit 80
1 = numero inicial
80 = numero final

lais_freitas

Desde de já agradeço pela sua atenção…
Então eu não estou usando o banco de Dados… as informações vem atravez do que o usuário digita no Campo…
e é essa a Dúvida de como pegar o Valor do Campo_1 e o Campo_2 e incrementar
Exemplo do Campo:
Letra = A
Numero inicial =1
Numero final = 45

ele tem que fazer a contagem de 1 até 45 e mostrar em cada etiqueta os numeros…

S

Olá,

faça um loop for do valor inicial ao valor final e monte sua etiqueta.

Scanner scan = new Scanner(System.in);

		System.out.println("Digite o caracter Alfa : ");
		String letra = scan.nextLine();

		System.out.println("Digite o numero inicial da sequencia : ");
		String str_ini = scan.nextLine();

		System.out.println("Digite o numero final da sequencia : ");
		String str_fim = scan.nextLine();

		int seq_ini = 0;
		int seq_fim = 0;

		try {
			seq_ini = Integer.parseInt(str_ini);
			seq_fim = Integer.parseInt(str_fim);
		} catch (Exception e) {
			System.out.println("Erro ao realizar parserInt : " + e);
		}


		for (int i = seq_ini; i <= seq_fim; i++) {
                     //etiqueta[i] = letra + i;
		}

At+

Jailes

lais_freitas

Bom até ai entendi, mas como eu faço a chamada do relatório .jasper
segue o código para que vc possa entender.

private void BtnImprimirMouseClicked(java.awt.event.MouseEvent evt) {                                         

        if (TxtLetra.getText().trim().length() == 0 || TxtPrimNum.getText().trim().length() == 0 || TxtSegNum.getText().trim().length() == 0) {
                JOptionPane.showMessageDialog(null, "Os Campos são de preenchimento obrigatório!");
            } else {            
                Relatorio relatorio = null;
                HashMap parameters = new HashMap();
                parameters.put("letra", TxtLetra.getText());
                parameters.put("num_1", TxtPrimNum.getText());
                parameters.put("num_2", TxtSegNum.getText());
                parameters.put("num_3", TxtSegNum.getText());
                parameters.put("data", TxtData.getText());
                String path = "Tres_Colun.jasper";
        try {
            //}
            relatorio = new Relatorio(parameters, path);
        } catch (JRException ex) {
            Logger.getLogger(Etiqueta.class.getName()).log(Level.SEVERE, null, ex);
        }
             relatorio.exibirRelatorio();
            }
    }
Hebert_Freitas

Bom, vamos ver se consigo ajudar.

As chamadas ao relatório jasper como você disse são feitas a partir da classe JasperFillManager.

Percebi no seu código que você passa os parâmetros(variável parameters) e um caminho(variável path) que suponho que seja o caminho físico do arquivo .jasper.

A primeira coisa que deve ser feita é dar um fill no relatório:

Adicionei uma varíavel conn que representa a conexão com o banco de dados, o método fillReport aceita vários parâmetros, sugiro estudá-lo melhor.

Após fazer o fillReport você tem que exibir o relatório de alguma maneira, pode ser exportando para algum formato específico ou então usar uma espécie de visualizador do propio jasper:

JasperViewer viewer = new JasperViewer(impressao, false);
viewer.show();

no seu caso sugiro que coloque essa implementação em um método dentro da sua classe Relatorio e chameo na aplicação, por exemplo, na classe relatório crie o método mais ou menos assim:

public void gerarRelatorio(String path, Connection conn, Map parameters){
...
JasperPrint impressao = JasperFillManager.fillReport(path, parameters, conn);
JasperViewer viewer = new JasperViewer(impressao, false);
viewer.show();
...

}

e depois chame ele no seu código.

relatorio = new Relatorio();  
relatorio.gerarRelatorio(path, conn,parameters);
lais_freitas

Bom Hebert Freitas fiz conforme você informou,
mas ele não está aceitando os parametros conn e path…

lais_freitas

Se alguém tiver alguma idéia, pois estou sendo cobrada, por isso e necessito de uma certa URGÊNCIA…

Grata

Lais

Hebert_Freitas

Como assim não aceita,
procure no método fillReport a assinatura JasperFillManager.fillReport(sourceFileName, params, connection).

Mostre o código que você criou para gerar o relatório para podermos ajudar.

lais_freitas

Bom essa é aminha classe relatório…

package etiqueta_patologia;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

//package atualizacaocadastral;


/*
* @(#)Relatorio.java   1.0 28/04/2006
*
* Copyright 2006 Marcos Vinícius Soares. Todos os direitos reservados.
* [email removido]
*
*/

import java.sql.*;
import java.net.URL;
import java.util.HashMap;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.*;



/**
* Relatorio.java<br>
*
* <p>A classe Relatorio deve ser utilizada para emissão de relatórios. Após a
* criação de algum relatório é possível exibí-lo na tela, exportá-lo para um
* arquivo pdf/html ou enviá-lo direto para impressão.</p>
*
* <p>A classe manipula relatórios desenvolvidos utilizando-se a ferramenta
* iReport e utiliza a ferramenta JasperReports para emissão dos relatórios</p>
*
* @author  Marcos Vinícius Soares
*/
public class Relatorio {

    /** Representa o relatório gerado. */
    private JasperPrint jasperPrint_;
    //private Conexao db = new Conexao();



    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(Conexao db, HashMap parameters, URL localRelatorio) throws JRException, Exception{

        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);

            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, db.getConnection());

    } catch (JRException e) { throw e; }
    }



    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(Conexao db, HashMap parameters, String localRelatorio) throws JRException, Exception{

        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);

            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, db.getConnection());

    } catch (JRException e) { throw e; }
    }



    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  sql  Expressão SQL (SELECT...) a ser utilizada para preenchimento do relatório
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     * @throws  SQLException  Caso exista alguma divergência ou problema com
     * a Expressão SQL passada como parâmetro, uma exceção é gerada.
     */
    public Relatorio(Conexao db, String sql,
            HashMap parameters, URL localRelatorio) throws SQLException, JRException {

        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);

            // Resultado da consulta
            ResultSet rs = db.executeQuery(sql);

            // JRResultSetDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrRS);
            rs.close();
        }
        catch (SQLException e) { throw e; }
        catch (JRException e) { throw e; }
    }



    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  sql  Expressão SQL (SELECT...) a ser utilizada para preenchimento do relatório
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     * @throws  SQLException  Caso exista alguma divergência ou problema com
     * a Expressão SQL passada como parâmetro, uma exceção é gerada.
     */
    public Relatorio(Conexao db, String sql,
            HashMap parameters, String localRelatorio) throws SQLException, JRException {
        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);

            // Resultado da consulta
            ResultSet rs = db.executeQuery(sql);

            // JRResultSetDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrRS);

            rs.close();

        }
        catch (SQLException e) { throw e; }
        catch (JRException e) { throw e; }
    }



    /**
     * Cria um novo Relatorio.
     *
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(HashMap parameters, URL localRelatorio) throws JRException {

        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);

            // JREmptyDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet, que, neste caso, é vazio
            JREmptyDataSource jrEDS = new JREmptyDataSource();

            // Jasper Print representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrEDS);

        } catch (JRException e) { throw e; }
    }



    /**
     * Cria um novo Relatorio
     *
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(HashMap parameters, String localRelatorio) throws JRException {

        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);

            // JREmptyDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet, que, neste caso, é vazio
            JREmptyDataSource jrEDS = new JREmptyDataSource();

            // Jasper Print representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrEDS);

        } catch (JRException e) { throw e; }
    }



    /**
     * Exibe o relatório na tela.
     */
    public void exibirRelatorio() {
        // emite o relatório na tela
        // false indica que a aplicação não será finalizada caso o relatório seja fechado
        JasperViewer.viewReport(this.jasperPrint_, false);
    }



    /**
     * Grava o relatório em um arquivo de formato pdf.
     *
     * @param  caminhoDestino  Caminho onde o arquivo será gravado.
     */
    public void exportaParaPdf(String caminhoDestino) throws JRException {

        try {
            // Gera o arquivo PDF
            JasperExportManager.exportReportToPdfFile(this.jasperPrint_, caminhoDestino);
        } catch (JRException e) { throw e; }
    }



    /**
     * Grava o relatório em um arquivo de formato html.
     *
     * @param  caminhoDestino  Caminho onde o arquivo será gravado.
     */
    public void exportaParaHtml(String caminhoDestino) throws JRException {

        try {
            // Gera o arquivo PDF
            JasperExportManager.exportReportToHtmlFile(this.jasperPrint_, caminhoDestino);
        } catch (JRException e) { throw e; }
    }



    /**
     * Envia o relatório para impressão, exibindo uma caixa de dialogo de impressão ou não.
     *
     * @param  exibeCaixaDialogo  Boolean indicando se será exibida uma caixa de diálogo ou não.
     */
    public void imprimir(boolean exibeCaixaDialogo) throws JRException {

        try {
            // Imprime o relatório
            // o segundo parâmetro indica se existirá uma caixa de dialogo antes ou nao
            JasperPrintManager.printReport(this.jasperPrint_, exibeCaixaDialogo);
        } catch (JRException e) { throw e; }

    }
}
Hebert_Freitas

Bom vamos lá, sua classe tem vários construtores que pelo que percebi foram criados para aceitar várias situações na geração de relatórios, aparentemente ela funciona corretamente, mas não a testei.

Pelo seu código anterior percebi que você usou o construtor que aceita os parâmetros e caminho de relatório Relatorio(HashMap parameters, String localRelatorio):

try { //} relatorio = new Relatorio(parameters, path); } catch (JRException ex) { Logger.getLogger(Etiqueta.class.getName()).log(Level.SEVERE, null, ex); } relatorio.exibirRelatorio(); } }

Neste caso acho que você não busca nada do banco de dados,pois o relatório usa um EmptyDataSource.

Se você esta passando diretamente o arquivo do relatório compilado(.jasper) na variável path não existe a necessidade da seguinte linha no construtor do relatório:

você somente deveria usar isso se estivesse passando o caminho do relatório sem estar compilado(extensão .jrxml se estiver usando o Ireport).
comente esta linha e faça um teste.

lais_freitas

Não sei se eu deixei no inicio do Tópico que não uso o Banco de Dados, mas sim o que está sendo usado é somento o Layout do Relatório e as informações vem atravez das informações que usuário insere no sistema.
Vamos desde o início:
O Usuário vai inserir a Letra depois os números de 1 até 45 "Isso é um exemplo"
depois disso ele vai mandar imprimir as etiquetas em ordem conforme inserido as quantidades de números Ex: A1, A2, A3, A4 A5…até
A45…
Lembrando que ele insere os registros normalemente, mas a minha MAIOR DÚVIDA é como fazer com esses números sejam ordenados conforme expliquei assima…Deixando claro que não uso banco de dados e que as etiquetas são de 3 colunas

etiqueta1|etiqueta2|etiqueta3
A1 A2 A3
A4 A5 A6
A7 A8 A9
A10 A11 A12
…A45

é mais ou menos isso…
Desde de já fico GRATA PELA SUA ATENÇÃO :lol:

Criado 18 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 12
Participantes 4