Duvida sobre relatorio

24 respostas
M

ola pessoal

tenho uma classe de cadastro de cliente com uns 12 textfield, uns 5 formattedfield, entre outros …

gostaria de criar um relatorio com todos esses dados que o usuario vai digitar, inclusive com as mascaras …

tenho o ireport instalado na maquina, como faco pra criar esse relatorio com os dados que foram digitados nos textfield´s e formatedfiel´s ??

obrigado

24 Respostas

Romeo

Não tenho certeza, mas só consigo passar pro jasper se eu pegar os dados pelo banco de bados…, direto dos campos num da…

M

isso eu sei + ou - …

faz um select, nao eh ???

mas preciso dos dados digitados no formulario mesmo …

Romeo

Então, é q eu acho q é caracteristica do jasper, ele precisa de um resultSet para preencher o relatório, não tem jeito. Vc utiliza banco de dados na sua aplicação?

M

sim, postgres

estou criando um sistema em swing que acessa o postgres

Romeo

Bom, então primeiro cria uma tabela nele com os campos q vc precisa e joga todos os textfields nele.

Depois cria o relatório e faz a query (select * from suaTabela)
Manda pro clipboard e puxa todos os campos pra dentro do relatório e arruma ele do seu jeito...

No programa...

try {
			Connection conexao = DriverManager.getConnection(Inicio.url, Inicio.usuario, Inicio.senha);
			PreparedStatement sql = conexao.prepareStatement("SELECT * from suaTabela");
			
			ResultSet rs = sql.executeQuery();
			
			/* implementação da interface JRDataSource para DataSource ResultSet */
			JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

			/* HashMap de parametros utilizados no relatório. Sempre instanciados */
			Map parameters = new HashMap();
				
			/* Preenche o relatório com os dados. Gera o arquivo *.jrxml */
			JasperPrint impressao = JasperFillManager.fillReport( relatório.jasper", parameters, jrRS );
			
			
			/* Visualiza o relatório em formato PDF */
			JasperViewer viewer = new JasperViewer(impressao, false);
			  viewer.setVisible(true);
		}
		catch (SQLException e) {
			JOptionPane.showMessageDialog(null,"Não foi possível conectar com o banco");
			return;
		}
		catch (JRException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,"Não foi possível gerar o relatório\n" +e);
			return;
		}

Depois se for a sua necessidade vc apaga esse registro...

M

ok vou verificar aqui …

e como faco pra passar um parametro pro relatorio, porque meu select eh pelo cpf do cliente, ou seja, so aparece o cadastro do cliente que tenho o cpf igual ao que foi digitado …

select * from cliente where cpf = variavel_digitada

como faco pra passar essa variavel_digitada …

essa variavel_digitada o usuario vai digitar num textfield …

Romeo

PreparedStatement sql = conexao.prepareStatement(" select * from cliente where cpf = ?"); sql.setString(1, variavel_digitada); //Ta setString, se vc transformou em inteiro é setInt ResultSet rs = sql.executeQuery();

A

Os dados não precisam, necessariamente, vir de um banco de dados para alimentar um relatório feito no ireport.

Eles podem vir de uma collection, de um arquivo e até mesmo de um JavaBean.

Tudo depende do data source que você estabelecer.

Crie um Bean, com os devidos getters e setters dos atributos, por exemplo Pessoa.

Crie um ArrayList e adicione várias objetos do tipo Pessoa nessa lista.

Aí o resto é código… dê uma olhada:

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaPessoas);
    JasperPrint impressao = new JasperPrint();
    impressao = JasperFillManager.fillReport("caminho_do_seu_jasper", parametros, ds);
    JasperViewer.viewReport(impressao);

Espero que tenha ajudado!!!

M

e na query do meu relatorio, no ireport, o que devo colocar …

como faco pra, no relatorio mesmo, receber a variavel cpf ???

A

Na query do relatório, se for usar o datasource que te passei, não coloca nada!!!

Para o relacionamento os Fields dos relatórios devem ter o mesmo nome dos atributos de sua Classe.

von.juliano

Olha só, vc tb pode usar uma Collection como database:
http://br.geocities.com/robertofurutani/java/Tutorial_JasperReports/

M

