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