Foros del Web » Programación para mayores de 30 ;) » Java »

llenar reporte con funcion????

Estas en el tema de llenar reporte con funcion???? en el foro de Java en Foros del Web. Hola amigos haber si alguien puede ayudarme necesito llenar u nreporte hecho en ireport pasandole parametros de una funcion que tiene los datos para llenar ...
  #1 (permalink)  
Antiguo 25/11/2008, 13:49
 
Fecha de Ingreso: junio-2008
Mensajes: 49
Antigüedad: 15 años, 10 meses
Puntos: 0
Exclamación llenar reporte con funcion????

Hola amigos

haber si alguien puede ayudarme necesito llenar u nreporte hecho en ireport pasandole parametros de una funcion que tiene los datos para llenar el reporte pero no se como hacerlo.



Gracias de antemano.-
  #2 (permalink)  
Antiguo 26/11/2008, 01:11
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Mensaje Respuesta: llenar reporte con funcion????

Hola,

Cita:
Iniciado por yomedi Ver Mensaje
... pasandole parametros de una funcion que tiene los datos para llenar el reporte ...
¿Y se supone que la función regresa los datos en String, XML, Array, Hibernate, ResultSet, Collection, TableModel, Connection, Connection String, etc., etc., etc.?

Saludos,
  #3 (permalink)  
Antiguo 26/11/2008, 07:52
 
Fecha de Ingreso: junio-2008
Mensajes: 49
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: llenar reporte con funcion????

Si, devuelve los datos en un array...

ya consegui obtener los datos lo que hice fue a los parametros del Map parameters le asigne cada una de las variables declaradas en el array y cuando debueo me devuelve valor en las variable (lo debugueo por que no me muestra el reporte). aqui voy a pegar el codigo que utilizo para cargar el reporte a ver si me arrojas un poco de luz.


Código:
public void runReporte(String var) {
      TestSAPBAPI sapfuncion = new TestSAPBAPI( var );
      data = sapfuncion.getData();  
        try
        {
            // Ubicacion del reporte
            String datos = System.getProperty("user.dir") +
                            "/repDC_Ticket.jasper";
            
            System.out.println("rutareporte:" + datos);
            if (datos == null) 
            {                
                System.out.println("No encuentro el archivo del reporte maestro.");
                System.exit(2);
            }
            JasperReport reporteMaestro = null;
            try 
            {
                reporteMaestro = (JasperReport) JRLoader.loadObject(datos);
                
            } 
            
            catch (JRException e)             {
                 JOptionPane.showMessageDialog(null, "No se pudo cargar el reporte", "Error al ejecutar reporte", 
                 JOptionPane.ERROR_MESSAGE); 
            } 
            // Llena el reporte 
            //Aqui se pasan parametros.
           
            Map parametros = new HashMap();
                parametros.put("pCodigo", data[ 0 ] [ 0 ]);
                parametros.put("pCantidad", data[ 0 ] [ 1 ]);
                parametros.put("pEmpleado", data[ 0 ] [ 2 ]);
                parametros.put("pConcepto", data[ 0 ] [ 3 ]);
                parametros.put("pUsuario", data[ 0 ] [ 4 ]);
                parametros.put("pFechaGeneracion", data[ 0 ] [ 5 ]);
                parametros.put("pFechaVencimiento", data[ 0 ] [ 6 ]);                
                parametros.put("pHora", data[ 0 ] [ 7 ]);           

            //Reporte diseñado y compilado con iReport
            JasperPrint jasperPrint = JasperFillManager.fillReport(reporteMaestro,parametros);            
            //Se lanza el Viewer de Jasper
            JasperViewer jviewer = new JasperViewer(jasperPrint,false);         
            jviewer.setVisible(true);
         }   catch (Exception j)
         {
            JOptionPane.showMessageDialog(null, "No se pudo cargar el reporte", "Error al ejecutar reporte", 
            JOptionPane.ERROR_MESSAGE);  
         }
        
    }
entra directamente al exception como si no encontrara el reporte pero el path que me devuelve es el correcto. no tengo idea qeu podra ser...
  #4 (permalink)  
Antiguo 26/11/2008, 13:21
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Mensaje Respuesta: llenar reporte con funcion????

Cita:
Iniciado por yomedi Ver Mensaje
... entra directamente al exception como si no encontrara el reporte pero el path que me devuelve es el correcto ...
Si te genera una Exception, por qué no miras .getMessage() o .toString(), o imprimes el Stack Trace de dicha exception, normalmente cuando diseñas una aplicación, lo último que vas a realizar, inclusive después de la etapa de depuración va a ser poner las estructuras try {} cath {}. A tí no te es útil que el sistema te despliegue un mensaje que diga: 'No fue posible mostrar el reporte'.

Cita:
Iniciado por yomedi Ver Mensaje
Código:
            // Ubicacion del reporte
            String datos = System.getProperty("user.dir") +
                            "/repDC_Ticket.jasper";
            System.out.println("rutareporte:" + datos);
            if (datos == null) 
            {                
                System.out.println("No encuentro el archivo del reporte maestro.");
                System.exit(2);
            }
Voy a suponer que "rutareporte:" + datos, te imprime correctamente "rutareporte: /home/path/userdir/repDC_Ticket.jasper", y que el reporte existe, está compilado con la misma versión de iReport que la librería JasperReports que estas usando, que no tiene errores, etc.