e como eu faco pra colocar uma mascara num determinado campo, por exemplo, de cep, de cnpj, de cfp ???

A

No próprio I-report, quando você coloca um novo field ou parameter, nas propriedades tem um esquema que chama “pattern” se não me engano!!!

Estou sem a ferramenta aqui pra testar.

M

ok, achei …

ele tem algumas mascaras de default, como moeda, data, hora, mas nao tem de cep, cpf, e nao consegui criar uma …

tentei colocar uma mascara, mas na visualização do relatorio nao veio …

M

criei a seguinte classe :

import javax.swing.*;
import java.sql.*;
import java.util.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;

public class chama_relatorio {
	
	public chama_relatorio() {

		try {
 			Connection conexao = DriverManager.getConnection( "jdbc:postgresql://10.1.1.14:5432/coren","postgres","teste" );
 			PreparedStatement sql = conexao.prepareStatement(" select * from coren191 ; "); // where cnpj = '"+codigo+"' ; ");
 			
 			ResultSet rs = sql.executeQuery();
 			
 			JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
 
 			Map parameters = new HashMap();
 				
 			JasperPrint impressao = JasperFillManager.fillReport( "solicita_crt.jasper" , parameters , jrRS );
 			
 			JasperViewer viewer = new JasperViewer(impressao, false);
 			viewer.setVisible(true);
 		}
 		catch (SQLException e) {
 			JOptionPane.showMessageDialog(null,"Não foi possível conectar com o banco");
 			return;
 		}
 		catch (JRException e) {
 			e.printStackTrace();
 			JOptionPane.showMessageDialog(null,"Não foi possível gerar o relatório\n" +e);
 			return;
 		}
	}
}

no meu formulario, eu faco assim :

public void actionPerformed(ActionEvent e){
		if (e.getSource()==jButton3) {
			String cgc1 = "" ;
			cgc1 = jFormattedTextField1.getText();
			cgc1 = cgc1.replaceAll("[._/-]","");
			if ( cgc1.equals("") ) {
				JOptionPane.showMessageDialog(null, "CNPJ digitado Inválido !" ,"Operador",JOptionPane.ERROR_MESSAGE);
				return;
			}
			new chama_relatorio();
			//JOptionPane.showMessageDialog(null,"Relatório criado com Sucesso !","Operador",JOptionPane.INFORMATION_MESSAGE);
		}
}

mas ele da o erro que nao conseguiu conectar ao banco de dados …
o que pode ser ??

M

ja consegui resolver o problema da conexao com o banco de dados …

mas a mascara ainda nao …

tenho no campo cep alguns registros que foram cadastrados como 99.999-999 e registros com 99999999

o que posso fazer neste caso ??

Romeo

Ai fica dificil, vc deveria ter controlado o dado antes de salva-lo no banco, tentando manter um padrão…

M

e para campos grandes, do tipo text …

tenho um campo de tamanho 4096, como eu dimensiono ele na pagina do relatorio, ja coloquei em landscape e mesmo assim nao coube, preciso que quando acabar a pagina va pra linha de baixo …

A

Propriedade Stretch with overflow!!!

M

exatamente, na mosca …

muito obrigado

a proposito, vc sabe usar o jboleto ?? nao to conseguindo …

senao vou criar o boleto no “braço” mesmo …

A

Nunca precisei usar não cara…

Mas vejo, direto e reto, o pessoal comentando sobre a utilização dele, aqui no fórum mesmo…

Acredito que não seja difícil não…

Dá uma procurada em “busca”…

Abraços…

M

eh, ja procurei …

ate criei um topico, mas ninguem respondeu …

nao consegui implantar ainda …

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

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

M

e como faco pra colocar a mascara no campo …

de cep, cpf, cnpj ??

M

mas uma duvida …

no meu seect eu chamo dois endereco, tipo :

select cliente.endereco , fornecedor.endereco from ....

tenho o campo endereco para a tabela forncedor e cliente, mas ele mostra no relatorio apenas o endereco do primeiro, como faco pra diferenciar os dois sem ter que mexer nas tabelas …

obrigado

Criado 20 de março de 2007
Ultima resposta 23 de mar. de 2007
Respostas 24
Participantes 4