viernes, 16 de diciembre de 2016

REPORTES

“AÑO DE CONSOLIDACIÓN DEL MAR DE GRAU”
ESCUELA PROFESIONAL DE:

INGENIERÍA DE SISTEMAS Y TELEMÁTICA

TEMA: REPORTES

DOCENTE: MARCO AURELIO PORRO CHULLI.

ASIGNATURA: DESARROLLO DE SOFTWARE l

NOMBRE DEL GRUPO: “JAVA”

INTEGRANTES:

MALDONADO IDROGO BETZABETH YAMELI
PÉREZ SAUCEDO YORDIN ALBERTO

CICLO: V

GRUPO: “B”

AÑO: 2016

                         BAGUA GRANDE-UTCUBAMBA




TEMA: REPORTES

1.    CONTENIDO:
INSTALACIÓN DE IREPORT EN NETBEANS:
Primero es instalar iReport en netbeans. Este plugin en teoría no es necesario para utilizar jasperReport por separado. Este plugin nos facilita el diseño de las plantallas de jasperReport desde Netbeans.
Nos vamos a la página de netbeans y a la sección de plugins iReport y nos lo descargamos. No hay ninguno para la versión 8.0 de netbeans pero el último que hay que es el de la 7.4 nos sirve.
Una vez descargado nos vamos a Netbeans a Tools->Plugins (Herramientas->Plugins) y a la pestaña de Downloaded. Le damos al botón "AddPlugins" y buscamos la carpeta descomprimida del fichero que nos hemos descargado antes, el de iReport.

Con esto ya tenemos instalado el plugin y la librería principal de jasperReport. En Tools->Options (Herramientas->Opciones) podemos verlo.

Ahora necesitamos añadir a la librería otros ficheros y librerías para que nos funcione correctamente. Estos ficheros son una recopilación que he ido guardando cuando me investigué como instalar jasperreports, y son con los que me ha funcionado todo. En este enlace os lo podéis descargar:
LIBRERIAS PARA JASPERREPORT
Ahora nos vamos a las opciones de nuestro proyecto, botón derecho Properties, seleccionamos Libraries, pinchamos en la de jasperReports y le damos al botón Edit. Buscamos los ficheros que os he mencionado antes y adjuntamos todo y le damos a guardar.

Ahora vamos a hacer una prueba para ver si todo funciona. Lo primero de todo es crear un fichero jasper, que es como una plantilla. Con el plugin de iReport para Netbeans es fácil. En nuestro proyecto, en el paquete le damos a botón derecho y New. Elegimos Report y Empty Report. Se abren en Netbeans unas pantallas para diseñar nuestro fichero. Lo vamos a quedar vacío. En otro tutorial lo explicaré.

Por último un pequeño código que lo que hace es leer este report (extensión jrxml) en un pdf. El código y el proyecto de prueba lo tengo en este enlace para que os lo podais descargar:

Configuracion de  DataSource:
Como es lógico el primer paso consiste en tener un recurso configurado mediante JNDI, en mi caso particular he configurado un "data source" de Oracle en Tomcat 6 (que basicamente es lo mismo que Tomcat 5 ó 5.5 por lo que he leído en el manual). Para ello en el fichero context.xml de la configuración de Tomcat hay que incluir un bloque de configuración similar al siguiente.
<Resource name="jdbc/myDB" auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:XE"
    maxWait="-1" />
    username="scott" password="tiger"
    maxActive="20" maxIdle="10"
Como la mayoría habrá visto, este bloque es simplemente la configuración de Oracle
y para que Tomcat pueda acceder a la base de datos debes tener en la carpeta de
librerías de Tomcat el driver adecuado.
 Los ficheros que hayas de añadir a la carpeta de librerías van en función
 del recurso que estés configurando.
Llegados a este punto ya tenemos un recurso JNDI que tendrémos que configurar en nuestra aplicación para poder hacer uso del mismo. Como dice el título, esto lo haremos mediante Spring Framework (en mi caso la version 2.5.x, pero en versiones anteriores se hacía de manera similar). Para ello hay que añadir al fichero de configuración del contexto de aplicación (algo que por norma se llamará applicationContext-*.xml o similar) el siguiente bloque de código.
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
</bean>
       value="java:comp/env/jdbc/myDB" />
