En la primer parte de este tutorial establecimos los parámetros necesarios para el diseño de nuestro reporte con iReport que gracias a un plugin aún en fase beta ya se puede tener iReport como modulo de NetBeans. En esta segunda parte, continuaremos con el diseño del reporte.
Ya comentaba que tenemos una pequeña paleta con algunos componentes y mencionabamos la diferencia entre el Static Text y Text Field. Ahora, prosigue hacer el diseño, es decir, la presentación visual de nuestro reporte.
La región details es la que contendrá los datos que devuelva la consulta SQL, por lo tanto, es de suponerse que estos deberán ser componentes Text Field y no Static Text.
Para insertar los componentes, los seleccionamos del panel derecho presionando con el mouse y sin soltarlo, arrastramos al área de diseño. Al igual que pasa con los controles SWING, al seleccionar un componente tenemos el panel de propiedades, así podemos modificar el color, tamaño y tipo de fuente. Entendido esto, procedemos a realizar un diseño similar al mostrado por la figura:

Al agregar un Text Field a nuestra área de diseño, observaremos que tienen el texto de $F{field} . Deberemos cambiar la palabra “field” que se encuentra dentro de las llaves y poner el nombre de los campos que nos devolverá la consulta SQL. Si a estas alturas hay aún algún despistado que no sabe de lo que hablo, me refiero a los campos de la consulta SQL que hicimos:
“SELECT name, telefono, email FROM contacts”
Y estos campos son los que encontraremos en el panel izquierdo al desplegar la opción de Fields. Ahora bien, para asignar esos campos a los Text Fields, basta con dar doble click al Text Field y editarlo ó bien seleccionar el TextField y en el panel de propiedades ir a la propiedad Expression y ahi cambiar el valor.
Las cajas de texto que estan en la región de pageFooter son para indicar el número de página, pongo a continuación el valor de las dos Text Field en caso de no identificar bien lo que esta escrito en la imágen.
“Page ” + $V{PAGE_NUMBER} + ” of “
“” + $V{PAGE_NUMBER}
Con esto, si hemos hecho todo correctamente, ya podemos tener una vista de nuestro reporte, así que podemos ir al menú Designer y ejecutar el reporte con Run report.
La figura muestra el resultado de ejecutar dicho reporte!

Ahora, como se observa en la figura, obtenemos un reporte en base a una consulta SELECT sin ninguna condición WHERE. A menudo, en la realidad casi siempre los reportes serán bajo ciertos criterios, por ejemplo, en el caso más sencillo de este ejemplo, deseariamos mostrar los datos del contacto que tenga el id = 3.
Para ello necesitamos agregar un parámetro. En el panel izquierdo, vamos a la opción Parameters, click derecho, Add y escogemos parameters.

