Problemas al Agregar un Certificado Analítico Adicional

Hola, estoy tratando de agregar un nuevo certificado analítico, además del que ya existe, para poder seleccionarlo en otro circuito de egreso. Es porque una facultad quiere su Certificado muy distinto al que ya sale para las demás facultades. Entonces se hizo lo siguiente, se agrego el el formulario en mce_formularios y también se agregó la plantilla. Se creo otro circuito de egreso y se asigno en Emitir Certificado el nuevo formulario. Lo único que se hizo para probar si funcionaba es copiar el Certificado Analítico.jrxml y su par jasper cambiado en nombre por el nuevo certificado. El nuevo certificado se llama CertificadoAnaliticoConCreditos.jasper y todo esta bien configurado en el guaraní, El jasper esta en la plantilla. Pero hay un error a la hora de ir a emitir el certificado, aparece pantalla en blanco y no pasa de ahí, veo el log que genera el jasper y no logro entender nada, adjunto el log por cualquier cosa.

Todo esto se hace desde guaraní 3.19.0.

Desde ya muchas gracias! Saludos cordiales!


log_jasper.txt (68.4 KB)

Hola Ricardo, gracias por los logs!!!

Observo lo siguiente:


Jun 02 09:19:27 VMBridge ERROR: An exception occured: net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: /home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: /home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:114)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:103)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:283)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:760)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at php.java.bridge.JavaBridge.Invoke(JavaBridge.java:1050)
	at php.java.bridge.Request.handleRequest(Request.java:415)
	at php.java.bridge.Request.handleRequests(Request.java:491)
	at php.java.bridge.http.ContextRunner.run(ContextRunner.java:146)
	at php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60)
Caused by: java.io.FileNotFoundException: /home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper

Esta buscando el Jasper en /exportaciones/jasper en lugar de /personalizacion/exportaciones/jasper.

¿como agregaste el registro en la tabla mce_plantillas?

saludos.
2

También en la tabla mce_formularios, el tipo debe ser Egreso, ver como esta en Certificado de Título en Trámite o Certificado Analítico.

Luego debe estar relacionado a la tabla mce_plantillas, la columna admite_solicitud debe estar en “0”.

saludos.
2

Hola Leonel, mil gracias por contestar, mce_planillas lo cargue desde el sistema, administrar plantillas. Con respecto a lo que me dices es así, tal cual como me lo dices, pero sigue sin mostrar nada. Lo que hice para probar es asignar los dos certificados en el circuito de egreso para que al emitir certificado me muestre los dos, el certificado original lo hace perfecto, pero el nuevo me muestra pantalla en blanco.

Desde ya muchas gracias!

Hola Leonel, estoy viendo porque esta buscando en la carpeta del SIU y no en la personalizada. Realmente no veo el error, comprobé toda la información y todo esta bien, igual te paso salida de cada una de las consultas:

mce_formularios

formulario | nombre | descripcion | tipo | admite_reimpresion | activo | plantilla
------------±-----------------------------------±-----------------------------------±-------±-------------------±-------±---------------------±-------------
1001 | Certificado Analítico con Créditos | Certificado Analítico con Créditos | Egreso | S | S | 1004

mce_plantillas

plantilla | nombre | descripcion | archivo_plantilla | admite_solicitud
-----------±--------------------------------±------------±---------------------------------------±--------------------±-------------±------
1004 | CertificadoAnaliticoConCreditos | | CertificadoAnaliticoConCreditos.jasper | 0

Quizá me falta modificar algún registro mas, pero hasta aquí llega mi conocimiento.

Saludos y muchas gracias!

Hola Ricardo, gracias por la información!!!

Veo que hace esto:

La pantalla que lista los certificados para imprimir (ver captura) es php/operaciones/egresados/actualizaciones/actualizar_tramites_certificacion/pant_resumen.php.

La plantilla la saca llamando a get_archivo_plantilla de php/nucleo/constancias/co_constancias.php.

Luego te lleva a la operación 32000020 que es Imprimir Formulario y ejecuta el siguiente CI: php/operaciones/_lib/ci_imprimir_formulario.php.