Y con esto hemos terminado, reconozco que para empezar he elegido una tarea bastante sencilla, aunque con esto te ahorras tener que leerte los capítulos pertinentes de los manuales de Spring y Tomcat ;)
Creacion de Reportes usando Wizard, archivo jrxml
Para esto vamos al menú "File -> New...". Con esto se abrirá la ventana de "New File" en la que seleccionaremos el formato de nuestro reporte. En mi caso seleccionaré la plantilla "Wood" aunque pueden seleccionar la que ustedes deseen, y hacemos clic en el botón "Launch Report Wizard"
                                  
Este wizard nos ayudará a crear un reporte 100% funcional en 6 pasos (en realidad 5 ya que empezamos directamente en el paso 2) que podremos ver desde el mismo iReport sin necesidad de escribir una solo línea de código Java. Estos 7 pasos son:
1.      Selección de la ubicación en la que se guardará nuestro reporte.
2.      Selección del datasource e introducción del query para obtener los datos que nos interesan.
3.      Selección de los datos que queremos mostrar en el reporte.
4.      Creación de grupos para el reporte (se explicará en un post posterior).
5.      Selección del layout o acomodo de los datos en el reporte
6.      Felicitación por tenerminar nuestro reporte.
Los pasos interesantes son el 3 y el 4, así que será en estos en los que nos enfocaremos más.
El paso 1 se realiza de forma automática, así que no tenemos mucho que hacer en él. En el paso 2 (en donde comenzamos) seleccionamos el directorio en el que queremos guardar nuestro reporte y el nombre que tendrá.
Nota: La extensión de documentos de reportes generados por JasperReports es ".jrxml" que significa "jasper reports xml", y es un documento xml que contiene los datos para generar un archivo compilado (".jasper") que es el que usaremos principalmente en nuestras aplicaciones Java (aunque también podriamos optar por compilar nuestro archivo ".jrxml" desde la misma aplicación Java y así generar el archivo ".jasper" correspondiente).
En este momento no importa mucho en donde guardemos el archivo que se generará, ya que posteriormente tendremos que moverlo para que nuestra aplicación java pueda encontrarlo. Por mi parte llamaré al archivo "reporte1".
Hacemos clic en el botón "Next" para continuar con el paso 3. En este paso debemos seleccionar el datasource desde el que los datos del reporte serán tomados. Por default está seleccionado el "Empty datasource". Así que nosotros seleccionamos el datasource "Conexion MySQL Pruebas" (el datasource que creamos anteriormente).
Al hacer el cambio del datasource veremos que aparece un textarea con el título "Query(SQL)" y en la parte inferior debemos tener un mensaje de error que dice "Invalid query".                                   

Esto ocurre porque, efectivamente, en el textarea no tenemos una consulta válida (de hecho no tenemos ninguna). Por lo que ahora corregiremos eso. Para esto tenemos 3 opciones:
1.    Escribir una consulta nosotros mismos de forma directa.
2.    Cargar una consulta que tengamos guardada en algún archivo .sql o .txt.
3.    Crear una consulta usando el "diseñador de consultas".                                           
Nosotros haremos uso del diseñador de consultas. Hacemos clic en el botón "Design query" con lo que se abrirá una nueva ventana que está dividida en tres secciones.                        

La primera sección es la de la estructura de la consulta. Aquí básicamente podremos cambiar entre las sentencias que estamos editando (SELECTWHEREORDER BY, etc.). La segunda sección es la de los elementos de nuestra base de datos (tablas, vistas, y temporales locales). Aquí podremos seleccionar los elementos de los que queremos obtener datos para la consulta. Finalmente la tercer sección nos muestra los elementos que hemos seleccionado de la segunda sección para que podamos seleccionar los datos a obtener.
La consulta que haremos será para obtener todos los datos de la tabla "participantes", con excepción del "ID". Para esto hacemos doble clic sobre el nombre de la tabla "participantes" en la segunda sección de la ventana que tenemos abierta. Con esto aparecerá en la tercer sección otra ventana con el título "participantes" y un conjunto de checkboxes, cada uno con un campo de nuestra tabla. Para generar la consulta que nos interesa solamente seleccionamos todos los checkboxes (con excepción del "ID") y veremos que la consulta se genera en la primer sección.
Ya solo damos clic en el botón "OK".                                        