Le asignamos algún nombre a dicho parámetro. Posteriormente debemos modificar la consulta, si anteriormente teniamos:
SELECT name, telefono,email FROM contacts
Ahora solo agregaremos la clausula WHERE con el parámetro que acabamos de agregar:
SELECT name, telefono,email FROM contacts WHERE id = $P{id}
donde $P{ } indica que se trata de un parámetro. “id” es el nombre de este parámetro.
Por último, para ver los resultados debemos establecer una valor por default. Esto se consigue seleccionando el parámetro y en el panel de propiedades establecer a Default Value el valor “1″ ó del número de id que se quiera visualizar (poner el valor con comillas dobles).
Con esto al ejecutar de nuevo el reporte, ya obtendremos un nuevo reporte bajo cierto criterio.
Lo único que falta ahora es crear el código para poder llamar desde nuestra aplicación Java al reporte, por ejemplo, que al dar click en un boton, el reporte se ejecute, ya seá que mande directo a impresión ó nos muestre la vista previa como en la figura de arriba.
Esto lo veremos en la tercera y última parte de este tutorial.
Archivado bajo: Bases de Datos, Java, MySQL, Programación | Etiquetado: imprimir reportes en Java, iReport para NetBeans, JasperReport, Reportes en Java
[...] Segunda parte [...]
windoctor otra pregunta… si bien todavía no he leído la documentación… se pueden generar un reporte desde 2 consultas? O sea… imagina una factura, donde en una primera parte estarían los datos del cliente (primera consulta) y esta el detalle o cuerpo de la factura (donde están los productos de dicha factura.)
Se agradece algún comentario respecto a eso.
Saludos!
Roberto
holas si buen material el que ponen aqui, tengo una duda haber si pueden solventarmela que pasa que yo le paso un parameto un field al reporte que muchas veces es mas largo uno que el otro osea enel field el valor que le paso puede ser
” algo ” o ” alguna otra cosa ” pero como el segundoparametro es mas grande no se nota completamente y yo quisiera saber si es que se puede mandar el tamaño de la fuente para este field
haber si me responde estare agradecido
“Page ” + $V{PAGE_NUMBER} + ” of “
“” + $V{PAGE_NUMBER}
porq repites la variable page_number?
no debería ser or ejemplo 2 of 10
como lo pones no saldria 2 of 2
hola Thelly.
Pie de pagina. Numeracion de paginas en report.
respondo a tu pregunta sobre:
“Page ” + $V{PAGE_NUMBER} + ” of “ + $V{PAGE_NUMBER}
Tene en cuenta que tenes 4 componentes 2 con texto estatico (“Page” “of”)
y dos variables ( $V{PAGE_NUMBER} , $V{PAGE_NUMBER} )
lo que varia es de las dos var que decis estan respetidas es el tiempo de evaluacion.
en propiedades de la variable -> Text Field -> Evaluation Time
la primera la tiene en Now y la segunda en Report
de esta manera obtenes el total de Pages y las paginas correlativas.
y respecto a lo de Roberto,
si se puede tenes que usas un Subreporte y ponerlo x ejemplo en el detalle (es lo q yo haria)
Hola tambien me sale ese mismo error al hacer click en Preview y aun no se por que
javax.xml.parsers.FactoryConfigurationError
por fa si alguien soluciono eso que me diga como lo hizo
Map parametro = new HashMap();
parametro.put(”fech_ini”, fecha1);
parametro.put(”fech_fin”, fecha2);
parametro.put(”Total”, total);
Hola me pueden decir de donde salen esos valores por ejemplo fecha1 o fecha se supone que esos valores los extraen desde un formulario java como capturan su valor necesito preguntar por dos parametros y aun no he podido hacerlo
hola tengo una pequeña duda como puedo ejecutar un reporte que recibe dos parametros desde una aplicacion de netbeans.
Hola mi pregunta es la siguente necesito ejecutar un reporte que recibe dos parametros desde mi aplicacion en netbeans, espero me puedas ayudar. gracias
Hola a todos …
Yo estoy tratando de realizar reportes peros desde iReport de windows ya que me gusta programar con JCretaor y he realizado todos los pasos, las consultas, la coneccion a la base de datos… pero cuando quiero ver el reporte me sale este mensaje
the document has no pages = “El documento no tiene pagina”
Lo bueno es que tiene su pagina y todo… pero no me sale los resultados de la consulta
Hola cuando aparece eso es por que no tienes registros en la BD o por que los parametros que le estas enviando desde java a ireport no los esta tomando, me explico si quieres que en el reporte aparezcan solo las personas de nombre jose por ej, desde java le envias el parametro con el nombre jose si el ireport no recibe esos parametros va a pensar que no le estas enviando nada y no muestra nada en la pagina bueno eso pienso que puede ser
Hola, esta genial este pequeña introduccion, me gustaria saber como poder utilizar la like en la condicion del qry del reporte
Buenos dias, cuando quiero ejecutar el reporte me da error:
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:134)
at net.sf.jasperreports.engine.xml.JRReportSaxParserFactory.createSAXParserFactory(JRReportSaxParserFactory.java:124)
at net.sf.jasperreports.engine.xml.JRReportSaxParserFactory.createParser(JRReportSaxParserFactory.java:106)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createParser(JRXmlDigesterFactory.java:1132)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createDigester(JRXmlDigesterFactory.java:1107)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:203)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:697)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
Hola si no me equivoco ese error da solo si estas ocupando el NetBeans 6.5 si es así esta es la solución
copiar el archivo que esta en esta dirección
C:\Archivos de programa\NetBeans 6.5\ireport\modules\ext\xercesImpl.jar
a esta otra dirección
C:\Archivos de programa\Java\jdk1.6.0_11\jre\lib\ext
Al tratar de ver el priview me aparece un error:
Ha ocurrido una excepción javax.xml.parsers.FactoryConfigurationError.
en detalles dice:
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:134)
at net.sf.jasperreports.engine.xml.JRReportSaxParserFactory.createSAXParserFactory(JRReportSaxParserFactory.java:124)
at net.sf.jasperreports.engine.xml.JRReportSaxParserFactory.createParser(JRReportSaxParserFactory.java:106)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createParser(JRXmlDigesterFactory.java:1132)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createDigester(JRXmlDigesterFactory.java:1107)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:203)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:697)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
y no lo puedo ejecutar ni nada, q hago??? please
hola,
primero te felicito tu tutorial es buenísimo, pero tengo un pekeño problema,
¿cual es ese panel donde aparecen los Fields y los parametros?
no logro encontrarlo y no se como ubicarlos
hola de nuevo, ahora me fije que había instalado la versión (3.5.1) mas reciente del ireport y que por bug no me deja ver el Report Inspector que es el panel que muestras, espero que lo solucionen pronto
hola .. me desacarge el ejemplo de ireports pwero no corre ni levanta el formulario donde se pone el codigo para que salga el reporte ……. parace que le falta mas jaras o no se por que sale error … porfavor si puedieras mnadarme el ejemplo a mi correo porfavor ..ese ffernandox@hotmail.com
Hola que tal…Primeramente gracias por tu aporte a la comunidad…tu manual me ha sido de gran ayuda ya que soy nuevo en el lenguaje java…especialmente en la parte de reportes……te explico lo que quiero hacer…hise un pequeño programita en java el cual esta basado en un registro civil el mismo hace sus operaciones sobre actas de difusión, actas de matrimonio y actas de nacimiento ”ojo con fines académicos”, pero soy ignorante en la parte de la generación de los reportes, preguntándole al señor google llegue hasta Aquí, el reporte consiste de lo siguiente.
1-) Al presionar al botón guardar registro, aparte de guardar los datos ”ya esta operativa” , esta me debe generar y abrir el pdf, con todos los datos que introduje en las cajas de texto “datos del formulario”.
2-) al presionar un menú item se abre un JDialogo la cual contiene una caja de texto en la cual voy a introducir un campo clave de ese registro por ejemplo número de pasaporte o de cédula de identidad, al presionar el botón buscar, el mismo debe de verificar esos datos de esa caja de textos y compararla con los de la base de datos. De ser iguales, abre un pdf con todos que se quieran mostrar en dicho pdf.
Todo esto ya esta operativo osea los métodos y consultas..pero como no se trabajar con los reportes estoy varado…ayuda por favor si alguien sabe le estaría muy agradecido..
Holaaaaaaa, esta muy chevere tu foro,,,descargue el proyecto…pero tengo un problema estoy realizando un proyecto muy parecido, estoy trabajando con netbeans 6.5 y el jaspersoft, realizo mi reporte le paso el parametro de tipo string por q es el nombre de los clientes, al ponerle el parametro por default por ejemplo:”andrea” al ejecutar el reporte me gernera los datos de dicho cliente..perfecto pero cuando lo llamo desde el programa en netbeans le digo el cliente por ejemplo carlos…me bota el reporte q genera el natalia y me bota los datos de dicho cliente….he molestado con una cosa y la otra y nada..me sigue saliendo ese mismo reporte..plissss ayudaaaa..gracias por su colboracion de antemano.
Natalia, debes dejar el parámetro por default sin valor de esta forma podrás se seteara bien, de todas formas debes verificar bien si estas seteando bien el parámetro en tu programa
Gracias por responder, osea q en la parte por default lo dejo en comillas y no le doy ningun valor???..eso ya lo realize pero me sale null…y la verdad no se q mas hacerle..
por default en el ireport que estoy usando yo (3.5.2) el parametro lo dejas vacio, sin comillas ni nada, cuando le haces un preview te pide el valor y se setea
MMMMM yaaa..graciasssssss, voy a intentar desarrollarlo asi,
yo creo q mi problema va hacer es en el programa,cualquier cosa te estoy comentando…y gracias por responder..
no hay problema, si tienes alguna consulta consultalo solamente ^^
aun que yo también estoy aprendiendo, no soy un experto
yaaaa..por fin me salio el programa….le estaba asignando mal el parametro mil y mil gracias..!!!
de nada ^^
que bueno que te resulto
Hola a todos …
Primero que todo felicidades por este gran tutorial …
Estoy tratando de realizar un llamado a un reporte en NetBeans que realice en iReport y me sale un error que no comprendo … Mi clase es la siguiente …
package Clases;
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;
public class Reportes {
Model modelo = new Model();
public Reportes() {
try{
modelo.connect(); // se llama al metodo para conectar a la base de datos…
}catch(Exception e){ System.out.println(“Error en la coneccion”);
}
}
public void Empleados(){
try {
String master = System.getProperty(“user.dir”) + “/src/Clases/PerActivo.jasper”;
System.out.println(“master” + master);
if (master == null) {
System.out.println(“No encuentro el archivo del reporte maestro.”);
}
JasperReport masterReport = null;
try {
masterReport = (JasperReport) JRLoader.loadObject(master);
}
catch (JRException e) { System.out.println(“Error cargando el reporte maestro: ” + e.getMessage());
}
JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, null);
JasperViewer jviewer = new JasperViewer(jasperPrint,false);
jviewer.setVisible(true);
}
catch (Exception j) {
System.out.println(“Mensaje de Error:”+j.getMessage());
}
}
}
y el error que genera es …..
primero un mensaje que el documento no tiene pagina la cual si tiene y segundo es el siguiente
net.sf.jasperreports.engine.query.JRJdbcQueryExecuter
ADVERTENCIA: The supplied java.sql.Connection object is null.
Claro que el error es cuando lo llamo con un boton … por que cuando lo hago por …preview… sale Okey..
Agradezco antemano su colaboracion ….
JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, null);
hola tu error esta en esa linea, y es simple, le estas pasando como un parámetro de null a la conexión del rellenado del reporte, no estoy seguro si hay un método que te permita pasarlo sin la conexión pero esa es el problema que tienes
Gracias compañero, tenias razon en lo que dices …
la obsion completa es
JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, null, modelo.con);
ya que el null es un parametro de la consulta y el modelo.con es la coneccion a la base de datos ….
Gracias X todo …
Ahora una preguntica mas ..
Como hago para que el pantallaso del reporte salga en el mismo proyecto y no se genere como un Frame mas … es decir que no se muestre en la barra de inicio..
Si me supe explicar …?
Hola , me parece genial la información pero me pregunto si sabes crear reportes anidados..
Hola , me parece genial la información pero me pregunto si sabes crear reportes anidados
Espero tu respuesta
es buena yuda.. gracias!!!
Ayudemen por favor.. Descargue el proyecto y se abre perfecto pero al hacer el llamado me sale el mensaje de :
esta es la impresion del programa.
master:C:\Touch2009\reportesJasper\src\reportes\repClientes.jasper
Mensaje de Error:null
este mensaje me sale nulll porfa ayudemen no le lanza el reporte
me olvidaba estoy trabajando con glassfish porfa ayuda…