Reporte en SIU con Ireport

Buenas!, tiene alguna manera practica de hacer un reporte en SIU pero conectarlo con una plantilla jasper?, necesito hacer bien las medidas con el IReport, entiendo que usaban la función vistajasperreport si mal no recuerdo, pero tienen alguna documentación sobre eso?. El reporte lo tengo hecho, es un simple filtro para buscar una persona, seleccionarla y poner los datos en un formulario de solo lectura y ahí debería generar el PDF pero con una plantilla de jasper.

Gracias, saludos!

Hola Lautaro,

La mayoría de los Jaspers se encuentran en la carpeta exportaciones/jasper/ActaExamenes.jrxml de Gestión y src/siu/exportaciones_g3/jasper/ActaExamenes.jrxml de Autogestión. Los archivos .jrxml son los que editas y los .jasper son los compilados.

Lo que podes hacer es tomar algún .jrxml y editarlo con el plugin iReport-Designer de NetBeans. Los Jaspers personalizados van dentro de la carpeta personalizacion/exportaciones/jasper/.

Luego de compilar a .jasper podes usar como se esta haciendo en la función generarJasperAnalitico o generarJasperDiploma de php/nucleo/egresados/actualizaciones/diploma_analitico_digital/cn_diploma_analitico_digital.php.

Mira también este foro: https://foro.comunidad.siu.edu.ar/index.php?topic=22126.msg99231

Referencia:
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/personalizaciones/impresiones
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/jasper
http://repositorio.siu.edu.ar/trac/toba/wiki/Impresion/JasperReports

saludos.
3

Hola, la realizacion del reporte es urgente por lo tanto tal vez se me haría bastante mas facil clonando la operacion “Solicitar constancias y certificados”, tienen alguna manera de que pueda clonarla correctamente en otra carpeta?, por ejemplo Matriculas → Reportes?, al hacerlo me tira el siguiente error, tambien les adjunto imagenes:

Se ha producido una violación de la restricción impuesta por un índice único o una restricción de unicidad. Más info…

SQLSTATE: db_23505

CODIGO: 7

MENSAJE: SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint “apex_objeto_identificador_uq” DETAIL: Key (proyecto, identificador)=(guarani, solicitud_constancia) already exists.

SQL: INSERT INTO apex_objeto ( proyecto, anterior, reflexivo, clase_proyecto, clase, subclase, subclase_archivo, nombre, titulo, colapsable, descripcion, fuente_datos_proyecto, fuente_datos, parametro_a, parametro_b, parametro_c, parametro_d, parametro_e, identificador, objeto_categoria_proyecto, objeto_categoria, solicitud_registrar, solicitud_obj_obs_tipo, solicitud_obj_observacion, parametro_f, usuario, creacion, punto_montaje, posicion_botonera ) VALUES (“guarani”, DEFAULT, DEFAULT, “toba”, “toba_cn”, “cn_ent_solicitud_constancia”, “nucleo/constancias/solicitar_constancias/cn_ent_solicitud_constancia.php”, “_UMETSolicitud Constancia”, DEFAULT, “0”, DEFAULT, “guarani”, “guarani”, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, “solicitud_constancia”, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, “2011-10-03 12:37:25”, “34000001”, DEFAULT); – toba_log: 186477

SQLSTATE[25P02]: In failed sql transaction: 7 ERROR: current transaction is aborted, commands ignored until end of transaction block


SQLSTATE: db_25P02

CODIGO: 7

MENSAJE: ERROR: current transaction is aborted, commands ignored until end of transaction block

SQL: SELECT rf.restriccion_funcional FROM apex_grupo_acc_restriccion_funcional rf WHERE rf.usuario_grupo_acc IN(“admin”) AND proyecto = “toba_editor” – toba_log: 186477

Saludos!


1.png

1.png

2.png

2.png

3.png

3.png

Hola Lautaro,

Hay algo que no estoy entendiendo, ¿por que necesitas clonar la operación de Solicitar Constancias y Certificados?

Si lo que necesitas es agregar una nueva Constancia/Certificado, primero tenes que crear el jasper y darlo de alta en la operación Administrar Plantillas, luego en Administrar Constancias y Certificados lo das de alta.

Documentación:
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/personalizaciones/impresiones

saludos.
2