Con esto ya tendremos nuestra consulta en el textarea correspondiente y podemos continuar con el paso 4, para lo que hacemos clic en el botón "Next".
En este paso solo tenemos que seleccionar cuáles campos del query generado en el paso anterior queremos que se muestren en el reporte. Como nosotros queremos que se muestren todos pasamos todos los campos del lado izquierdo al lado derecho y hacemos clic en el botón "Next".
                                          

Ahora en el paso 5 debemos seleccionar cómo queremos que los datos sean agrupados. Esto lo explicaré en algún otro post, pero por el momento dejemos todo en blanco y demos clic en el botón "Next".
El último paso es el solamente una felicitación por haber creado un nuevo reporte.
                        

Ahora hacemos clic en el botón "Finish" y ya podremos ver la plantilla de nuestro reporte.

Si queremos ver como se verá el reporte final, en este caso, podemos ver un preview con los datos reales si cambiamos a la vista de "preview" en la ventana del editor.

CAMPOS CALCULADOS EN IREPORT.
Puede crear, editar o ver un campo de objeto cuyo valor se calcula a partir de valores de otros campos. Estos campos calculados pueden existir en el mismo objeto o en otro objeto relacionado.
Los campos calculados tienen las siguientes características:
·Son siempre de sólo lectura.
·Se pueden utilizar en informes
·Se pueden añadir a las vistas de Contexto, Detalles, Actividad, Lista, Lista filtrada de la página de inicio, Lista filtrada, Actividad y Carpetas en la interfaz de usuario IBM® OpenPages GRC Platform.
·Deben tener nombres de campo exclusivos. La adición de más de un campo calculado con el mismo nombre de campo en la misma vista dará como resultado un error.
Si desea importar (cargar) y exportar (volcar) definiciones de campos calculados, debe utilizar la herramienta ObjectManager. Para obtener detalles, consulte Importación de las definiciones de campo calculado.
Los campos calculados requieren un servidor Cognos instalado y activo ya que utilizan Cognos Computation Handler. Si un campo calculado se ejecuta en la aplicación y el servidor Cognos no está disponible, los usuarios visualizan el siguiente mensaje: Cognos no está disponible. Póngase en contacto con el administrador del sistema.
Procedimiento
1.    En Report Studio, modele el campo calculado en un objeto de cálculo. Para obtener detalles, consulte Modelado de un nuevo campo calculado en Cognos.
2.    En la interfaz de usuario de la aplicación OpenPages GRC Platform:
a.    Defina el campo calculado. Para obtener detalles, consulte Definición de un campo calculado.
b.    Vuelva a generar el entorno de creación de informes. Para obtener detalles, consulte Actualización del entorno de creación de informes.
Hay dos formas de crear campos calculados en el Report Designer. El primer método es agregar un cuadro de texto al informe e ingresar una expresión en el mismo que se ejecutará cuando se genere el informe. Los pasos para este método se describen a continuación, incluso los ejemplos de expresión. El segundo método es agregar un campo Calculado no delimitado al informe. Solo puede hacer esto desde el árbol Sección de informes. Haga clic con el botón derecho del ratón en el nodo Calculado del árbol y seleccione Agregar. Esto creará un campo no delimitado que se puede utilizar en el informe. La expresión del campo no delimitado se debe establecer en la propiedad Fórmula del campo. Una vez que se establece la Fórmula, arrastre el campo sobre la sección en el informe en donde desea utilizarlo.
EJECUCIÓN DE REPORTES,ARCHIVO JASPER:
Jasper Report es una librería para la generación de informes. Está escrita en java y es libre. http://jasperforge.org/ El funcionamiento consiste en escribir un xml donde se recogen las particularidades del informe. Este xml lo tratan las clases del Jasper para obtener una salida que pueden ser un PDF, XML, HTML, CSV, XLS, RTF, TXT.
Para generar el xml, o el compilado .jasper les recomiendo descargar la herramienta iReport que es un Entorno Gráfico que está implementado en java y se integra perfectamente con el Jasper Report http://jasperforge.org/sf/projects/ireport
Aunque JasperReports se utiliza principalmente para capacidades de reporte a las aplicaciones basadas en la Web a través de la API de Servlet, no tiene absolutamente ninguna dependencia de la API Servlet o cualquier otra biblioteca de Java EE. No hay nada que nos impida la creación de aplicaciones de escritorio Java para generar informes con JasperReports.
JasperReports nos permite separar los datos en secciones. Estas secciones incluyen:
·El título del informe, que aparecerá una vez en la parte superior del informe.
·Un encabezado de página, que aparecerá en la parte superior de cada página.
·Una sección de detalle, que normalmente contiene los datos de los informes primarios.
·A pie de página, que aparecerá en la parte inferior de cada página.
·Una sección de resumen, que aparecerá al final del informe.
ENLACE DE REPORTE CON VENTANA JDIALOG.USO DE JASPERVIEWER Y EJEMPLOS:
Un JFrame permite crear una ventana con ciertas características, por ejemplo podemos visualizarla en nuestra barra de tareas, caso contrario de los JDialog, ya que estos últimos son Ventanas de Dialogo con un comportamiento diferente, no se puede ver la ventana en la barra de tareas ni posee los botones comunes de maximizar o minimizar....
Los JDialog pueden ser hijos de JFrames o de otros JDialog mientras que losJFrame no (Como así Hijos?), es decir, si tenemos claros conceptos de programación podemos relacionar esto de Hijos con el concepto de Herencia (Aunque no directamente, es mas a nivel conceptual), con estos componentes podemos hacer que una Ventana sea Padre de otra Ventana de tipo JDialog, asignándole algún tipo de comportamiento o dejando la ventana padre como Principal.
Los reportes son otras de las utilidades más importantes en las aplicaciones ya que su función es dar al usuario información ordenada y limpia así como un formato adecuado para poder ser llevado a impresión o almacenarlo en algún tipo de fichero como .doc, .odt, pdf, etc.
Antes de continuar, debemos contar en el proyecto con la librería:
jasperreports-3.7.6.jar
Si antes se instaló el JasperReports es posible que la librería ya lo tengamos en el ordenador, incluso el IDE de desarrollo lo tiene indexado, solo deberá ser añadido a proyecto.
Otras de la librerías que necesitaremos están comentados en el encabezado del código de Ejemplo.
El siguiente procedimiento va a recibir como parámetro la ubicación del reporte dentro del proyecto, para ello será necesario incluir los reportes en algún directorio dentro del proyecto en el que trabajamos, en mi caso la estructura es la siguiente:
beastieux --> reports --> MyReporte.jrxml
private void abrirReporte(String archivo)
    {
        try {
            JasperReport report = JasperCompileManager.compileReport(archivo);
            JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());
            JasperViewer.viewReport(print, false);
        } catch (JRException jRException) {
            System.out.println(jRException.getMessage());
        }
    }
