Author Topic: problemas con reports  (Read 2746 times)

nrub

  • Newbie
  • *
  • Posts: 8
  • Karma: 0
    • View Profile
problemas con reports
« on: Julio 07, 2008, 07:42:27 pm »
Soy nueva en esto de la creación de reportes con ireports, yo genero un reporte con un subreporte y cuando lo ejecuto se repiten los datos del subreport hasta llenarme 152 hojas cuando solo es necesaria una y me pasa lo mismo cuando hago la llamada desde netbeans.
No se como solucionarlo, adjunto el código por si facilita las cosas:

import java.util.*;
import java.sql.*;
import java.sql.Date;
import java.awt.event.*;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.lang.String;



/*Librerías necesarias para Jasper Reports*/
import org.apache.commons.beanutils.*;
import org.apache.commons.collections.*;
import org.apache.commons.digester.*;
import org.apache.commons.logging.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.JRException;


public class Report1 extends Thread {
    cConnection conexion;
         
         
       public void run () {
           try
           {
String urlMaestro = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper";
String urlSubreporte = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4_subreport0.jasper";

//URL urlMaestro = this.getClass().getResource("C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper"); 
//URL urlSubreporte = this.getClass().getResource("C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4_subreport0.jasper");

      if (urlMaestro == null) {
   System.out.println("No encuentro el archivo del reporte maestro.");
        System.exit(2);
      }
           if (urlSubreporte == null) {
        System.out.println("No encuentro el archivo del subreporte.");
   System.exit(2);
      }
   
    JasperReport masterReport = null;
      try {
         masterReport = (JasperReport) JRLoader.loadObject(urlMaestro);
      } catch (JRException e) {
         System.out.println("Error cargando el reporte maestro: " + e.getMessage());
         System.exit(3);
      }
            JasperReport subReport = null;
      try {
         subReport = (JasperReport) JRLoader.loadObject(urlSubreporte);
      } catch (JRException e) {
         System.out.println("Error cargando el subreporte: " + e.getMessage());
         System.exit(3);
      }

//Ruta del archivo jasper
//               String fileName = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper";
//Obtener una conexion a la base de datos
               conexion = new cConnection();
               Connection con = conexion.mkConection();
                ResultSet rs = null;
            Statement stm = con.createStatement();
            String strSQL = "SELECT Budget.Project,Budget.Date,Company.IdentityCard,Company.Name,Expenditures.Budget," +
                    "Expenditures.Hito,Expenditures.Description,Expenditures.UnitCost,Expenditures.Units,Expenditures.Quota," +
                    "Project.Code,Project.Acronym,Project.Title,Project.Company FROM Budget,Company,Expenditures,Project " +
                    "WHERE Budget.Project=\'ABCDEFG\' AND Budget.Date=\'2008-01-01\';";
//Ejecuta la consulta SQL
            rs = stm.executeQuery(strSQL);
            rs.next();
            String budgetProject = rs.getString("Project");
            java.sql.Date fecha  = new java.sql.Date(0);
            fecha = rs.getDate("Date");
            String cif = rs.getString("IdentityCard");
            String name = rs.getString("Name");
            int budgetexpenditures = rs.getInt("Budget");
            int hito = rs.getInt("Hito");
            String descripcion = rs.getString("Description");
            double unitcost = rs.getDouble("UnitCost");
            double units = rs.getDouble("Units");
            double quota = rs.getDouble("Quota");
            String codigo = rs.getString("Code");
            String acronimo = rs.getString("Acronym");
            String titulo = rs.getString("Title");
            int comp = rs.getInt("Company");
           
           
           
           
            System.out.println("Titulo: "+titulo+"   Comp: "+comp);
//Trabajar con el result set…
            strSQL = "SELECT FullName FROM Company WHERE EN="+comp+";";
            rs = stm.executeQuery(strSQL);
            rs.next();
            String company = rs.getString("FullName");
//Cerrar todo
           
           rs.close();
           stm.close();
           
//Pasamos parametros al reporte
               Map parameters=new HashMap();
            parameters.put("Project",budgetProject);
            parameters.put("Date",fecha);
            parameters.put("IdentityCard",cif);
            parameters.put("Name",name);
            parameters.put("Budget",budgetexpenditures);
            parameters.put("Hito",hito);
            parameters.put("Descripction",descripcion);
            parameters.put("UnitCost",unitcost);
            parameters.put("Units",units);
            parameters.put("Quota",quota);
            parameters.put("FullName",company);
            parameters.put("Code",codigo);
            parameters.put("Acronym",acronimo);
            parameters.put("Title",titulo);
            parameters.put("Company",comp);
            parameters.put("SUBREPORT",subReport);
            parameters.put("CODE",codigo);
            parameters.put("DATE",fecha);
           
           
           
            try{
 //Preparación del reporte (reporte diseñado con ireport)
           JasperPrint jasperPrint=JasperFillManager.fillReport(masterReport,parameters,con);
            //Se lanza el viewer de jasper, no termina la aplicación al salir
           JasperExportManager.exportReportToPdfFile(jasperPrint, "H:/reportes/Reportes en pdf/Reporte.pdf");
            //Se lanza el Viewer de Jasper, no termina aplicación al salir
           JasperViewer jviewer = new JasperViewer(jasperPrint,false);
           jviewer.setVisible(true);
            //jviewer.show();
            }catch (JRException e) {
         System.out.println("Error llenando el reporte maestro: " + e.getMessage());
         try {
            con.close();
         } catch (SQLException e1) {
         }
         System.exit(5);
      }
           
           
                     
           }catch(Exception j)
           {
               System.out.println("Mensaje de Error:"+j.getMessage());
           }
           finally{
               conexion.closeConnection();
           }
       
       }
       

       public static void main(String[] args){
        Report1 thread_exp = new Report1();
        thread_exp.run();
    }
}
       class cConnection {
    /*Atributos*/
    private String url = "";
    private String usr = "";
    private String pswd = "";
    private Connection con;
    /*Constructor, carga puente JDBC-ODBC*/
    public cConnection() {
        loadDriver();
    }
    /**
     * Carga el driver de la conexión a la base de datos
     */
    private void loadDriver() {
        try {
//Instancía de una nueva clase para el puente
//sun.jdbc.odbc.JdbcOdbcDriver
//El puente sirve entre la aplicación y el driver.
            Class.forName( "" );
        } catch(ClassNotFoundException e) {
            System.out.println("Error al crear el puente JDBC-ODBC");
        }
    }
    /**
     * Obtiene una conexión con el nombre del driver especificado
     * @param driverName Nombre del driver de la base de datos
     * @return
     */
    public Connection mkConection() {
        //url = url + driver;
        System.out.println("Estableciendo conexión con " + url);
        try {
//Obtiene la conexión
            con = DriverManager.getConnection( url,usr,pswd);
        } catch(SQLException sqle) {
            System.out.println("No se pudo establecer la conexión");
            return null;
        }
        System.out.println("Conexión establecida con: " + url);
//Regresa la conexión
        return con;
    }
  /* Cerrar la conexión.
 */
    public boolean closeConnection() {
        try {
            con.close();
        } catch(SQLException sqle) {
            System.out.println("No se cerro la conexión");
            return false;
        }
        System.out.println("Conexión cerrada con éxito ");
        return true;
    }
   
       }
      //class cConnection

muchas gracias

 

ey