Mostrando entradas con la etiqueta JasperReports_IReport. Mostrar todas las entradas
Mostrando entradas con la etiqueta JasperReports_IReport. Mostrar todas las entradas

sábado, 30 de septiembre de 2023

IReport query con where IN o creando un sql dinamico

Hola , de tiempo q escribo, pero me había olvidado estos super tips o funcionalidades en los parametros del query de ireport/jasperreeports, aqui vamos:

1) En SQL es muy util el operador de comparación IN en un where, por ejemplo:

select * from mitabla where campo1 IN ('a','x','z')

en ireport el SQL query con el parametro seria de la siguiente forma:

select * from mitabla where $X{IN,campo1,parLetras}

donde parLetras debe ser de tipo java.util.Collection, pongo el código jrxml `para un mejor ejemplo:

<parameter name="parLetras" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("a")]]></defaultValueExpression>

2) Que sucedería si por algun motivo no puedes construir el IN de la forma anterior y lo unico que quieres/puedes es pasarle un String que contenga los valores del IN, por ejemplo:

String parLetras ="'a','x','z'";

entonces, jasperreports nos da el parametro $P!
en ireport el SQL query con el parametro seria de la siguiente forma:

select * from mitabla where campo1 IN ($P!{parLetras})

el $P! pone el texto tal cual en el query, no solo en where sino donde uds quieran,
tal es asi que se podria hacer lo siguiente:

String parMiQuery = "select * from mitabla where campo1 IN ('a','x','z')";

y en ireport el SQL query con el parametro seria:

$P!{parMiQuery}

sí!! solo eso, nada mas, porque usará el exto tal cual en el query de jasperreports.


Espero hayan entendido y les ayude

Mas info en: https://community.jaspersoft.com/questions/516502/x-and-p

Bytes

miércoles, 16 de noviembre de 2011

Cambiar coma por punto decimal en IReport/JasperReport

Bueno, despues de tiempo compartire algo, el problema es cambiar la coma decimal por punto decimal en un campo numerico en un reporte Jasper. IReport y Jaspercompiler toman por default el "locale" del sistema pero tambien se puede forzar a que sea diferente.

En IReport, si quieren q el punto sea el separador decimal y la coma el separador de miles, deben entrar a Herramientas->Opciones->IReport, en la ficha "Compilation and Execution" cambiar el valor de "Report Locale", para mi caso use "Ingles (Estados Unidos)" y lito se compila y funciona.

Ahora, mis reportes los compilo y muestro desde un jsp, alli lo que se debe hacer es pasar un parametro indicando el "locale". Para esto primero agregamos el "Import" respectivo en la cabecera:

<%@page import="net.sf.jasperreports.engine.JRParameter"%>

y luego agregamos el parametro antes de compilarlo, quedando algo asi:

Map parameters = new HashMap();
parameters.put("ID", (String)request.getParameter("nro_id"));

parameters.put(JRParameter.REPORT_LOCALE, Locale.US);

JasperReport report = JasperCompileManager.compileReport(reportPath);
JasperPrint print = JasperFillManager.fillReport(report, parameters, ConnrsProyectos);

Ok, espero a alguien mas le sirva.