Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / iReport / Proyectos / Reportes y Subreportes con iReport

Reportes y Subreportes con iReport

Autor jc mouse miércoles, octubre 24, 2012

Cuando creamos reportes en iReport que son un poco complicadas o reportes personalizados, osea, tratando de evitar el clásico reporte de tabla, debemos utilizar subreportes para dividir el trabajo y no complicarnos la existencia 🙂

En este tutorial veremos una forma de crear estos subreportes muy fácilmente.

Necesitamos:

  • iReport 3.7 o Superior
  • Conocimientos de SQL y una base de datos MySQL
  • Nivel: Intermedio, a mejor entendedor, si sabes crear un reporte podrás crear un subreporte 🙂

La base de datos que utilizaremos es la siguiente :

MER curso

El código SQL es:

-- 
-- Estructura de tabla para la tabla 'estudiante'
-- 

CREATE TABLE estudiante (
  dni varchar(12) NOT NULL,
  nombre varchar(32) default NULL,
  email varchar(32) default NULL,
  celular varchar(12) default NULL,
  PRIMARY KEY  (dni)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 
-- Volcar la base de datos para la tabla 'estudiante'
-- 

INSERT INTO estudiante VALUES ('EST-00000001', 'Fernando Coco Cuadrado ', 'fernando2@yahoo.es', '080043332112');
INSERT INTO estudiante VALUES ('EST-00000002', 'Tomas Turbado ', 'loco_ton@mixmail.com', '800-33333-98');
INSERT INTO estudiante VALUES ('EST-00000003', 'Ramona Ponte Alegre ', 'triste_esta@gmail.com', '500-3223-122');
INSERT INTO estudiante VALUES ('EST-00000004', 'Pascual Conejo Enamorado ', 'conejo_rabioso@hotmail.com', '500-3333-001');
INSERT INTO estudiante VALUES ('EST-00000005', 'Miren Amiano ', 'elcochinote@facebook.com', '500-33-12199');

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla 'materia'
-- 

CREATE TABLE materia (
  codigo varchar(7) NOT NULL,
  nombre varchar(32) default NULL,
  curso varchar(12) default NULL,
  horario varchar(32) default NULL,
  PRIMARY KEY  (codigo)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 
-- Volcar la base de datos para la tabla 'materia'
-- 

INSERT INTO materia VALUES ('SIS-009', 'Introducción a la programación', 'A1', 'Miércoles de 06:00 a 09:00');
INSERT INTO materia VALUES ('TEL-500', 'Teleinformática', 'B32', 'Jueves de 18:00 a 19:00');
INSERT INTO materia VALUES ('SIS-200', 'Linux', 'B12', 'Lunes de 14:00 a 16:00');
INSERT INTO materia VALUES ('SIS-234', 'Metodologías de la Información', 'C32', 'Martes de 16:00 a 18:00');
INSERT INTO materia VALUES ('MAT-280', 'Estadística Descriptiva', 'C15', 'Viernes de 09:00 a 11:00');
INSERT INTO materia VALUES ('FIS-200', 'Física Básica IV', 'LAB-02', 'Viernes de 14:00 a 17:00');

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla 'matricula'
-- 

CREATE TABLE matricula (
  dni varchar(12) NOT NULL,
  idmateria varchar(7) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 
-- Volcar la base de datos para la tabla 'matricula'
-- 

INSERT INTO matricula VALUES ('EST-00000001', 'FIS-200');
INSERT INTO matricula VALUES ('EST-00000001', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000001', 'SIS-009');
INSERT INTO matricula VALUES ('EST-00000002', 'SIS-200');
INSERT INTO matricula VALUES ('EST-00000002', 'FIS-200');
INSERT INTO matricula VALUES ('EST-00000003', 'MAT-280');
INSERT INTO matricula VALUES ('EST-00000003', 'SIS-009');
INSERT INTO matricula VALUES ('EST-00000003', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000003', 'SIS-200');
INSERT INTO matricula VALUES ('EST-00000004', 'SIS-234');
INSERT INTO matricula VALUES ('EST-00000005', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000001', 'SIS-234');

Creando los reportes y subreportes.

Lo primero que haremos sera crear el reporte principal o reporte que llamaremos PADRE

1. Abre el iReport y crea un archivo nuevo.

2. En este reporte solo cargaremos los registros de los estudiantes sin parámetros de entrada, el SQL es:

SELECT  dni ,  nombre ,  email ,  celular 
FROM  estudiante

3. Ahora debemos diseñar el reporte y añadir los TextField de la siguiente manera :

paso 1

OJO: dejamos un espacio en blanco debajo de nuestros textfield, en ese lugar colocaremos el subreporte.

Si ejecutamos ahora el reporte padre, nos muestra los registros de estudiantes

preview reporte

Si todo bien hasta aquí, continuamos con el subreporte.

Subreporte.

Hay varias maneras de agregar un subreporte, nosotros utilizaremos un reporte desde otro archivo *.jasper.

1. Crea un nuevo archivo vacío y llámalo como HIJO.

2. Debes quitar los margenes del reporte para que no nos estorben cuando lo insertemos en el reporte padre. Para hacer esto ve a menú FORMATO -> REMOVER MARGENES DE REPORTE.

3. Crea un parámetro de entrada que llamaras dni.

4. La instrucción SQL que utilizaremos es:

SELECT codigo ,  nombre ,  curso ,  horario 
FROM matricula INNER JOIN materia ON idmateria=codigo
WHERE dni=$P{dni}

5. Crea el reporte como si se tratara de cualquier otro reporte. Añade los TextField y dale formato.

sub report

5. Compila el reporte y comprueba que este todo bien.

UNIENDO TODO

1. Ve al reporte PADRE y en la paleta busca SUBREPORT, en versiones actuales el icono es distinto, no importa, la cosa es que diga SUBREPORT 🙂

paleta

2. arrastra este objeto al diseñador de reporte, aparece una nueva ventana, debes elegir la opción “USAR UN REPORTE EXISTENTE”, busca y selecciona el archivo  “hijo.jasper” , presiona siguiente.

RPG

3. En la siguiente ventana te muestra diferentes opciones de conexión, elige la primera, “USAR LA MISMA CONEXIÓN…” . siguiente.

conexion static

4. En en esta ventana te pregunta por los parámetros que se utilizan en el subreporte, nosotros solo utilizamos un parámetro de entrada llamado DNI, este parámetro debemos asignarle un valor del reporte padre que  lógicamente es el DNI del estudiante, entonces lo buscamos y seleccionamos.

parametros

5. En el último paso, te pregunta de donde buscara el archivo JASPER. Nosotros colocaremos el archivo JASPER PADRE y el archivo JASPER HIJO, en la misma carpeta, entonces seleccionamos la opción “USE A STATIC ABSOLUTE PATH REFERENCE” . Presiona el botón Terminar.

static reference

6. Acomoda el subreporte en el diseñador de reporte.

comodato

7. ejecuta el PREVIEW y si no tienes errores, debes ver algo como esto:

fatallity

o.O es todo

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Introducción a los Gráficos en Pygame

Introducción a los Gráficos en Pygame

Antes de programar un videojuego, es necesario saber: Cómo representar figuras en la pantalla Cómo se manejan las coorde...

Mapas interactivos – El proyecto – Parte 2

Mapas interactivos – El proyecto – Parte 2

Comenzando este tutorial, primero necesitamos definir la “estructura” de nuestro proyecto. Haremos uso del I...

Gráficos Vectoriales SVG

Gráficos Vectoriales SVG

Las imagenes SVG (Scalable Vector Graphics) (Ver Wikipedia) son un tipo de imagen ya bastante antiguo pero poco conocido...

Crear y mover objetos en tiempo de ejecución

Crear y mover objetos en tiempo de ejecución

Dando respuesta a una interrogante sobre el como crear objetos en tiempo de ejecución y como manipular estos, desarrolle...

Lo nuevo de HTTP Client

Lo nuevo de HTTP Client

Una de las novedades de Java 9 y 10 aunque por el momento en modo de prueba (jdk.incubator.http) es el Cliente HTTP el c...

Hola Mundo con Slim Framework

Hola Mundo con Slim Framework

Slim es un micro framework para PHP que nos ayuda a escribir rápidamente aplicaciones Web y APIs sencillas pero poderosa...

14 comentarios en “Reportes y Subreportes con iReport”

  1. engelblack87 dice:

    Buenas noches, disculpa y si quiero mandar varios parametros al subreporte desde java como seria, Gracias. Mi reporte envia parametros al reporte maestro como al subreporte.

  2. lincoln dice:

    hola migo, saludos, sabes tengo una duda con respecto al ejemplo de subreportes. resulta que logre hacer el reporte principal y un subreporte, todo bian hasta ahi, lo mando allamar desde mi aplicaicon java, pero cuando llevo mi aplicacion a otra maquina ya no funciona, solo se muestra el reporte principal y no el sub reporte, por que pasa esto, gracias, si pudieras darme una idea te lo agradeceria.

    y por lo demas pues es uno de los mejores sitio donde he etado. saludos….

  3. Mashi dice:

    en el paso 3, como hago si quiero usar otra conexion ????

  4. Miguel dice:

    Hago todos los pasos que has indicado. El problema que tengo es que cuando lo llevo
    al cliente me sale un error que dice “File to connect database”. le he sacado el subreporte al reporte princiapl y funciona correctamente. Quiero creer que no se le está pasando la conexión al subreporte y he probado cambiar varias cositas y sigue sin funcionar. Tienes alguna idea de que puede ser?

  5. Jacks dice:

    Gracias por el Aporte, me ayudo mucho.

  6. miguel dice:

    hola tengo una consulta, tengo reportes y subreportes que se ejecutan sin problema en algunas versiones de windows 7, pero en windows 8 me sale un error al cargar el subreporte, cual seria la mejor forma de direccionar los subreportes al reporte padre?

  7. Alejandro c dice:

    Buenas noches, excelente tutorial, seria tan amable, tengo una pregunta; si quisiera mostrar cada subconsulta en el excel por paginas independientes, como podria hacerlo?, gracias.

  8. JL la Tecla dice:

    Me gusto mucho tu post aprendi mucho y aclare muchas dudas , pero , me surgieron otras y es como puedo crear un parametro de entrada a mi reporte

    1. Mouse dice:

      se agrade viejo 🙂 ya hay un post sobre parámetros de entrada

  9. Raúl dice:

    Hola buenas compi, el manual es muy útil y muestra paso a paso como conseguir el subreporte dentro de un reporte.
    Cuando genero el reporte padre, obtengo el espacio de donde va colocado en reporte hijo pero sin ningún dato.
    He de pasarle el parámetro en la clase java para que rellene y así muestre datos?
    Donde me habré despistado … ???
    Gracias !

  10. Luis dice:

    Hola mouse, una consulta. Tengo mi reporte con sub reporte funcionando.. Pero cuando llamo muchos subreportes en un solo reporte (300) demora en mostrar el reporte. Alguna sugerencia? Te agradezco.

    1. Mouse dice:

      se sobrecarga, trata de optimizar tu consulta ¿en vedad necesitas tantos subreportes?

      1. gerardo dice:

        hola necesito tu ayuda…. tengo un reporte con subreporte. mi subreporte tiene una consulta que se genera a partir de un parametro y mi reporte igual una consulta y recibe 1 parametro. el problema es… como le hago ya que es el mismo parametro tanto para el reporte como el subreporte… solo que son consulttas diferentes

  11. alex dice:

    y si en la lista que me muestra el reporte yo quisiera enumerar mi listado como le hago??? hay alguna opcion en jasper report q permita nooo sé usar un label y se vaya enumerando conforme a los valores q se mostraran???
    solo quiero enumerar los resultados como le hago??

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Blockly proyecto de Google for Education, es una biblioteca en JavaScript que agrega un editor de código visual a aplica...

j2html es una biblioteca para java que permite generar código html seguro desde código java utilizando sus propias etiqu...

En este post haremos uso de PanoramaImageView para agregar a una aplicación android, una vista panorámica de 180° y 360°...

¿Que es una infografia? “Una infografía es una representación visual informativa o diagrama de textos escritos que...

Android Bolivia

MAUS