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:
<?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:
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);
}
}
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<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.
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