Hola, necesitaba clonarla porque se que solicitando una constancia, y solamente modificando la plantilla tomaba los datos automáticamente. De igual manera desde gestión académica me dijeron que necesitaban un reporte lo mas básico y rápido de usar posible, como el de “Datos Personales”, termine clonando ese reporte, pero no me funciona lo que es la vista_xml() que codee a mi manera intentando entender que hacia cada método. Les adjunto el archivo y me podrían decir que es lo que hice mal?. Al parecer la momento de darle a imprimir en el botoncito del PDF después de elegir la persona, simplemente imprime con otro formato que tienen por defecto ustedes, como si se saltease ese metodo vista_xml.

Gracias de antemano!


ci_rep_datos_tarjeta_acceso_umet.txt (2.11 KB)

Hola Lautaro,

Esta mal que uses la función vista_xml, te recomendaría que hagas como en las operaciones Imprimir Actas de Examen o Imprimir Actas de Comisiones archivos php/operaciones/examenes/actas/imprimir_acta/ci_edi_imprimir_acta_examen.php y php/operaciones/cursadas/actas/imprimir/ci_nav_imprimir_actas_comision.php respectivamente.

Pasos:

  1. Definir el evento pdf en el CI dentro del Toba Editor.

  2. Crear la función evt__pdf en el CI, ademas crear y setear la variable s__imprimir en true:


protected $s__imprimir = false;
function evt__pdf() {
    $this->s__imprimir = true;
}

  1. Crear la función extender_objeto_js:

    function extender_objeto_js() {
        if ($this->s__imprimir) {
            $this->s__imprimir = false;
            echo "
				window.open(vinculador.get_url(null, null, 'vista_jasperreports', null, [{$this->objeto_js}._id], false, true)); 
			";
        }
    }

  1. Crear la función vista_jasperreports la cual genera el PDF:

function vista_jasperreports(toba_vista_jasperreports $report) {
		try {  
			$persona = $this->get_persona_seleccionada();
			$persona_datos = toba::consulta_php('co_personas')->get_datos_tarjeta_acceso_umet($persona);

			$nombre_completo = $persona_datos[0]['nombre_completo'];
			$nro_documento = $persona_datos[0]['nro_documento'];
			$nombre_propuesta = $persona_datos[0]['nombre_propuesta'];

			// Seteo la plantilla a usar
			$path = guarani::get_path_reporte_jasper("plantillaTarjetaAccesoUMET.jasper");
			$report->set_path_reporte($path);

			$report->set_parametro('nombre_completo', 'S', $nombre_completo);
			$report->set_parametro('nro_matricula', 'S', $nro_documento);
			$report->set_parametro('carrera', 'S', $nombre_propuesta);

		} 
		catch (\Exception $e) 
		{
			toba::logger()->error($e);
			throw guarani::error($e->getMessage());
		}
}

saludos.
2

Buenas, gracias por la respuesta, agregué las funciones que me pasaron y al momento de imprimir se queda en blanco la pantalla, adjunto log de esa parte al darle click al boton pdf.

Saludos!


sistema.log - evtPdf.txt (12.1 KB)

Hola Lautaro,

En los logs de Toba no muestra ningún error, quizás hay que ver en los logs de Jasper, si podes parar el proceso del Jasper y luego volvelo a ejecutar con nivel de debug 5:

java -Duser.language=es -Duser.country=AR -Djava.awt.headless=true -jar /path/to/gestion/vendor/siu-toba/jasper/JavaBridge/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 5

Luego al volver intentar a imprimir te va a mostrar el error en la consola donde corriste el Jasper.

saludos.
2

Hola, te adjunto lo que tira en consola (solo una parte, ya que se queda en un bucle infinito repitiendo todo este codigo).

Saludos.


error.txt (30 KB)

Hola, gracias por los logs!!!

No veo errores en la salida de Jasper!!!

¿Me podrías pasar los archivos plantillaTarjetaAccesoUMET.jasper y plantillaTarjetaAccesoUMET.jrxml para probarlos localmente? ¿el Jasper tiene una query dentro?

saludos.
2

Hola, te adjunto los dos archivos en un rar.

Saludos!


plantillaTarjetaAccesoUMET.rar (8.79 KB)

Hola Lautaro,

Justamente me da errores de compilación!!!

En el plantillaTarjetaAccesoUMET.jrxml deberías agregar lo siguiente al encabezado vas a tener que agregar lo siguiente:

<jasperReport .... language="groovy" ....>

Basate en exportaciones/jasper/Diploma.jrxml que es parecido, mas que nada los encabezado.

saludos.
2

