viernes, 22 de marzo de 2013

IREPORT JasperViewer

Hola a todo el mundo que está metido en este mundo de programación, este es mi primer post y espero que pueda satisfacer sus necesidades.
Bueno voy a pasar a mostrar un poco de código para que puedan observar lo fácil que es mostrar una vista preliminar de nuestros reportes desde java...
Lo primero es nuestra conexión a la base de datos, para este ejemplo usare una base de datos en access... en fin, no importa el motor de base de datos, solo agregar el jdbc y cambiar la cadena de conexión.

La clase tiene como nombre Modulo()




public class Modulo {
    private final static Logger LOGGER = Logger.getLogger(Modulo.class.getName()); //Es muy importante el uso del LOGGER para poder mostrar mensajes y no el famoso System.out.print();
    String Driver="sun.jdbc.odbc.JdbcOdbcDriver";
    String URL="jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=C:/DataBase.mdb"; //Aquí deberían cambiar según el motor de base de datos que usan.
    String User="Administrador";
    String Password="pass";
    public Connection getConexionBD(){
        Connection cn = null;
        try {
            Class.forName(Driver).newInstance();
            cn=DriverManager.getConnection(URL,User,Password);            
            LOGGER.info("Se conecto!");
        } catch (Exception e) {
            LOGGER.warning(e.getMessage());
        }
        return cn; //Retorna la conexion
    }   
} 

En esta clase tenemos un metodo llamado MostrarReporteViewer(), recibe como
parametros la ruta donde esta nuestro reporte .jasper y los parametros del reporte.
public class Reportes {
  Connection cn=null;
  public void MostrarReporteViewer(String Ruta,Map parametros){
        try {
            BasicConfigurator.configure();
            Modulo obj = new Modulo();
            cn=obj.getConexionBD();            
            JasperReport reporte = (JasperReport) JRLoader.loadObject(Ruta);
            ////////////////////////////////////
            parametros.put(JRParameter.REPORT_LOCALE, Locale.US);
            //Esta línea es muy importante si el formato de los números de tu país es “999,999.00”, 
            //el IReport te mostrara por default “999.999,00”, con esta simple línea podrás solucionar ese problema.
            ////////////////////////////////////
            JasperPrint jasperPrint = JasperFillManager.fillReport(reporte,parametros, cn);
            JasperViewer jviewer=new JasperViewer(jasperPrint,false);
            jviewer.setTitle("");
            jviewer.setVisible(true);
            cn.close();
        } catch (JRException ex) {
            JOptionPane.showMessageDialog(null,"Problemas al Diseñar el reporte");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Problemas en la BD");
        }   
  }  
}


En esta clase arrancamos el reporte.

public class Ver {
    static Reportes reportes = new Reportes();
    public static void main(String[] args) {
        String Ruta="C:/ReportePrueba.jasper";//Ruta de reporte .Jasper
        Map parametros = new HashMap();//Parametros mapeados
        parametros.put("Codigo","001");//Parametro llamado "Codigo", se envia 001
        reportes.MostrarReporteViewer(Ruta, parametros);
    }
}

3 comentarios:

  1. ... y para que sirve "BasicConfigurator.configure(); ".

    Porque cuando lo ejecuto me sale << java.lang.noclassdeffounderror org/apache/commons/logging/logfactory >>. Donde me indica que me falta la librería "commons-logging-xxx.jar".

    ResponderEliminar
    Respuestas
    1. Hola,

      En el metodo que conecta a base de datos uso log4j entonces cuando este metodo es llamado desde donde se genera el reporte requiere de eso para cargar el log.

      Saludos.

      Eliminar
  2. no me pasa esta parte: JasperPrint jasperPrint = JasperFillManager.fillReport(reporte,parametros, cn);


    así lo tengo yo:
    try {
    String RutaInformeGanancias = "D:\\Exposicion\\23-04 InventOKY\\StoryOKY 5.0\\src\\Reportes\\Ganancias.jasper";
    // if (RutaInformeGanancias == null) {
    // System.out.println("No encuentro el archivo del reporte.");
    // System.exit(2);
    // }
    Map parametros = new HashMap();
    parametros.put("fechaIn", Fecha);
    parametros.put("fechaFin", Fecha2);
    JasperPrint jasperPrint = JasperFillManager.fillReport(RutaInformeGanancias, parametros, obj.getConnection());
    JasperViewer jviewer = new JasperViewer(jasperPrint, true);
    jviewer.setTitle("Ganancias");
    jviewer.setVisible(true);

    } catch (Exception e) {
    JOptionPane.showMessageDialog(this, "Error al Generar el informe" + e);
    }
    finally
    {

    obj.desconectar();

    }

    sería genial si me pudieras ayudar.

    ResponderEliminar