La linea de código encargada de general la ruta absoluta de la ubicación del reporte es el siguiente:
getClass().getResource("/beastieux/reports/MiReporte.jrxml").getPath()
Además, algo muy importante que se necesita para abrir el reporte es la conexión a la base de datos. En este ejemplo lo hice con PostgreSQL, ustedes pueden hacerlo con el que gusten, pueden verlos en los ejemplos de conexión a diferentes base de datos realizados en los post anteriores de este tutorial. Como observarán, la función coneccionSQL() nos retorna la conexión a la base de datos, el cual será usado directamente como tercer parámetro en la linea:
JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());
Código de Ejemplo:
jasperreports-3.7.6.jar
 * commons-digester-1.7.jar
 * commons-logging-1.0.4.jar
 * commons-collections-2.1.1.jar
 * commons-beanutils-1.8.0.jar
 */
package beastieux.gui;
import java.awt.CardLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;
/**
 *
 * @author beastieux
 */
public class Ejm20_JasperReport extends JFrame {
    public Ejm20_JasperReport()
    {
        JButton btn1=new JButton("Abrir Reporte");
            btn1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn1ActionPerformed(evt);
            }
        });
        this.add(btn1);
        this.setLayout(new CardLayout());
        this.setSize(200,100);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
    private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {
        abrirReporte(getClass().getResource("/beastieux/reports/MiReporte.jrxml").getPath());
    }
    private void abrirReporte(String archivo)
    {
        try {
            JasperReport report = JasperCompileManager.compileReport(archivo);
            JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());
            JasperViewer.viewReport(print, false);
        } catch (JRException jRException) {
            System.out.println(jRException.getMessage());
        }
    }
    private Connection coneccionSQL()
    {
           try
            {
                    String cadena;
                    cadena="jdbc:postgresql://127.0.0.1:5432/postgres";
                    Class.forName("org.postgresql.Driver");
                    Connection con = DriverManager.getConnection(cadena, "usuario","contraseña");
                    return con;
            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }
            return null;
    }
    public static void main(String args[])
    {
        Ejm20_JasperReport obj = new Ejm20_JasperReport();
        obj.setVisible(true);
    }
}
2.    Resumen:
INSTALACIÓN DE IREPORT EN NETBEANS:
Primero es instalar iReport en netbeans. Este plugin en teoría no es necesario para utilizar jasperReport por separado. Este plugin nos facilita el diseño de las plantillas de jasperReport desde Netbeans.
Configuración de  DataSource:
Como es lógico el primer paso consiste en tener un recurso configurado mediante JNDI.
3.   Summary:
INSTALLATION OF IREPORT IN NETBEANS:
First is to install iReport in netbeans. This plugin in theory is not necessary to use jasperReport separately. This plugin makes it easy to design jasperReport templates from Netbeans.
Configuración de DataSource:
Of course the first step is to have a resource configured by JNDI.

   Recomendaciones