Hola, aun agregando el header que me recomendaste, a mi el “error” que me da siempre es este:
Error filling print… Byte data not found at : /usr/local/proyectos/guarani/personalizacion/www/img/logo_tarjeta_umet.png
net.sf.jasperreports.engine.JRException: Byte data not found at : /usr/local/proyectos/guarani/personalizacion/www/img/logo_tarjeta_umet.png at net.sf.jasperreports.repo.RepositoryUtil.getBytesFromLocation(RepositoryUtil.java:196) at net.sf.jasperreports.engine.RenderableUtil.getRenderable(RenderableUtil.java:121) at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:537) at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:472) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:456) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2067) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:788) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:298) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:152) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:892) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:584) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:930) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:928) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
Print not filled. Try to use an EmptyDataSource…

Básicamente es: Byte data not found at : /usr/local/proyectos/guarani/personalizacion/www/img/logo_tarjeta_umet.png , es lógico que me de ese error ya que ese path no existe en mi windows, si lo reemplazo por el mío de windows compila correctamente, pero necesito poner ese path ya que va a ser el que se use en el servidor. Alguna sugerencia?

Te vuelvo a adjuntar por rar el reporte,ya que me faltaba cambiar los parametros estaban como $F y eran $P{nombre_variable} ademas de agregarlos al apartado de parametros. De igual manera en la consola se sigue quedando el bucle infinito.

La funcion vista jasperreports quedo de la siguiente manera:

function vista_jasperreports(toba_vista_jasperreports $report)
{
try
{
/* Seteo datos */
$persona = $this->get_persona_seleccionada();
$where = “mdp_personas.persona = $persona”;
$persona_datos = toba::consulta_php(‘co_personas’)->get_datos_tarjeta_acceso_umet($where);

		$nombre_completo = $persona_datos[0]['nombre_completo'];
		$nro_documento = $persona_datos[0]['nro_documento'];
		$nombre_propuesta = $persona_datos[0]['nombre_propuesta'];

		// Seteo la plantilla a usar
		$report->set_path_reporte(guarani::get_path_reporte_jasper("plantillaTarjetaAccesoUMET.jasper"));

		$report->set_parametro('logo_tarjeta_umet', 'S', toba::proyecto()->get_www_pers('img/logo_tarjeta_umet.png'));
		$report->set_parametro('nombre_completo', 'S', $nombre_completo);
		$report->set_parametro('nro_matricula', 'S', $nro_documento);
		$report->set_parametro('carrera', 'S', $nombre_propuesta);
		
		$report->generar_salida();
		
		return $report->get_nombre_archivo_generado();
	} 
	catch (\Exception $e) 
	{
		toba::logger()->error($e);
		throw guarani::error($e->getMessage());
	}
}

Saludos.


plantillaTarjetaAccesoUMET.rar (12.4 KB)

Hola Lautaro,

El plantillaTarjetaAccesoUMET.jrxml del ultimo .rar lo pude compilar bien. Con el iReport del Netbeans cuando quiero hacer el “Preview” me da un pdf en blanco.

Las siguientes lineas no van, hay que quitarlas:


$report->generar_salida();
return $report->get_nombre_archivo_generado();

Podes debuggear los valores que se le pasan al Jasper de la siguiente manera:


$logo_tarjeta_umet = toba::proyecto()->get_www_pers('img/logo_tarjeta_umet.png');
toba::logger()->debug("logo_tarjeta_umet: ".$logo_tarjeta_umet);
toba::logger()->debug("nombre_completo: ".$nombre_completo);
toba::logger()->debug("nro_documento: ".$nro_documento);
toba::logger()->debug("nombre_propuesta: ".$nombre_propuesta);

Luego en los logs del sistema (instalacion/i__desarrollo/p__guarani/logs/sistema.log) vas a poder ver los valores que se le pasan.

saludos.
2

Buen día, probé lo que me dijiste y los valores se pasan correctamente, no entiendo que pueda estar pasando, te adjunto log del sistema y SS de la consola de jasper.

Saludos!


logSistema.txt (47.8 KB)

cjasper.png

cjasper.png

Hola, también se me ocurre que hay un problema al setear la plantilla, ustedes con el caso del diploma la setean de la siguiente manera:

$report->set_path_reporte(guarani::get_path_reporte_jasper(tramite_certificacion::plantillaDiploma));

Eso lo que hace es setear literalmente el path hacia la plantilla diploma. En mi caso lo que hice es primero probar con:
$ruta_plantilla = $report->set_path_reporte(guarani::get_path_reporte_jasper(“plantillaTarjetaAccesoUMET.jasper”));
Y el debug tira lo siguiente en sistema.log:

[DEBUG][guarani] nombre_completo: PRUEBA, prueba
[DEBUG][guarani] nro_documento: 123456789
[DEBUG][guarani] nombre_propuesta: Prueba
[DEBUG][guarani] logo_tarjeta_umet: /usr/local/proyectos/guarani/personalizacion/www/img/logo_tarjeta_umet.png
[DEBUG][guarani] ruta_plantilla: /usr/local/proyectos/guarani/personalizacion/exportaciones/jasper/plantillaTarjetaAccesoUMET.jasper

Probe tambien poniendos los paths absolutos, pero sigue dando el mismo resultado.

$nombre_completo = $persona_datos[0][‘nombre_completo’];
$nro_documento = $persona_datos[0][‘nro_documento’];
$nombre_propuesta = $persona_datos[0][‘nombre_propuesta’];
$logo_tarjeta_umet = “/usr/local/proyectos/guarani/personalizacion/www/img/logo_tarjeta_umet.png”;
$ruta_plantilla = guarani::get_path_reporte_jasper(“plantillaTarjetaAccesoUMET.jasper”);

toba::logger()->debug("nombre_completo: ".$nombre_completo);
toba::logger()->debug("nro_documento: ".$nro_documento);
toba::logger()->debug("nombre_propuesta: ".$nombre_propuesta);
toba::logger()->debug("logo_tarjeta_umet: ".$logo_tarjeta_umet);
toba::logger()->debug("ruta_plantilla: ".$ruta_plantilla);

Teniendo el codigo con la ruta de esta manera $ruta_plantilla = guarani::get_path_reporte_jasper(“plantillaTarjetaAccesoUMET.jasper”); al imprimir el pdf me tira el siguiente error:

Se han encontrado los siguientes problemas:

  • Falta definir el .jasper con set_path_reporte

Aclaro que la plantilla esta cargada en el sistema también.

Saludos.

Hola Lautaro, disculpa la demora en responder estamos liberando la versión 3.20.1!!!

Probé de la siguiente manera y me da un PDF en blanco:


    function vista_jasperreports(toba_vista_jasperreports $report) {
        // Seteo la plantilla a usar
        $path = guarani::get_path_reporte_jasper('plantillaTarjetaAccesoUMET.jasper');
        $report->set_path_reporte($path);
	$path_logo = guarani::get_path_logo_impresion();
	$report->set_parametro('carrera', 'S', 'Escuela de Formación Sindical');
	$report->set_parametro('nro_matricula', 'S', '39910034');
	$report->set_parametro('nombre_completo', 'S', 'RAMIREZ, Mariano Agustín');
	$report->set_parametro('logo_tarjeta_umet', 'S', $path_logo);
    }

Ahora en plantillaTarjetaAccesoUMET.jrxml reemplace lo siguiente:


<queryString>
		<![CDATA[]]>
	</queryString>
	<field name="nro_matricula" class="java.lang.String"/>
	<field name="nombre_completo" class="java.lang.String"/>
	<field name="carrera" class="java.lang.String"/>
	<variable name="fecha_narrada" class="java.lang.String">
		<variableExpression><![CDATA[new java.text.SimpleDateFormat("dd'/'MM'/'YYYY", new java.util.Locale("es")).format(new java.util.Date())]]></variableExpression>
	</variable>

por:


        <queryString>
		<![CDATA[SELECT CURRENT_DATE as fecha]]>
	</queryString>
	<field name="fecha" class="java.sql.Date"/>

Volví a compilar y ahora imprime, agrega una hoja demas en blanco pero imprime, te adjunto PDF.

saludos.
4


archivo-9.pdf (26.9 KB)

Te adjunto como quedaría solucionado imprimiendo en una sola pagina.

saludos.
2


soluciAn.zip (38.6 KB)

Buen día, hace un par de días saque esa fecha narrada ya que no se usa, y me compilaba bien, el problema es que al imprimir desde el sistema tira una hoja en blanco.

Saludos.

Hola Lautaro,

el problema es que al imprimir desde el sistema tira una hoja en blanco.

¿te genera solo una hoja en blanco, o una hoja en blanco mas una hoja con el contenido?

¿probaste con el ZIP de la ultima respuesta que te mande?

Vas a tener que revisar el encabezado del Jasper:

<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="guarani" language="groovy" printOrder="Horizontal" pageWidth="1190" pageHeight="842" orientation="Landscape" columnWidth="1190" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="2e606a43-a7c0-4bd0-983b-fe4bfbf075f4">

Te recomiendo que te bases en algún reporte existente como ser exportaciones/jasper/Diploma.jrxml, y vayas modificando de a poco viendo que se genere bien el PDF.

saludos.
2