Pues, ahora se dara continuacion a ese tutorial, se explica como enviar esos parametros a iReport desde el IDE de Java Netbeans.
Nos creamos una clase informe_con_parametros.java y pegamos el siguiente codigo:
/* librerias de ireport*/ import java.net.URL; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class informe_con_parametros { //se estable una conexion con la base de datos private conexion con = new conexion(); public informe_con_parametros(){} /* reporte sencillo con conexion a base de datos MySQL, * el reporte cuenta con un parametro de entrada */ public void ver_informe_con_parametros(String parametro){ JasperReport reporte; JasperPrint reporte_view; try{ //direccion del archivo JASPER URL in = this.getClass().getResource("jcReport_Sample1.jasper"); reporte = (JasperReport) JRLoader.loadObject( in ); //Se crea un objeto HashMap Map <String,String> parametros = new HashMap<String,String>(); parametros.clear(); //el nombre que se dio al parametro en JasperReport fue "p1", y se debe llamar desde Java con //ese mismo nombre, a su lado se pasa el valor del parametro parametros.put( "p1", parametro ); //----------------------------------- reporte_view= JasperFillManager.fillReport( reporte, parametros, con.getConnection() ); JasperViewer.viewReport( reporte_view ); //terminamos la conexion a la base de datos con.desconectar(); }catch (JRException E){ E.printStackTrace(); } } }
El codigo para llamar esta clase desde el Main es:
public class Main { public static void main(String[] args) { //se genera un informe con parametro de entrada con valor "b" new informe_con_parametros().ver_informe_con_parametros("b"); //se genera un informe con parametro de entrada con valor "m" new informe_con_parametros().ver_informe_con_parametros("m"); } }
Esto nos da como resultados
Para descargarte el codigo fuente del proyecto + la base de datos y los archivos Jasper, clic en el siguiente enlace:
34 comentarios:
HOla que tal? muy bueno esto de los reportes, pero en esta ocación necesito pedirte un favor, soy relativamente nuevo en java y estoy necesitando si podes que hagas un tuto, que explique como hacer una aplicación de escritorio en java que permita acceder a paguinas web. La verdad es un tema que llevo investigando hace un tiempo y hasta el día de hoy no se como hacerlo :S
Hola amgo, soy Marcos Aguilera, lo que sucede es que necesito pasar 2 parametros por una consulta en iRepor 4 (jasper report) lo que sucede es que me pide los parametros, pero el segundo no lo toma, y me sale "THIS DOCUMENTO HAS NO PAGES!" te dejo el QUERY y los parametros, ambos son tipo STRING, sera que estoy haciendo algo mal?¿ podria sorientarme!
----------------------
SELECT
Persona.`Apellido1` AS Persona_Apellido1,
Persona.`Apellido2` AS Persona_Apellido2,
Persona.`Nombre1` AS Persona_Nombre1,
Persona.`Nombre2` AS Persona_Nombre2,
Persona.`Id_Persona` AS Persona_Id_Persona,
Aprendizaje.`Aprendizaje` AS Aprendizaje_Aprendizaje,
Aprendizaje.`Fecha_Esperada` AS Aprendizaje_Fecha_Esperada,
Asignatura.`Asignatura` AS Asignatura_Asignatura,
Asignatura.`Id_Asignatura` AS Asignatura_Id_Asignatura,
Calificaciones.`Calificacion` AS Calificaciones_Calificacion,
Calificaciones.`Calificacion_Num` AS Calificaciones_Calificacion_Num,
Calificaciones.`Comentario` AS Calificaciones_Comentario,
Calificaciones.`Fecha_Logro` AS Calificaciones_Fecha_Logro,
Calificaciones.`Insc_Alum_Aprendizaje_Id_Insc_Alum_Aprendizaje` AS Calificaciones_Insc_Alum_Aprendizaje_Id_Insc_Alum_Aprendizaje,
Insc_Alum_Aprendizaje.`Aprendizaje_Id_Aprendizaje` AS Insc_Alum_Aprendizaje_Aprendizaje_Id_Aprendizaje,
Insc_Alum_Aprendizaje.`Persona_Id_Persona` AS Insc_Alum_Aprendizaje_Persona_Id_Persona,
Insc_Alum_Aprendizaje.`Insc_Alum_Curso_Id_Insc_Alum_Curso` AS Insc_Alum_Aprendizaje_Insc_Alum_Curso_Id_Insc_Alum_Curso,
Aprendizaje.`Subtopico_Id_Subtopico` AS Aprendizaje_Subtopico_Id_Subtopico,
Aprendizaje.`Id_Aprendizaje` AS Aprendizaje_Id_Aprendizaje,
Insc_Alum_Aprendizaje.`Id_Insc_Alum_Aprendizaje` AS Insc_Alum_Aprendizaje_Id_Insc_Alum_Aprendizaje,
Insc_Alum_Curso.`Persona_Id_Persona` AS Insc_Alum_Curso_Persona_Id_Persona,
Insc_Alum_Curso.`Id_Insc_Alum_Curso` AS Insc_Alum_Curso_Id_Insc_Alum_Curso,
Subtopico.`Id_Subtopico` AS Subtopico_Id_Subtopico,
Unidad.`Id_Unidad` AS Unidad_Id_Unidad,
Unidad.`Asignatura_Id_Asignatura` AS Unidad_Asignatura_Id_Asignatura,
Subtopico.`Unidad_Id_Unidad` AS Subtopico_Unidad_Id_Unidad,
Curso.`Id_Curso` AS Curso_Id_Curso,
Curso.`Curso` AS Curso_Curso,
Insc_Alum_Curso.`Curso_Id_Curso` AS Insc_Alum_Curso_Curso_Id_Curso
FROM
`Aprendizaje` Aprendizaje INNER JOIN `Insc_Alum_Aprendizaje` Insc_Alum_Aprendizaje ON Aprendizaje.`Id_Aprendizaje` = Insc_Alum_Aprendizaje.`Aprendizaje_Id_Aprendizaje`
INNER JOIN `Persona` Persona ON Insc_Alum_Aprendizaje.`Persona_Id_Persona` = Persona.`Id_Persona`
INNER JOIN `Insc_Alum_Curso` Insc_Alum_Curso ON Insc_Alum_Aprendizaje.`Insc_Alum_Curso_Id_Insc_Alum_Curso` = Insc_Alum_Curso.`Id_Insc_Alum_Curso`
INNER JOIN `Calificaciones` Calificaciones ON Insc_Alum_Aprendizaje.`Id_Insc_Alum_Aprendizaje` = Calificaciones.`Insc_Alum_Aprendizaje_Id_Insc_Alum_Aprendizaje`
AND Persona.`Id_Persona` = Insc_Alum_Curso.`Persona_Id_Persona`
INNER JOIN `Curso` Curso ON Insc_Alum_Curso.`Curso_Id_Curso` = Curso.`Id_Curso`
INNER JOIN `Subtopico` Subtopico ON Aprendizaje.`Subtopico_Id_Subtopico` = Subtopico.`Id_Subtopico`
INNER JOIN `Unidad` Unidad ON Subtopico.`Unidad_Id_Unidad` = Unidad.`Id_Unidad`
INNER JOIN `Asignatura` Asignatura ON Unidad.`Asignatura_Id_Asignatura` = Asignatura.`Id_Asignatura`
--es aqui donde esta mal, ya que solo me toma un parametro, eg. el de Curso
WHERE Curso=$P{curso} and Asignatura=$P{asignatura}
sobre tu consulta no puedo decirte mucho :) no conosco tu base de datos. Solo puedo ver que estas realizando la consulta con el ayudante de jasperreprot, te aconsejaria que pruebes esa consulta desde el servidor de base de datos haber si tienes datos que mostrar, respecto a los parametros, la sintaxis es la correcta
hola son muy buenos los tutos ke ases...yo tengo un problemita..trabajo con netbeans 6.1 y este tiene acoplado el ireport 3.1 y en un reporte lo ke ago es imprimir un codigo pero yo kiero ke este codigo este en la fuente de codigo de barras le pongo preview y me muestra bien con la fuente de codigo de barras pero a la hora de exportar a pdf no me reconoce la fuente ya intente varias cosas y nada agradeceria tu ayuda...mi correo es tur_kito@hotmail.com o aki por el foro gracias
Hola!,
Sabrías decirme como poner datos en un report de más de dos tablas, me dice lo de Document has no pages
Si tengo las tablas:
- Clientes - > numcliente, nombrecliente, ...
- Ordrenes -> numorden, fknumcliente, ...
- Ofertas -> numoferta, fknumordren, ...
- LineasFacturacion -> numlinia, fknumoferta, ...
Todas relacionadas en cascada...
Como puedo mostrar reportes con esta estructura:
Datos Cliente1
Datos Linea Facturacion1
Datos Linea Facturacion2...
Datos Linea FacturacionN
Datos Cliente2
Datos Linea Facturacion1
Datos Linea Facturacion2...
Datos Linea FacturacionN
...
Datos Cliente2
Datos Linea Facturacion1
Datos Linea Facturacion2...
Datos Linea FacturacionN
Saludos! masmola tu blog
Me gustaria que hicieras un ejemplo sencillo de un reporte solo me muestre los datos de una sola persona
y no de una lista de ellas.Te lo agardeceria bastante
Para listar una sola persona solo tienes que poner en la consulta SQL (en editQuery) algo asi: SELECT nombre, apellidos, ... , datos FROM trabajadores WHERE numeroTrabajador = $P{numTrabajador} (parametro creado en el report)
--------------------------------
a ver si alguien sabe como hacer listas jerárquicas con ireport
tipo :
-Trabajador 1
---Tarea1
---Tarea2
...
---TareaN
-Trabajador 2
---Tarea1
---Tarea2
...
---TareaN
...
-TrabajadorN
---Tarea1
---Tarea2
...
---TareaN
muchas gracias x el aporte me sirvio de mucho..el tuto...:)
Hola, Mouse: tal vez podrias ayudarme con un problema que tengo con el iReport. Estoy tratando de crear un reporte de una tabla Valores que tiene los campos año, mes, item, total además de otros. Un consulta simple daria:
ITEM AÑO MES TOTAL
1 2010 1 15
1 2010 2 18
2 2010 1 20
2 2010 2 24
Quiero mostrar el reporte de la siguiente forma:
ITEM MES1 MES2
1 15 18
2 20 24
Intenté con esta consulta:
SELECT item,
CASE WHEN mes = 1 THEN total ELSE 0 END as "Enero",
CASE WHEN mes = 2 THEN total ELSE 0 END as "Febrero"
FROM Valores
WHERE año = 2010
GROUP BY item
ORDER BY mes
El problema es que en este tipo de consulta (GROUP BY) sólo se muestran datos que incluyan una funcion de agrupacion (SUM, COUNT, AVG, ..) y yo quiero mostrar los valores sin agruparlos. Para que esta consulta funcione hay que sacarle el GROUP BY, pero el resultado no es bueno. Te agredeceria cualquier sugerencia que tengas. Gracias
Hola, soy el que hizo la consulta del 20/9/2011 04:23 y como encontré una solución quisiera compartirla con todos:
SELECT ITEM,
MAX (DECODE (MES, 1, TOTAL, 0)) ENE,
MAX (DECODE (MES, 2, TOTAL, 0)) FEB,
MAX (DECODE (MES, 3, TOTAL, 0)) MAR,
MAX (DECODE (MES, 4, TOTAL, 0)) ABR,
MAX (DECODE (MES, 5, TOTAL, 0)) MAY,
MAX (DECODE (MES, 6, TOTAL, 0)) JUN,
MAX (DECODE (MES, 7, TOTAL, 0)) JUL,
MAX (DECODE (MES, 8, TOTAL, 0)) AGO,
MAX (DECODE (MES, 9, TOTAL, 0)) SEPT,
MAX (DECODE (MES, 10, TOTAL, 0)) OCT,
MAX (DECODE (MES, 11, TOTAL, 0)) NOV,
MAX (DECODE (MES, 12, TOTAL, 0)) DIC
FROM (SELECT MES, ITEM, TOTAL FROM VALORES)
/*si se pasan parametros */
/*FROM (SELECT MES, ITEM, TOTAL FROM VALORES WHERE */
/*ANNO = param1 AND COD1 = param2 AND COD2 = param3)*/
GROUP BY ITEM
ORDER BY ITEM
De todos modos, agradezco a quienes se hayan interesado en buscar una solución.
Maestro mis respeto soy un joven estudiante y me alegro aver encontrado tu pagina asi puedo ampliar un poco mas mis conocimientos y muchas gracias por compartir tus conocimientos .
Muy buen aporte amigo, tengo una duda y es que quisiera saber si desde dreamweaver php se puede abrir un reporte jasper...
Saludos
Hola Amigo de MOUSE..... Bueno ante todo felicitarte por todos los aportes que vienes dando, aparte de que aprendí mucho estoy frustrado con tu código que pusiste en eso de facturas, ya e echo de todo pero me aparece una excepción que me tiene por los cojo....... ya voy 2 días tratando de ver que pasa pero nada acá te mando dicha excepción, espero que me ayudes por favor.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:158)
at PKG_Clases.iFactura.ver_Factura(iFactura.java:24)
at PKG_Ventanas.INT_FRM_Detalle_Inventario.jButton2ActionPerformed(INT_FRM_Detalle_Inventario.java:871)
at PKG_Ventanas.INT_FRM_Detalle_Inventario.access$2000(INT_FRM_Detalle_Inventario.java:24)
at PKG_Ventanas.INT_FRM_Detalle_Inventario$16.actionPerformed(INT_FRM_Detalle_Inventario.java:696)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Andy, no debes copiar todo el error que te sale, las primeras lineas es suficiente, el error que te sale es que NO ESTA ENCONTRANDO ALGO, revisa que las librerias sean lsa correctas y tambien te puede fallar la version del jasperreprot, yo creo que uso una version ya antigua, revisa eso ok
hola mas que nada muchas gracias por compartir tus conocimientos pero la verdad e estdo chcando paso a paso a paso tu tuto y la no es posible que genere demasiados erorres estoy llamandole ala libreria de jasper (reporte) tengo todo bien de igual manera mi conexion ala base de datos es buena y me salen demasiados erorres ojala y me pudieras ayudar por favor
Hola, Buenisimos tus aportes. Descargue el de Reportes iReport2 y dice que falta la biblioteca reportes.
Hola Amigo Mouse, Bueno mi duda es que el otro día descargue el LAUNCH4J para hacer mi instalador, y lo pase a otra maquina don el jdk las librerías y todo...... me funcionó correctamente pero cuando quise ver mis reportes no me los jalaba ademas que cuando estoy haciendo mantenimiento de datos me sale el error de "to many connection" o algo asi dame una manito en estas consultas.
Que tal amigo Mause,que puedo hacer cuando los reportes se quieren en una red por ejemplo tengo mi reporte vacaciones y esta en el servidor y la aplicacion en otra maquina
URL archivo = this.getClass().getResource("\\server/reportes/vacciones.jasper");
Muy buenos tus tutoriales amigo, me gustaría saber como puedo agregar un reporte a un JdesktopPane o a un Jpanel.
Hola quisiera que me ayudaran con mi duda, cuando ejecuto un primer reporte reporte se ejecuta correctamente pero a la segunda vez me aparece que no hay datos, es necesario desconectar la coneccion hacia la base de datos en la clase de jasper para el reporte.
en las imagenes explico mejor
http://fotos.subefotos.com/87a3052901a48b51ba5bcfbecf183ef2o.jpg
http://fotos.subefotos.com/310e3ec1234bf421d565d40a58ec8f15o.jpg
http://fotos.subefotos.com/53bd03bad2fe652726a96778757f61b5o.jpg
Porfavor respondanme a ivanmauricio_gomez@hotmail.com
Gracias
cuando llamas a tu reporte, despues te estas desconectando de la base de datos, si haces eso, cuando vuelvas a llamar al reporte debes verificar que exista una conexion activa, sino es asi, debes conectarte nuevamente, es por eso tu error
Hola que tal, muy bueno el tutorial, es algo que andaba buscando desde hace mucho, solo que al tratar de ejecutar me sale el siguiente error:
init:
Deleting: C:\Users\BLACK-ICE\Documents\NetBeansProjects\iReport_sample2\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\BLACK-ICE\Documents\NetBeansProjects\iReport_sample2\build\built-jar.properties
Compiling 1 source file to C:\Users\BLACK-ICE\Documents\NetBeansProjects\iReport_sample2\build\classes
compile-single:
run-single:
Exception in thread "main" java.lang.NullPointerException
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:141)
at informe_con_parametros.ver_informe_con_parametros(informe_con_parametros.java:40)
at Main.main(Main.java:10)
Java Result: 1
ojala puedas ayudarme
el error dice que esta borrando un archivo de propiedades :/ nose, tal vez sea la version de metbeans que estes usando
que tal amigo, mouse , antes que nada quiero felicitarte por los exelentes aportes, y quisiera que me ayudes con una problema que me muestra cuando trato de llamar al reporte
y es esto:
Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray
gracias buen tutorial
Buenas hermano excelentes tutoriales, una pregunta, como hago para que desde una ventana principal generar varios reportes, me explico, si deseo obtener reportes de asisteste, de los ponenetes y las ponencias. pero no quiero todo en un mismo reporte sino por reportes separados y que sea llamado desde una vista principal
para pasar varios parametros, tengo entendido asi...
parametro.put("p_CodArticulo",this.txtCodArticulo.getText());
parametro.put("p_CodPais",this.cboPais);
parametro.put("p_CodLine",this.cboCodLine);
y mandarlo asi..
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametro, this.WinPadre.db.getCn());
del lado del reporte, crear esas mismas variables.... para tomarla, mi duda es... que pasa si ninguno de ellos contiene algo, por ejemplo que no se cree el where...
algo asi como...
select * from paises WHERE CodPais = $P{!p_CodPais}
que el parametro CodPais vaya vacio.
Es pero alguien nos pueda ayudar....
puedes controlar qeu no sea NULL antes de enviar a jasper para que siempre te envie un dato, por ejemplo una cadena vacia
Hola amigo estoy queriendo imprimir datos de un buscador que cree el buscador esta perfecto por ej. si poco el codigo uno me trae todo los detalles y quisiera imprimir ese detalle con un boton imprimir, ya cree en irereport el modelo del inforne cn el parametro y funciona hay espectacular pero lo que pasa q al programar el boton imprimir me lanza una excepcion for input string y no se cm resolverlo trabajo en netbeans 6.9.1
Oye estoy muy agradecido contigo, muchas gracias por tantos aportes, me has motivado a crear un foro tambien para ayudar a otras personas que estan en el camino.
Holas
Antes que nada mil gracias por el apoyo y los tutoriales 100 puntos a todo tu trabajo...
Pero aoriivechando la ocasion para abusar de tus conocimientos quisiera que me saques de una duda..
Resulta que tengo varios reportes creados con ireport que corren de maravilla en netbeans... el problema surge cuando creo el jar.
Intento abrir los reportes y no me muestra nada ademas de que inmediatamente se cierra la aplicacion.. otro problema que tengo es que el archivo jar tampoco reconoce el lookand feel que le pongo...
Una evz mas mil gracias por todo
buenas tardes mouse
antes que nada agradecerte por tus aportes me han servido mucho en el aprendizaje.
Tengo una duda como le hago para que el reporte con jasper report aparezca dentro de la aplicacion mdi y llamarlo desde un menu.
gracias
Gracias JC, solo un detalle por si acaso a alguien le ocurre, me daba error en esta linea:
reporte_view =JasperFillManager.fillReport(reporte, parametros, con.getConnection());
lo resolví cambiando esta linea:
Map (Corchete angular que abre)String,String(Corchete angular que cierra) parametros = new HashMap(Corchete angular que abre)String,String(Corchete angular que cierra)();
por esta linea:
Map (Corchete angular que abre)String,Object(Corchete angular que cierra) parametros = new HashMap(Corchete angular que abre)String,Object(Corchete angular que cierra)();
De nuevo JC, muchas gracias... éxitos...
Tuve que usarlo así porque no me los mostraba en los comentarios
(Corchete angular que abre)
(Corchete angular que cierra)
se usan los símbolos como tal.
Publicar un comentario