Como Generar Reportes en Java
Pues aquí de nuevo dando lata con otra duda que tengo.
Lo que pasa es que tengo generara reportes desde una interfaz en java, es decir tengo tres jcombobox (nombre, ubicación y zona) y dependiendo de la selección de cada uno me debe generar el reporte correspondiente; los reportes ya los tengo(ya los realice con ireport).
Ejemplo:
Nombre ubicación zona reporte
Susana compras pb susana_compras. Jasper
susana comedor pa susana_comedor. Jasper
Pero el problema es que no se como mostrarlos que tengo que hacer.
Lo que pasa es que tengo generara reportes desde una interfaz en java, es decir tengo tres jcombobox (nombre, ubicación y zona) y dependiendo de la selección de cada uno me debe generar el reporte correspondiente; los reportes ya los tengo(ya los realice con ireport).
Ejemplo:
Nombre ubicación zona reporte
Susana compras pb susana_compras. Jasper
susana comedor pa susana_comedor. Jasper
Pero el problema es que no se como mostrarlos que tengo que hacer.
1 Respuesta
Respuesta de zeusnay
1
1
Bueno por lo que veo estas usando swing y jasperreports, jasper reports tiene un visualizador basado en swing para mostrar los reportes (esta es la forma más sencilla de mostrarlos).
Revisa la documentación de jasper reports trae muy buenos ejemplos de como hacerlo, básicamente tienes que crear una instancia del visualizador, decirle cual es el archivo del reporte, establecer el datasource y correr el reporte.
Revisa la documentación de jasper reports trae muy buenos ejemplos de como hacerlo, básicamente tienes que crear una instancia del visualizador, decirle cual es el archivo del reporte, establecer el datasource y correr el reporte.
Hola disculpa por no contestar.
No entendí muy bien tu respuesta, o más bien no se si la interprete bien, ¿pero creo que me estas sugiriendo que tengo que meter todas las direcciones de donde se encuentran mis reportes?
Pero si es así son muchos, por eso preguntaba si se podía hacer de otra forma.
Mando mi código mi pantalla.
package inventario;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.applet.Applet;
import javax.swing.border.TitledBorder;
import java.sql.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.fill.*;
import net.sf.jasperreports.view.*;
public class ReportesFrm extends JFrame{
JPanel jp;
JComboBox jcbClaveper,jcbZona,jcbUbi;
JTextField jtfPer,jtfUbi,jtfZona;
JButton jbSalir,jbReporte;
Personal per = new Personal();
ArrayList arrUbi=new ArrayList();
Ubicacion ubi = new Ubicacion();
ArrayList arrZona=new ArrayList();
Zona zona = new Zona();
public ReportesFrm(){
super("Rersguardos");
jp = new JPanel(null);
jcbClaveper = new JComboBox();
jcbClaveper.setBounds(10,20,90,20);
jp.add(jcbClaveper);
personal();
jcbClaveper.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
per = EquipoCtrl.buscar4((String)(jcbClaveper.getSelectedItem()));
if(per!=null){
jtfPer.setText(per.getnom_per());
ubicacion();
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfPer = new JTextField();
jtfPer.setBounds(110,20,350,20);
jtfPer.setEditable(false);
jp.add(jtfPer);
jcbUbi = new JComboBox();
jcbUbi.setBounds(10,60,90,20);
jp.add(jcbUbi);
jcbUbi.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
ubi = EquipoCtrl.buscar3((String)(jcbUbi.getSelectedItem()));
if(ubi!=null){
jtfUbi.setText(ubi.getnom_ubi());
zona();
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfUbi = new JTextField();
jtfUbi.setBounds(110,60,350,20);
jtfUbi.setEditable(false);
jp.add(jtfUbi);
jcbZona = new JComboBox();
jcbZona.setBounds(10,100,90,20);
jp.add(jcbZona);
jcbZona.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
zona = EquipoCtrl.buscar2((String)(jcbZona.getSelectedItem()));
if(zona!=null){
jtfZona.setText(zona.getnom_zona());
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfZona = new JTextField();
jtfZona.setBounds(110,100,350,20);
jtfZona.setEditable(false);
jp.add(jtfZona);
jbReporte=new JButton("Reportes");
jp.add(jbReporte);
jbReporte.setBounds(470,40,110,25);
jbReporte.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
Connection con=null;
JasperViewer jasperViewer;
try{
try{
con = Conexion.getConexion();
JasperReport jasperReport = (JasperReport)JRLoader.loadObject("Y ES AQUI EN DONDE TENGO LA DUDA POR QUE NO SE QUE PARAMETROS HAY QUE PASARLE PARA QUE MUESTRA EL REPORTE");
JasperPrint imprime = JRFiller.fillReport(jasperReport,null,con);
jasperViewer = new JasperViewer(imprime,false);
jasperViewer.show();
}catch(SQLException sqle){
System.out.println("No se logro la conexion " + sqle.getMessage());
}
}catch (JRException e){
e.printStackTrace();
}
}
});
jbSalir=new JButton("Salir", new ImageIcon("iconos/salir.gif"));
jp.add(jbSalir);
jbSalir.setBounds(470,80,110,25);
jbSalir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
dispose();
}
});
this.getContentPane().add(jp);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(600,170);
this.setLocation(80,80);
//this.setIconifiable(true);
//this.setClosable(true);
this.setVisible(true);
}
public void personal(){
jcbClaveper.removeAllItems();
ArrayList arrPer=PersonalCtrl.getPersonal();
for(int i=0;i<arrPer.size();i++){
jcbClaveper.addItem(arrPer.get(i));
}
}
public void ubicacion(){
jcbUbi.removeAllItems();
arrUbi=ReportesCtrl.getUbicacion(String.valueOf(jcbClaveper.getSelectedItem()));
for(int i=0;i<arrUbi.size();i++){
jcbUbi.addItem(arrUbi.get(i));
}
}
public void zona(){
jcbZona.removeAllItems();
arrZona=ReportesCtrl.getZona(String.valueOf(jcbUbi.getSelectedItem()));
for(int i=0;i<arrZona.size();i++){
jcbZona.addItem(arrZona.get(i));
}
}
public static void main(String[]arg){
new ReportesFrm();
}
}
No entendí muy bien tu respuesta, o más bien no se si la interprete bien, ¿pero creo que me estas sugiriendo que tengo que meter todas las direcciones de donde se encuentran mis reportes?
Pero si es así son muchos, por eso preguntaba si se podía hacer de otra forma.
Mando mi código mi pantalla.
package inventario;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.applet.Applet;
import javax.swing.border.TitledBorder;
import java.sql.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.fill.*;
import net.sf.jasperreports.view.*;
public class ReportesFrm extends JFrame{
JPanel jp;
JComboBox jcbClaveper,jcbZona,jcbUbi;
JTextField jtfPer,jtfUbi,jtfZona;
JButton jbSalir,jbReporte;
Personal per = new Personal();
ArrayList arrUbi=new ArrayList();
Ubicacion ubi = new Ubicacion();
ArrayList arrZona=new ArrayList();
Zona zona = new Zona();
public ReportesFrm(){
super("Rersguardos");
jp = new JPanel(null);
jcbClaveper = new JComboBox();
jcbClaveper.setBounds(10,20,90,20);
jp.add(jcbClaveper);
personal();
jcbClaveper.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
per = EquipoCtrl.buscar4((String)(jcbClaveper.getSelectedItem()));
if(per!=null){
jtfPer.setText(per.getnom_per());
ubicacion();
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfPer = new JTextField();
jtfPer.setBounds(110,20,350,20);
jtfPer.setEditable(false);
jp.add(jtfPer);
jcbUbi = new JComboBox();
jcbUbi.setBounds(10,60,90,20);
jp.add(jcbUbi);
jcbUbi.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
ubi = EquipoCtrl.buscar3((String)(jcbUbi.getSelectedItem()));
if(ubi!=null){
jtfUbi.setText(ubi.getnom_ubi());
zona();
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfUbi = new JTextField();
jtfUbi.setBounds(110,60,350,20);
jtfUbi.setEditable(false);
jp.add(jtfUbi);
jcbZona = new JComboBox();
jcbZona.setBounds(10,100,90,20);
jp.add(jcbZona);
jcbZona.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
zona = EquipoCtrl.buscar2((String)(jcbZona.getSelectedItem()));
if(zona!=null){
jtfZona.setText(zona.getnom_zona());
}else{
JOptionPane.showMessageDialog(jp,"ERROR");
}
}
});
jtfZona = new JTextField();
jtfZona.setBounds(110,100,350,20);
jtfZona.setEditable(false);
jp.add(jtfZona);
jbReporte=new JButton("Reportes");
jp.add(jbReporte);
jbReporte.setBounds(470,40,110,25);
jbReporte.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
Connection con=null;
JasperViewer jasperViewer;
try{
try{
con = Conexion.getConexion();
JasperReport jasperReport = (JasperReport)JRLoader.loadObject("Y ES AQUI EN DONDE TENGO LA DUDA POR QUE NO SE QUE PARAMETROS HAY QUE PASARLE PARA QUE MUESTRA EL REPORTE");
JasperPrint imprime = JRFiller.fillReport(jasperReport,null,con);
jasperViewer = new JasperViewer(imprime,false);
jasperViewer.show();
}catch(SQLException sqle){
System.out.println("No se logro la conexion " + sqle.getMessage());
}
}catch (JRException e){
e.printStackTrace();
}
}
});
jbSalir=new JButton("Salir", new ImageIcon("iconos/salir.gif"));
jp.add(jbSalir);
jbSalir.setBounds(470,80,110,25);
jbSalir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
dispose();
}
});
this.getContentPane().add(jp);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(600,170);
this.setLocation(80,80);
//this.setIconifiable(true);
//this.setClosable(true);
this.setVisible(true);
}
public void personal(){
jcbClaveper.removeAllItems();
ArrayList arrPer=PersonalCtrl.getPersonal();
for(int i=0;i<arrPer.size();i++){
jcbClaveper.addItem(arrPer.get(i));
}
}
public void ubicacion(){
jcbUbi.removeAllItems();
arrUbi=ReportesCtrl.getUbicacion(String.valueOf(jcbClaveper.getSelectedItem()));
for(int i=0;i<arrUbi.size();i++){
jcbUbi.addItem(arrUbi.get(i));
}
}
public void zona(){
jcbZona.removeAllItems();
arrZona=ReportesCtrl.getZona(String.valueOf(jcbUbi.getSelectedItem()));
for(int i=0;i<arrZona.size();i++){
jcbZona.addItem(arrZona.get(i));
}
}
public static void main(String[]arg){
new ReportesFrm();
}
}
A este objeto JRLoader. LoadObject le tienes que pasar el path donde se encuentra tu reporte (el xml), esto lo que hace es que compila tu reporte. Después de compilarlo ya puedes usarlo.
HOLA
Tengo otra duda más bien dudas
1. Si le paso la dirección como me sugieres, ¿este mismo reporte lo podre ocupar para las demás empleados que tengo?
2. ¿Oh le tendré que pasar a cada empleado la dirección?
3. Oh tengo que hacer un reporte general, dejándole los parámetros, ¿por así así decirlo abiertos (se puede hacer esto con ireport)?
Yo se que soy muy preguntona, pero aquí es donde siempre me ayudan
Gracias, por tomarte el tiempo de contestarme.
Tengo otra duda más bien dudas
1. Si le paso la dirección como me sugieres, ¿este mismo reporte lo podre ocupar para las demás empleados que tengo?
2. ¿Oh le tendré que pasar a cada empleado la dirección?
3. Oh tengo que hacer un reporte general, dejándole los parámetros, ¿por así así decirlo abiertos (se puede hacer esto con ireport)?
Yo se que soy muy preguntona, pero aquí es donde siempre me ayudan
Gracias, por tomarte el tiempo de contestarme.
En realidad la forma en como deberías hacer es como mencionaste en el punto 3, hacer un reporte general que pueda aceptar parámetros de forma dinámica para que tu reporte funcione en cualquier circunstancia.
Esto lo puedes hacer desde ireport, lo único que tienes que hacer es donde especificas los filtros (where si estas usando sql), usa variables en lugar de algún dato fijo.
A la hora de correr el reporte estas variables son pasadas, y el reporte es generado.
Esto lo puedes hacer desde ireport, lo único que tienes que hacer es donde especificas los filtros (where si estas usando sql), usa variables en lugar de algún dato fijo.
A la hora de correr el reporte estas variables son pasadas, y el reporte es generado.
Muchas gracias.
Esta es la consulta que he colocado en el reporte (ireport).
SELECT *
FROM equipo
WHERE nom_per Like ''
AND nom_ubi like ''
ORDER BY clv_equipo
Pero me podrías decir como puedo crear la variable.
Gracias!
Esta es la consulta que he colocado en el reporte (ireport).
SELECT *
FROM equipo
WHERE nom_per Like ''
AND nom_ubi like ''
ORDER BY clv_equipo
Pero me podrías decir como puedo crear la variable.
Gracias!
Las variables si más no recuerdo se llaman "parametros" dentro del contexto de jasper reports, en el iReport tienes esta opción de agregar parámetros y ahí tu defines cuantos y que tipo de parámetros lo que hace que tu consulta cambia a algo así:
SELECT *
FROM equipo
WHERE nom_per Like $P{nom}
AND nom_ubi like $P{nom2}
ORDER BY clv_equipo
Estos parámetros se los mandas a la hora de llamar tu reporte como un mapa, donde la clave es el nombre del parámetro (Esto es muy importante porque si las claves del mapa no corresponden con los nombres de los parámetros te mandara un error).
Te diría exactamente donde encontrar la parte de parámetros dentro del ireport, pero la verdad es que tengo un rato que no uso el ireport y no quiero darte una mala guía si no estoy seguro, pero de que existe esa opción existe.
SELECT *
FROM equipo
WHERE nom_per Like $P{nom}
AND nom_ubi like $P{nom2}
ORDER BY clv_equipo
Estos parámetros se los mandas a la hora de llamar tu reporte como un mapa, donde la clave es el nombre del parámetro (Esto es muy importante porque si las claves del mapa no corresponden con los nombres de los parámetros te mandara un error).
Te diría exactamente donde encontrar la parte de parámetros dentro del ireport, pero la verdad es que tengo un rato que no uso el ireport y no quiero darte una mala guía si no estoy seguro, pero de que existe esa opción existe.
Mucha gracias por la ayuda. Ya me quedo!
Bueno dejo el código por si a alguien le sirve
/*ESTE CODIGO LO COLOQUE EN IREPORT */
SELECT *
FROM equipo
WHERE nom_per like $P{p_nom_per}
AND nom_ubi like $P{p_nom_ubi}
AND nom_zona like $P{p_nom_zona}
ORDER BY clv_equipo
Para crear las variables aqui les dejo este link
http://avbravo.blogspot.com/2008/05/parametros-en-ireport.html
/*EL CODIGO EN JAVA QUEDA DE LA SIGUIENTE MANERA*/
JasperViewer jasperViewer;
Connection con = null;
Map<String, String> parametros = new HashMap<String, String>();
parametros.put("p_nom_per",jtfPer.getText());
parametros.put("p_nom_ubi",jtfUbi.getText());
parametros.put("p_nom_zona",jtfZona.getText());
parametros.put("nom_per","nom_ubi");
try{
try{
con = Conexion.getConexion();
JasperReport jasperReport = (JasperReport)JRLoader.loadObject("reportes/general.jasper");
JasperPrint imprime = JRFiller.fillReport(jasperReport,parametros,con);
jasperViewer = new JasperViewer(imprime,false);
jasperViewer.show();
}catch(SQLException sqle){
System.out.println("No se logro la conexion " + sqle.getMessage());
}
}catch (Exception e){
e.printStackTrace();
}
De nuevo muchas gracias!
Bueno dejo el código por si a alguien le sirve
/*ESTE CODIGO LO COLOQUE EN IREPORT */
SELECT *
FROM equipo
WHERE nom_per like $P{p_nom_per}
AND nom_ubi like $P{p_nom_ubi}
AND nom_zona like $P{p_nom_zona}
ORDER BY clv_equipo
Para crear las variables aqui les dejo este link
http://avbravo.blogspot.com/2008/05/parametros-en-ireport.html
/*EL CODIGO EN JAVA QUEDA DE LA SIGUIENTE MANERA*/
JasperViewer jasperViewer;
Connection con = null;
Map<String, String> parametros = new HashMap<String, String>();
parametros.put("p_nom_per",jtfPer.getText());
parametros.put("p_nom_ubi",jtfUbi.getText());
parametros.put("p_nom_zona",jtfZona.getText());
parametros.put("nom_per","nom_ubi");
try{
try{
con = Conexion.getConexion();
JasperReport jasperReport = (JasperReport)JRLoader.loadObject("reportes/general.jasper");
JasperPrint imprime = JRFiller.fillReport(jasperReport,parametros,con);
jasperViewer = new JasperViewer(imprime,false);
jasperViewer.show();
}catch(SQLException sqle){
System.out.println("No se logro la conexion " + sqle.getMessage());
}
}catch (Exception e){
e.printStackTrace();
}
De nuevo muchas gracias!
- Compartir respuesta
- Anónimo
ahora mismo