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:
La base de datos que utilizaremos es la siguiente :
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 :
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
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.
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 🙂
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.
3. En la siguiente ventana te muestra diferentes opciones de conexión, elige la primera, «USAR LA MISMA CONEXIÓN…» . siguiente.
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.
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.
6. Acomoda el subreporte en el diseñador de reporte.
7. ejecuta el PREVIEW y si no tienes errores, debes ver algo como esto:
o.O es todo
En este tutorial veremos un poco lo que es el diseño de interfaces en android, en lugar de colocar el ejemplo de uso de[...]
Cuando Android estaba en sus inicios, varios IDEs (Entorno de Desarrollo Integrado) se disputaban el dominio por su de[...]
Segunda parte del tutorial [Crea tu blog con el patrón MVC y php]. En esta 2da parte toca ver lo que es la creación del[...]
Java Excel API es un API para java que permite a los desarrolladores leer y escribir en hojas de cálculo Excel. jexcelap[...]
Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de[...]
Problema: Desarrolle un programa en consola con c# para escribir y leer información de un archivo binario. Los datos a e[...]