Habría debugear en este CI lo siguiente en la función vista_jasperreports:


	function vista_jasperreports(toba_vista_jasperreports $report) 
	{		
		$path = guarani::get_path_reporte_jasper($this->plantilla);
		$report->set_path_reporte($path);
		
		toba::logger()->debug("Path: ".$path);
		toba::logger()->debug("Parametros: ". var_export($this->parametros, true));

******************

Luego en los logs de Gestión (instalacion/i__desarrollo/p__guarani/logs/sistema.log) debería escribir algo así cuando intentes descargar el certificado:


[DEBUG][guarani] Path: /srv/proyecto/exportaciones/jasper/CertificadoAnalitico.jasper
[DEBUG][guarani] Parametros: array (
  0 => 
  array (
    'nombre' => 'nro_solicitud',
    'tipo_de_dato' => 'E',
    'valor' => 2,
  ),
)

saludos.
4


Screenshot from 2021-06-04 11-48-40.png

Screenshot from 2021-06-04 11-48-40.png

Hola Leonel, muchas gracias por contestar, pido perdón por la demora, esto de las clases virtuales me sacan mucho tiempo.

Hice lo que me dijiste, y veo que efectivamente se esta pidiendo el archivo en la carpeta exportaciones/jasper del SIU y no la personalizada.

[DEBUG][guarani] Path: /home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper
[DEBUG][guarani] Parametros: array (
  0 => 
  array (
    'nombre' => 'nro_solicitud',
    'tipo_de_dato' => 'E',
    'valor' => 8200,
  ),
)

esto es lo que me pasa el log. La única diferencia es el valor que esta en 8200, ese debe ser algún id. Ahora bien, como tengo que hacer para que sea buscado en la carpeta personalizada, hay algún archivo que me falta tocar?

Saludos cordiales!! muchas gracias por todo!!

Hola Ricardo,

Hice lo que me dijiste, y veo que efectivamente se esta pidiendo el archivo en la carpeta exportaciones/jasper del SIU y no la personalizada.

Cuando hace $path = guarani::get_path_reporte_jasper($this->plantilla); llama a la función get_path_reporte_jasper de php/nucleo/_lib/guarani_nucleo.php. Si te fijas en la misma, primero busca si el Jasper esta personalizado, si no esta personalizado busca en el core.

¿donde tenes CertificadoAnaliticoConCreditos.jasper? ¿en exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper?
Debería estar en personalizacion/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper

Ver Personalizar impresiones.

Ahora bien, tu Jasper recibe el parámetro nro_solicitud, deberías revisar si la query que tenes dentro del Jasper no se esta rompiendo. Proba ejecutando la misma con nro_solicitud = 8200.

saludos.
2

La única diferencia es el valor que esta en 8200, ese debe ser algún id.

Si te fijas en exportaciones/jasper/CertificadoAnalitico.jrxml vas a ver tiene dos queries, y se filtra por ese $P{nro_solicitud}. Viene de la tabla sga_certificados_otorg columna nro_solicitud.

saludos.
2

Hola Leonel, muchas gracias por contestar, pero entonces el problema de que busque en el lugar incorrecto es este? todavía no puedo probar, pero mas tarde lo haré… Pero sacame esa duda, que busque en el lugar incorrecto es por ese valor? porque debería buscar en la carpeta personalizaciones.

Saludos, muchas gracias desde ya!

Hola Ricardo,

pero entonces el problema de que busque en el lugar incorrecto es este?

Parece que si, veo que el Jasper existe dentro de personalizacion/exportaciones/jasper (https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unse/gestion/trunk/3.19.0/personalizacion/exportaciones/jasper).

Habría que ver dentro de la función get_path_reporte_jasper de php/nucleo/_lib/guarani_nucleo.php, agrega los siguiente toba::logger()->debug():


	static function get_path_reporte_jasper($archivo)
	{
		// Si existe el reporte personalizado devuelvo esa plantilla, sino la original
		$path_jasper = '/exportaciones/jasper/';
		$path = toba::proyecto()->get_path_pers() . $path_jasper;
		toba::logger()->debug("Path Jasper: {$path}");
		toba::logger()->debug("Archivo Jasper: {$archivo}");
		if (!file_exists($path . $archivo)) {
			$path = toba::proyecto()->get_path() . $path_jasper;
		}

		return $path . $archivo;
	}

Volve a intentar imprimir, y volveme a mandar los logs.

Revise y no lo tenes personalizado en personalizacion/php/nucleo/_lib/guarani.php (https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unse/gestion/trunk/3.19.0/personalizacion/php/nucleo/_lib/guarani.php).

saludos.
4

Hola Leonel, mil gracias, pero cada vez me pierdo mas, en el log me aparece la carpeta correcta, pero después la cambia por alguna razón. Aquí te paso el log completo:

Fecha: 09-06-2021 10:51:31
Operacion: Imprimir Formulario
Usuario: 28677429
Version-PHP: 7.3.27-1~deb10u1
Servidor: localhost
URI: /guarani/3.14/aplicacion.php?ah=st60c0c744a54534.13664306&ai=guarani%7C%7C32000020&ts=vista_jasperreports&plantilla=CertificadoAnaliticoConCreditos.jasper
Referrer: http://localhost/guarani/3.14/aplicacion.php?ah=st60c0c73f63de79.22904607&ai=guarani%7C%7C32000019
Host: ::1
==========
[INFO][toba] Se detecto cambio de operaci�n. Se limpia la memoria de la operacion
[DEBUG][guarani] PUNTO DE MONTAJE: se carg� exitosamente el autoload del punto de montaje proyecto
[DEBUG][guarani] PUNTO DE MONTAJE: se carg� exitosamente el autoload del punto de montaje personalizacion
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/guarani_sesion.php del punto de montaje proyecto. El path del mismo es /home/ricardo/Proyectos/guarani/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/autentificacion/guarani_pers_usuario.php del punto de montaje personalizacion. El path del mismo es /home/ricardo/Proyectos/guarani/personalizacion/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/guarani_fuente_datos.php del punto de montaje proyecto. El path del mismo es /home/ricardo/Proyectos/guarani/php
[DEBUG][toba] [SECCION] Iniciando componentes...
[INFO][guarani] PUNTO MONTAJE: se carg� la clase operaciones/_lib/ci_imprimir_formulario.php del punto de montaje proyecto. El path del mismo es /home/ricardo/Proyectos/guarani/php
[DEBUG][toba] componente(34000241): [callback][ ini__operacion ]
[DEBUG][toba] [SECCION] Procesando eventos...
[INFO][toba] componente(34000241): No hay se�ales de un servicio anterior, no se atrapan eventos
[DEBUG][toba] [SECCION] Configurando dependencias para responder al servicio...
[DEBUG][toba] componente(34000241): Pantalla de servicio: ''
[INFO][toba] componente(34000241): [ callback ] 'conf__pant_inicial' no fue atrapado
[DEBUG][toba] [SECCION] Respondiendo al servicio__vista_jasperreports...
[DEBUG][guarani] Path Jasper: /home/ricardo/Proyectos/guarani/personalizacion/exportaciones/jasper/
[DEBUG][guarani] Archivo Jasper: CertificadoAnaliticoConCreditos.jasper
[DEBUG][guarani] Seteo el esquema por defecto para el reporte: SET search_path = "negocio", "public";
[CRITICAL][toba] java_InternalException: 
[TRAZA]
	
	java_ThrowExceptionProxyFactory->getProxy 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 215 
Parametros: 
11		
org.postgresql.jdbc4.Jdbc4Connection		
		
1		
	
	java_Arg->getResult 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 388 
Parametros: 
1		
	
	java_Client->getWrappedResult 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 394 
Parametros: 
1		
	
	java_Client->getResult 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 594 
	
	java_Client->invokeMethod 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 1731 
Parametros: 
1		
fillReport		
/home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper	Instancia de Java Instancia de java_InternalJava 	
	
	java_JavaProxy->__call 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 1839 
Parametros: 
fillReport		
/home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper	Instancia de Java Instancia de java_InternalJava 	
	
	java_AbstractJava->__call 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/java/Java.inc, lInea 2007 
Parametros: 
fillReport		
/home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper	Instancia de Java Instancia de java_InternalJava 	
	
	Java->__call 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/lib/salidas/toba_vista_jasperreports.php, lInea 332 
Parametros: 
fillReport		
/home/ricardo/Proyectos/guarani/exportaciones/jasper/CertificadoAnaliticoConCreditos.jasper	Instancia de Java Instancia de java_InternalJava 	
	
	toba_vista_jasperreports->completar_con_datos 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/lib/salidas/toba_vista_jasperreports.php, lInea 278 
	
	toba_vista_jasperreports->generar_salida 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 331 
	
	toba_solicitud_web->servicio__vista_jasperreports 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 185 
Parametros: 
Instancia de ci_imprimir_formulario 	
	
	toba_solicitud_web->procesar_servicios 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 60 
	
	toba_solicitud_web->procesar 
Archivo: /home/ricardo/Proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php, lInea 96 
	
	toba_nucleo->acceso_web 
Archivo: /home/ricardo/Proyectos/guarani/www/aplicacion.php, lInea 33 

No entiendo, si lees un poco mas abajo del log que puse en el archivo que me dijiste, aparece otra carpeta.

Saludos, muchas gracias por todo!

Hola Leonel, viendo el método al que agregue el debug, mira lo siguiente:

if (!file_exists($path . $archivo)) {
			$path = toba::proyecto()->get_path() . $path_jasper;
		}

eso lo hace después, pero el problema es que si existe el archivo, le dí permisos al www-data y no pasa nada, el file_exists no lo está encontrando al archivo pero me acabo de ver y busque con el path que muestra el log y el archivo, si existe, me estoy enloqueciendo.

Saludos!

Otra cosa que estoy viendo es que probé con el certificado analítico que viene con el guaraní al que tengo personalizado, y no toma el personalizado, toma el que viene con el guaraní. Es muy raro, creo que es un problema de permisos, ahora voy a revisar eso y te cuento.

Saludos!

Hola Leonel, perdóname en hacerte perder el tiempo, era un problema de permisos, lo raro es que el permiso del archivo estaba en www-data, pero parece que no era suficiente, la carpeta personalización si tenía permiso para www-data, pero la única que no lo tenía era la carpeta exportaciones, esa estaba con permisos para mi usuario, le asigne www-data y empezó a funcionar.

Muchísimas gracias por todo, no lo iba a ver si no me pasabas el último debug.

Saludos! Nuevamente mil gracias!!

Hola Ricardo,

Claro, parece ser que la función file_exists de PHP devuelve false si no lo encuentra debido a permisos (ver: https://stackoverflow.com/questions/20583909/file-permission-755-but-php-file-exists-returns-false).

Revisa el punto 6) de esta documentación para ver los permisos.

saludos.
2

Hey Leonel, como estás? Ya te había enviado un mensaje antes diciendo que era el problema de permisos. En fin muchísimas gracias! Abrazo! Saludos!