015 - Aplicación de Stock con Java. Hibernate – MySQL – JPA. iReport. Reporte para referencial Artículo.

Iniciamos la creación del reporte para “Articulo” creando un nuevo archivo, el nombre del archivo será “ArticuloReport”. Para entender más sobre el proceso de creación de informes se puede consultar iReport. Introducción para crear informes. La configuración de la hoja normal es el A4.
En la imagen de más abajo se puede ver el diseño del reporte terminado, con los “Fields” correspondientes, “Variables” y demás.
El reporte en si contiene estos elementos: 1) Un “Label” como descripción del reporte. 2) Una “Variable” para el número de páginas. 3) “Labels” para describir datos de columnas. 4) “Fields” o campos para la banda de detalles. Para el borde se utiliza “Rectangle” de fondo y sin borde. En ”iReport. Introducción para crear informes” vimos cómo trabajar con cada elemento. Un detalle importante a tener en cuenta es el nombre para cada “Field” ya que serán iguales a las que le pasaremos desde Java con nuestra lista creada. Estos campos son "id", "des" "tipo", "pve" y "can".
Completado el diseño debemos de compilar el reporte y obtener los archivos necesarios “ArticuloReport.jasper” y “ArticuloReport.jrxml” respectivamente. Estos archivos de reporte debemos de copiar en nuestra carpeta “informes”, que creamos al inicio del proyecto.
En algunos casos se da que debemos obtener datos de dos o más tablas, como por ejemplo “Articulo” y “Tipo”, pues debemos de obtener la lista de artículos al igual que el tipo correspondiente. Esto lo podemos hacer utilizando una clase de soporte que nos permitirá combinar ambas tabla en una sola lista. El nombre de la clase para este informe es “ArticuloR” y la tendremos que guardar en la carpeta de “informes” al igual que los dos archivos de obtenidos del iReport. A continuación la clase “ArticuloR”.
Código Java
package com.informes;

/**
*
* @author Ariel
*/

public class ArticuloR {
private int id;
private String des;
private String tipo;
private int pve;
private int can;

public ArticuloR(int id, String des, String tipo, int pve, int can) {
this.id = id;
this.des = des;
this.tipo = tipo;
this.pve = pve;
this.can = can;
}

public int getCan() {
return can;
}

public void setCan(int can) {
this.can = can;
}

public String getDes() {
return des;
}

public void setDes(String des) {
this.des = des;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getPve() {
return pve;
}

public void setPve(int pve) {
this.pve = pve;
}

public String getTipo() {
return tipo;
}

public void setTipo(String tipo) {
this.tipo = tipo;
}

}
El siguiente paso es crear un método para ejecutar el reporte. Abajo el método “informe()” para ejecutar el reporte. Los comentarios explican que función cumple cada línea de código. Este método la llamamos desde el botón “Informe” de nuestro formulario “ArticuloApp” utilizando el evento “ActionPerformed”.
Código Java
public void informe(){
//try - para controlar las excepciones.
try {
//Iniciamos una transacción
st.beginTransaction();
//Utilizamos un Lista para almacenar los datos combinados de Articulo y Tipo.
List articuloList = new ArrayList();
//Obtenemos una lista de artículos
List<Articulo> lista = (List<Articulo>)st.createQuery("From Articulo").list();
//utilizamos Iterator para acceder a los datos
for (Iterator<Articulo> it = lista.iterator(); it.hasNext();) {
Articulo articulo = it.next();
//Llenamos nuestro "articuloList", la diferencia con la lista original es que obtenemos las descripción del tipo con "articulo.getTipo().getDes()"
//de otra forma no traería un objeto "Tipo" no un String con el nombre específico que necesitamos.
articuloList.add( new ArticuloR(articulo.getId(), articulo.getDes(), articulo.getTipo().getDes(), articulo.getPve(), articulo.getCan()));
}
//Utilizamos el método siguiente para cargar el reporte "ArticuloReport.jasper"
//El "JRLoader.loadObject" es el cargador.
JasperReport report = (JasperReport)JRLoader.loadObject(ClassLoader.getSystemResource("com/informes/ArticuloReport.jasper"));
//El método siguiente nos permite pasarle los datos al reporte utilizando JRBeanCollectionDataSource y como argumento la lista que creamos más arriba.
//La lista posee los siguiente campos: "id" "des" "tipo" "pve" "can" en coincidencia con los de nuestro archivo de reporte.
JasperPrint fillReport = JasperFillManager.fillReport(report, null,new JRBeanCollectionDataSource(articuloList));
//El JasperViewer para visualizar, le pasamos como argumento nuestro "fillReport" de arriba.
JasperViewer jviewer = new JasperViewer(fillReport,false);
//Le damos un título al reporte.
jviewer.setTitle("Lista de Artículos.");
//La hacemos visible.
jviewer.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error cargando reporte.");
}
}
En caso de que el IDE indique error de sintaxis, verificar si tenemos todas las importaciones necesarias. A continuación la lista.
Código Java
import com.entidades.Articulo;
import com.entidades.Tipo;
import com.informes.ArticuloR;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import org.hibernate.Query;
import org.hibernate.Session;
import util.HibernateUtil;
Por último el formulario en ejecución junto con el reporte. En caso que el reporte aparezca detrás del formulario, modificar la propiedad “modalityType” indicando que sea “DOCUMENT_MODAL”.

No hay comentarios :

Publicar un comentario