Cita:
Iniciado por yomedi Ver Mensaje
Código:
            JasperReport reporteMaestro = null;
            try 
            {
                reporteMaestro = (JasperReport) JRLoader.loadObject(datos);
                
            } 
            catch (JRException e)             {
                 JOptionPane.showMessageDialog(null, "No se pudo cargar el reporte", "Error al ejecutar reporte", 
                 JOptionPane.ERROR_MESSAGE); 
            }
Llegando hasta aquí el código, JRLoader intenta cargar el reporte, si te aparece el mensaje el messagebox "Error al ejecutar reporte", definitivamente no pudo cargar el reporte, las librerías de Jasper no son las versiones correctas, el reporte no existe, el reporte no está bien diseñado (como el caso que hayas modificado el XML a mano), etc.

Cita:
Iniciado por yomedi Ver Mensaje
Código:
            //Reporte diseñado y compilado con iReport
            JasperPrint jasperPrint = JasperFillManager.fillReport(reporteMaestro,parametros);            
            //Se lanza el Viewer de Jasper
            JasperViewer jviewer = new JasperViewer(jasperPrint,false);         
            jviewer.setVisible(true);
         }   catch (Exception j)
         {
            JOptionPane.showMessageDialog(null, "No se pudo cargar el reporte", "Error al ejecutar reporte", 
            JOptionPane.ERROR_MESSAGE);  
         }
        
    }
Llegado hasta aquí el código debería de presentarte un visor del reporte, posiblemente genere un Warning de 'no hay conexión', pero aún así debería de verse el reporte, posiblemente vacío.

Los parámetros que le estas pasando al reporte, no son datos, son parámetros, si diseñaste el reporte directamente de una base de datos y le pasas los parámetros por Map(), no van a reemplazar el espacio que reservaste para los campos de la base de datos, y por consiguiente el reporte va a salir vacío.

Cita:
Iniciado por yomedi Ver Mensaje
entra directamente al exception como si no encontrara el reporte pero el path que me devuelve es el correcto. no tengo idea qeu podra ser...
¿Cual de todos los exception, cual es el mensaje?
Adivinar no es mi fuerte.

Yo cargo la información de Jasper de esta forma, lo modifiqué para no usar la conexión y usar reportes compilados, me presenta un Warning, donde no pudo encontrar la base de datos, pero aún así veo el reporte vacío.

Código:
    public JasperPrint Reporte04() throws DataConnectionException, SQLException, JRException {
        // JasperReport jasperReport = JasperCompileManager.compileReport(Main.getProperty("reportes_filepath") + "/jaspReport04.jrxml");
        // JasperPrint jasperPrinter = JasperFillManager.fillReport(jasperReport, new HashMap(), new DataConnection().getConnection());
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(Main.getProperty("reportes_filepath") + "/jaspReport04.jasper");
        JasperPrint jasperPrinter = JasperFillManager.fillReport(jasperReport, new HashMap());
        return jasperPrinter;
    }
....
    private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if (Main.usuario.hasAccess(13)) {
            try {
                Reportes reportes = new Reportes();
                JasperViewer.viewReport(reportes.Reporte04(), false);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(this,
                        "Ha ocurrido un error al intentar imprimir el documento.\n" +
                        ex, getTitle(), JOptionPane.ERROR_MESSAGE);
            }
        }
    }
No me queda más que decirte que revises las versiones de los componentes de JasperReports que estas usando, revisa el reporte por posibles errores y elimina los try {} catch {} mientras estas depurando, recuerda que los 'parameters' No son los 'datos', y si lo deseas ... 'muestra el error que genera Jasper', para que 'posiblemente' alguien mas te de una solución.

Saludos,
  #5 (permalink)  
Antiguo 27/11/2008, 16:44
 
Fecha de Ingreso: junio-2008
Mensajes: 49
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: llenar reporte con funcion????

Hola,

Ante todo gracias por responder...

despues de mucho revisar encontre el error y erar problema de versiones de las librerias de ireport y java, lo que hice fue copiar en la carpeta lib\ext\ de java las librerias de lib\ de ireport y listo ya me muestra el viewr que por cierto me sale el reporte en blanco por que tenias razon los parametros no son datos no estaba ni cerca de llenar el reporte con datos ya que tengo que llenarlos de un arreglo estoy buscando informacion de como hacerle encontre algo de JRDatasource para pasarlo desde un beans de java pero no se como aplicarlo si tienes algun ejemplo para guiarme de ahi te lo agradeceria.


Saludos.-
  #6 (permalink)  
Antiguo 27/11/2008, 21:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: llenar reporte con funcion????

Hola,

Exactamente, se necesita una clase que implemente la interfaz JRDatasource.
http://jasperreports.sourceforge.net...ataSource.html

Creo que en la más adecuada, (por ser un Array), sería JRBeanArrayDataSource.
http://jasperreports.sourceforge.net...ataSource.html

Tienes que crear un Bean, que funcione como Data Transfer Object DTO, crear una instancia por cada fila y agregarlos a un Array, instanciar un JRBeanArrayDataSource con dicho Array y pasarselo a fillReport.

Object[] data = new Object[2];
data[0] = new DatosBean(1, "A", 0, 1, 0, 1, "D");
data[1] = new DatosBean(2, "B", 1, 0, 1, 0, "D");
JRBeanArrayDataSource dataArray = new JRBeanArrayDataSource(data);
JasperPrint jasperPrinter = JasperFillManager.fillReport(jasperReport, new HashMap(), dataArray);

Un excelente ejemplo, pero con "JRBeanCollectionDataSource", que viene siendo muy parecido a "JRBeanArrayDataSource" ...
http://www.crysfel.com/index.php/200...-jasperreport/

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:25.