[Resuelto] Problema con iReport

Iniciado por Pantera80, 15 Diciembre 2014, 11:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Pantera80

Hola a todos. Resulta que he creado un informe con iReport. Para ello he utilizado el plugin
de Netbeans. Con este informe accedo a una base de datos que he creado en PostgreSQL.

El problema es que me sale el siguiente error, se agradece cualquier tipo de ayuda:


Error al producir informe: net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getValue())); //$JR_EXPR_ID=10$
                       <--------------------------------------------------------------->
2. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getValue())); //$JR_EXPR_ID=11$
                       <------------------------------------------------------------------>
3. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getValue())); //$JR_EXPR_ID=18$
                       <------------------------------------------------------------------->
4. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getValue())); //$JR_EXPR_ID=19$
                       <----------------------------------------------------------------->
5. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getValue())); //$JR_EXPR_ID=20$
                       <------------------------------------------------------------------------>
6. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getOldValue())); //$JR_EXPR_ID=10$
                       <------------------------------------------------------------------>
7. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getOldValue())); //$JR_EXPR_ID=11$
                       <--------------------------------------------------------------------->
8. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getOldValue())); //$JR_EXPR_ID=18$
                       <---------------------------------------------------------------------->
9. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getOldValue())); //$JR_EXPR_ID=19$
                       <-------------------------------------------------------------------->
10. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getOldValue())); //$JR_EXPR_ID=20$
                       <--------------------------------------------------------------------------->
11. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getValue())); //$JR_EXPR_ID=10$
                       <--------------------------------------------------------------->
12. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getValue())); //$JR_EXPR_ID=11$
                       <------------------------------------------------------------------>
13. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getValue())); //$JR_EXPR_ID=18$
                       <------------------------------------------------------------------->
14. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getValue())); //$JR_EXPR_ID=19$
                       <----------------------------------------------------------------->
15. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getValue())); //$JR_EXPR_ID=20$
                       <------------------------------------------------------------------------>
15 errors




Adjunto el código XML del informe:

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" >
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Juanan\\Proyecto\\Aplicación\\Cliente\\src\\cliente\\"]]></defaultValueExpression>
</parameter>
<parameter name="FECHA_SERVICIO" class="java.sql.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM PEDIDO WHERE FECHA_SERVICIO = $P{FECHA_SERVICIO} ORDER BY ID_RUTA;]]>
</queryString>
<field name="id_empleado" class="java.lang.Integer"/>
<field name="id_barrio" class="java.lang.Integer"/>
<field name="fecha_servicio" class="java.sql.Date"/>
<field name="total_importe" class="java.math.BigDecimal"/>
<field name="id_pedido" class="java.lang.Long"/>
<field name="id_cliente" class="java.lang.Integer"/>
<field name="id_ruta" class="java.lang.Integer"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="16" width="555" height="44" backcolor="#FF0033" />
<textField>
<reportElement x="65" y="13" width="100" height="20" forecolor="#000000" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{id_ruta}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="15" y="13" width="50" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[RUTA :]]></text>
</staticText>
<textField>
<reportElement x="328" y="13" width="213" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{fecha_servicio}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="176" y="13" width="131" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[FECHA SERVICIO :]]></text>
</staticText>
</frame>
</band>
</title>
<detail>
<band height="414" splitType="Stretch">
<subreport>
<reportElement x="0" y="314" width="200" height="100" />
<subreportParameter name="ID_PEDIDO">
<subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformePedidos.jasper"]]></subreportExpression>
</subreport>
<subreport>
<reportElement x="0" y="53" width="200" height="100" />
<subreportParameter name="ID_CLIENTE">
<subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformeCliente.jasper"]]></subreportExpression>
</subreport>
<staticText>
<reportElement x="0" y="2" width="100" height="20" />
<text><![CDATA[id_empleado]]></text>
</staticText>
<textField>
<reportElement x="100" y="2" width="100" height="20" />
<textFieldExpression><![CDATA[$F{id_empleado}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="22" width="100" height="20" />
<text><![CDATA[id_barrio]]></text>
</staticText>
<textField>
<reportElement x="100" y="22" width="100" height="20" />
<textFieldExpression><![CDATA[$F{id_barrio}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="203" width="100" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[total_importe]]></text>
</staticText>
<textField>
<reportElement x="100" y="203" width="100" height="20" forecolor="#FF3366" />
<textElement>
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{total_importe}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>



Y éste es el código Java desde donde invoco al informe:

Código (java) [Seleccionar]

private void imprimirRutas(String mensajeEntrada){
       //Primero he de averiguar la fecha de la ruta
       int indicePrimero = mensajeEntrada.indexOf("$");
       String fechaServicio = mensajeEntrada.substring(indicePrimero+1, mensajeEntrada.length());
       //Ruta del archivo jasper
       String path = "./InformeRutas.jasper";
       JasperReport reporte;      
       try{
           reporte = JasperCompileManager.compileReport("./src/servidor/InformeRutas.jrxml");
           //Cargo parámetros en una tabla hash
           Map parametros = new HashMap();
           parametros.put("FECHA_SERVICIO", fechaServicio);
           //Genero el informe en memoria
           JasperPrint print =
                   JasperFillManager.fillReport(reporte,parametros,conn);
           //Exporto el informe a PDF
           JasperExportManager.exportReportToPdfFile(print,"informe.pdf");
           //Abro el archivo pdf generado
         File direccion = new File("informe.pdf");
         Desktop.getDesktop().open(direccion);
           
       }catch(Exception e){
           System.out.println("Error al producir informe: "+e);
       }
   }

Eleкtro

#1
No tengo ni idea de Java, pero el error es self-explanatory (se explica por si solo).

Debes convertir los DataTypes de esos valores a String antes de generar el reporte. El compiler solo te está diciendo la verdad, que no puede tratar un DataType de tipo "X" como si fuese de tipo String.

Supongo que es algo que podrás configurar en los miembros del objeto "reporte", o al instanciar la tabla hash, o en la configuración del xml:
Citar
Código (xml) [Seleccionar]
<field name="id_empleado" class="java.lang.Integer"/>
<field name="id_barrio" class="java.lang.Integer"/>
<field name="fecha_servicio" class="java.sql.Date"/>
<field name="total_importe" class="java.math.BigDecimal"/>
<field name="id_pedido" class="java.lang.Long"/>
<field name="id_cliente" class="java.lang.Integer"/>
<field name="id_ruta" class="java.lang.Integer"/>

De todas formas, ¿te has parado a preguntar donde debes preguntar?:
https://community.jaspersoft.com/answers

Saludos.








Pantera80

Gracias por responder, Elektro.

He mirado en la dirección que me has puesto, y después de investigar he descubierto que el informe lo había realizado con la versión 5.5.0 de iReport, pero las librerías que he adjuntado a mi proyecto eran más antiguas, aquí estaba el error.

Un saludo