·         Para los reportes tienes JarperReports que se puede usar con iReport para más sencillez.Para la aplicacion de escritorio me parece mucho (no 100% seguro) que NetBeans tiene un editor Wysiwyg para interfaces.

·         Para la parte web podrias usar MyEclipse con algun framework web, ya sea Struts, Spring, etc. Tambien podrias usar el mismo NetBeans con JSF.
Conclusiones
·         Este trabajo de investigación es sencillo pero se ve la forma de poder conectarnos a diferentes bases de datos en este caso a SQL server, eso sí con la limitación de tener que utilizar un informe por cada consulta. Esto no es problema ya que podemos incluir tantos su informes como queramos obteniendo finalmente el resultado que esperábamos en dicho reporte.
·       Gracias  a este Trabajo  tenemos dos métodos y los llamo desde el servlet en donde el login debe revisar que se encuentre el usuario y la contraseña en la BD y también debe validar que nivel de usuario tiene para ver a cuales paginas puede acceder tendrías algún ejemplo o algo así de cómo debe ir el método en el dao.

Apreciación del Equipo
El reporte con la base de datos es una ayuda mutua y concreta para mostrar información desde  una base de Dados y el driver/conector que usemos para conectar con esa base de datos desde java, entonces podemos usar con  ello los reportes desde java.
 Glosario de Términos
PLUGIN: Firefox 42 se bloquea al intentar ejecutar el plugin de Java. NOTA: La solución alternativa se aplica a Firefox 42 y requiere la instalación de Windows Java Versión 8 Actualización 66 Versión 18 o versiones posteriores.
JASPERREPORTS: Es una biblioteca de creación de informes que tiene la habilidad de entregar contenido enriquecido al monitor, a la impresora o a ficheros PDF, HTML, XLS, CSV y XML.
DATASOURCE: Esta norma propone el uso de fuente de datos (DataSource), para tal fin. La API JDBC (Java Data Base Connectivity) proporciona una interfaz de programación para acceso a datos de Base de Datos Relacionales desde el lenguaje de programación Java: El paquete java.sql es el corazón de la API JDBC 2.0.
JNDI: El Java Naming and Directory Interface (JNDI) es un interface de programación (API) que proporciona funcionalidades de nombrado y directorio a las aplicaciones escritas usando Java. Está definido para ser independiente de cualquier implementación de servicio de directorio.
      Linkografía
http://www.academia.edu/7646133/TESIS_DE_DISENO_E_IMPLEMENTACION_DE_UN_SISTEMA_DE_VENTAS


DIAPOSITIVAS: http://es.slideshare.net/YordinAlbertoPrezSau/reportes-70217754



VIDEO: 










No hay comentarios:

Publicar un comentario