ERROR Impresión Actas cursadas

Hola!! ¿cómo están?

Como les contamos, ya hemos realizado una migración de una Responsable Académica y en la revisión que estamos haciendo surgió el error al querer imprimir Actas de Cursadas.
Tenemos la versión 3.18.
Estuvimos viendo el log desde Toba Editor y descubrimos lo siguiente:
Imprimir Actas de Comisiones
Hoy 17:33:24
Ver Encabezados


Niveles
• [31]
• [7]


• [3]


Mostrar mensajes

  1. PUNTO DE MONTAJE: se cargó exitosamente el autoload del punto de montaje proyecto
  2. PUNTO DE MONTAJE: se cargó exitosamente el autoload del punto de montaje personalizacion
  3. PUNTO MONTAJE: se cargó la clase extension_toba/guarani_sesion.php del punto de montaje proyecto. El path del mismo es /home/uaadm/proyectos/guarani/php
  4. PUNTO MONTAJE: se cargó la clase extension_toba/autentificacion/guarani_pers_usuario.php del punto de montaje personalizacion. El path del mismo es /home/uaadm/proyectos/guarani/personalizacion/php
  5. INSTALACION “/home/uaadm/proyectos/guarani/instalacion”
  6. Parametros instancia desarrollo: array (
  7. ‘base’ => ‘guarani’,
  8. ‘proyectos’ => ‘toba_usuarios, toba_referencia, toba_editor, guarani’,
  9. ‘tipo’ => ‘normal’,
  10. ‘toba_usuarios’ =>
  11. array (
  12. 'path' => '/home/uaadm/proyectos/guarani/vendor/siu-toba/framework/proyectos/toba_usuarios',
    
  13. 'url' => '/toba_usuarios/3.3',
    
  14. ),
  15. ‘toba_referencia’ =>
  16. array (
  17. 'path' => '/home/uaadm/proyectos/guarani/vendor/siu-toba/framework/proyectos/toba_referencia',
    
  18. 'url' => '/toba_referencia/3.3',
    
  19. ),
  20. ‘toba_editor’ =>
  21. array (
  22. 'path' => '/home/uaadm/proyectos/guarani/vendor/siu-toba/framework/proyectos/toba_editor',
    
  23. 'url' => '/toba_editor/3.3',
    
  24. ),
  25. ‘guarani’ =>
  26. array (
  27. 'path' => '/home/uaadm/proyectos/guarani',
    
  28. 'url' => '/guarani',
    
  29. 'url_pers' => '/guarani_pers/3.18',
    
  30. ),
    )
  31. INSTANCIA “desarrollo”
  32. Conectando a base ‘guarani’
  33. Parametros de conexion: array (
  34. ‘motor’ => ‘postgres7’,
  35. ‘profile’ => ‘localhost’,
  36. ‘usuario’ => ‘postgres’,
  37. ‘clave’ => ‘admin.test’,
  38. ‘base’ => ‘guarani2’,
  39. ‘puerto’ => ‘5432’,
  40. ‘encoding’ => ‘LATIN1’,
  41. ‘schema’ => ‘desarrollo’,
    )
  42. PROYECTO “guarani”
  43. PUNTO MONTAJE: se cargó la clase extension_toba/guarani_fuente_datos.php del punto de montaje proyecto. El path del mismo es /home/uaadm/proyectos/guarani/php
  44. PROYECTO “guarani”
  45. Cargando la zona ‘zona_cursadas’ con el editable ‘2020’
  46. Inicializando perfil de datos para el proyecto guarani
  47. SQL con perfil de datos: SELECT sga_comisiones_instancias.instancia,
  48. 						sga_instancias.nombre,
    
  49. 						sga_comisiones_instancias.escala_nota,
    
  50. 						sga_escalas_notas.nombre as escala_nota_nombre,
    
  51. 						sga_comisiones_instancias.porc_asistencia,
    
  52. 						sga_instancias.orden
    
  53. 			FROM		sga_comisiones_instancias,
    
  54. 						sga_comisiones,
    
  55. 						sga_instancias,
    
  56. 						sga_escalas_notas
    
  57. 			WHERE		sga_comisiones_instancias.comision = sga_comisiones.comision AND
    
  58. 						sga_comisiones_instancias.instancia = sga_instancias.instancia AND
    
  59. 						sga_comisiones_instancias.escala_nota = sga_escalas_notas.escala_nota
    
  60. 						 AND sga_comisiones.entidad = 2020
    		ORDER BY	sga_instancias.orden
    
  61. (
  62. 			SELECT 	amo.padre,
    
  63. 						amo.carpeta,
    
  64. 						amo.proyecto,
    
  65. 						amo.item,
    
  66. 						amo.descripcion as nombre,
    
  67. 						ai.orden as 		orden,
    
  68. 						ai.imagen,
    
  69. 						ai.imagen_recurso_origen,
    
  70. 						amo.padre = '1' as es_primer_nivel
    
  71. 			   FROM 
    
  72. 						apex_usuario_grupo_acc auga
    
  73. 					JOIN apex_menu_operaciones amo ON (auga.menu_usuario = amo.menu_id AND auga.proyecto = amo.proyecto)
    
  74. 					JOIN apex_usuario_grupo_acc_item augai ON (auga.proyecto = augai.proyecto AND auga.usuario_grupo_acc = augai.usuario_grupo_acc AND augai.item = amo.item)
    
  75. 					JOIN apex_item ai ON (augai.item = ai.item AND augai.proyecto = ai.proyecto)	
    
  76. 			  WHERE (ai.menu = 1)
    
  77. 				AND ai.item != ai.padre
    
  78. 				AND	(auga.usuario_grupo_acc IN ('admin') OR ai.publico = 1)
    
  79. 				AND	(amo.proyecto = 'guarani')
    
  80. 				AND auga.menu_usuario IS NOT NULL
    
  81. 		UNION
    
  82. 			SELECT 	ai.padre,
    
  83. 					ai.carpeta,
    
  84. 					ai.proyecto,
    
  85. 					ai.item,
    
  86. 					ai.nombre as nombre,
    
  87. 					ai.orden as 		orden,
    
  88. 					ai.imagen,
    
  89. 					ai.imagen_recurso_origen,
    
  90. 					ai.padre = '1' as es_primer_nivel
    
  91. 			FROM 
    
  92. 					apex_usuario_grupo_acc auga
    
  93. 				JOIN apex_usuario_grupo_acc_item augai ON (auga.proyecto = augai.proyecto AND auga.usuario_grupo_acc = augai.usuario_grupo_acc)
    
  94. 				JOIN apex_item ai ON (augai.item = ai.item AND augai.proyecto = ai.proyecto)	
    
  95. 			WHERE auga.menu_usuario is null
    
  96. 				AND (ai.menu = 1)
    
  97. 				AND ai.item != ai.padre
    
  98. 				AND	(auga.usuario_grupo_acc IN ('admin') OR ai.publico = 1)
    
  99. 				AND	(ai.proyecto = 'guarani')
    	) ORDER BY 1, 6
    
  100. SQL con perfil de datos: SELECT mdp_personas.persona,
    
  101.    					mdp_personas.apellido,
    
  102.    					mdp_personas.nombres
    
  103.    			FROM 	mdp_personas
       	WHERE	mdp_personas.usuario = 'toba'
    
  104. SQL con perfil de datos: SELECT 
    
  105.    				mdp_personas_foto.foto_persona,
    
  106.    				mdp_personas_foto.persona,
    
  107.    				mdp_personas_foto.imagen,
    
  108.    				mdp_personas_foto.fecha,
    
  109.    				mdp_personas_foto.nombre_imagen
    
  110.    			FROM 
    
  111.    				mdp_personas_foto
    
  112.    			WHERE
       		mdp_personas_foto.persona = '1'
    
  113. SQL con perfil de datos: SELECT par_configuraciones.nombre,
    
  114.    						par_configuraciones.tipo_de_dato,
    
  115.    						par_configuraciones.valor,
    
  116.    						par_configuraciones.descripcion
    
  117.    				FROM 	par_configuraciones
    
  118.    						 WHERE  upper(par_configuraciones.nombre) = 'INSTITUCION_INSTALACION' 
    
  119.    				ORDER BY par_configuraciones.nombre
       	;
    
  120. SQL con perfil de datos: SELECT sga_instituciones.institucion,
    
  121.    					sga_instituciones.nombre,
    
  122.    					sga_instituciones.nombre as entidad_descripcion,
    
  123.    					sga_instituciones.nombre_abreviado,
    
  124.    					sga_instituciones.tipo_institucion,
    
  125.    					sga_instituciones_tipos.nombre as tipo_institucion_nombre,
    
  126.    					sga_instituciones.localidad,
    
  127.    					mug_localidades.nombre as localidad_nombre,
    
  128.    					CASE
    
  129.    						WHEN mug_provincias.pais = 54 THEN mug_localidades.nombre
    
  130.    						ELSE mug_localidades.nombre || ' (' || mug_paises.nombre || ')'
    
  131.    					END as localidad_descripcion,
    
  132.    					sga_instituciones.calle,
    
  133.    					sga_instituciones.numero,
    
  134.    					sga_instituciones.codigo_postal,
    
  135.    					sga_instituciones.telefono,
    
  136.    					sga_instituciones.fax,
    
  137.    					sga_instituciones.email,
    
  138.    					sga_instituciones.entidad
    
  139.    			FROM 	sga_instituciones,
    
  140.    					sga_instituciones_tipos,
    
  141.    			        mug_localidades,
    
  142.    					mug_dptos_partidos,
    
  143.    					mug_provincias,
    
  144.    					mug_paises
    
  145.    			WHERE   sga_instituciones.localidad = mug_localidades.localidad AND 
    
  146.    			        sga_instituciones.tipo_institucion = sga_instituciones_tipos.tipo_institucion  AND
    
  147.    					mug_localidades.dpto_partido = mug_dptos_partidos.dpto_partido AND
    
  148.    					mug_dptos_partidos.provincia = mug_provincias.provincia AND
    
  149.    					mug_provincias.pais = mug_paises.pais
    
  150.    			         AND  sga_instituciones.institucion = '1'
    
  151.    			ORDER BY sga_instituciones.nombre  
       	;
    
  152. Iniciando componentes…
  153. PUNTO MONTAJE: se cargó la clase nucleo/cursadas/actas/cn_ent_acta_cursada.php del punto de montaje proyecto. El path del mismo es /home/uaadm/proyectos/guarani/php
    
  154. PUNTO MONTAJE: se cargó la clase extension_toba/componentes/guarani_pers_datos_tabla.php del punto de montaje personalizacion. El path del mismo es /home/uaadm/proyectos/guarani/personalizacion/php
    
  155. PUNTO MONTAJE: se cargó la clase extension_toba/componentes/guarani_pers_datos_tabla.php del punto de montaje personalizacion. El path del mismo es /home/uaadm/proyectos/guarani/personalizacion/php
    
  156. PUNTO MONTAJE: se cargó la clase operaciones/cursadas/actas/imprimir/ci_nav_imprimir_actas_comision.php del punto de montaje proyecto. El path del mismo es /home/uaadm/proyectos/guarani/php
    
  157. componente(34000146): Pantalla de eventos: 'seleccion_acta'
    
  158. Procesando eventos…
  159. componente(34000146): [ inicializar_dependencias ]
    
  160. array (
  161.  0 => 'cuadro_actas',
    

)
162. componente(34000146): [ registrar_evento ] ‘seleccion’ → [ evt__cuadro_actas__seleccion ]
163. array (
164. 0 =>
165. array (
166. ‘id_acta’ => 243,
167. ),
)
168. SQL con perfil de datos: SELECT sga_actas.nro_acta,
169. sga_actas.origen,
170. sga_actas.estado,
171. sga_actas.version,
172. sga_actas.version_impresa,
173. sga_actas.tipo_acta,
174. sga_actas.acta_referencia,
175. sga_actas.renglones_folio,
176. sga_actas.observaciones,
177. sga_actas.id_acta,
178. sga_actas.evaluacion,
179. sga_actas.comision,
180. sga_actas.llamado_mesa,
181. sga_actas.fecha_generacion,
182. sga_actas.fecha_cierre,
183. sga_actas.fecha_anulacion,
184. sga_actas.nua,
185. sga_actas.documento,
186. sga_actas.nro_ultima_copia,
187. sga_actas.id_documento_digital,
188. sga_periodos.anio_academico AS anio_academico_periodo,
189. sga_comisiones.nombre AS comision_nombre,
190. sga_comisiones.entidad AS comision_entidad,
191. sga_comisiones.elemento,
192. f_libros_acta(sga_actas.id_acta, 2) AS libro_nombre,
193. sga_ubicaciones.nombre AS nombre_ubicacion,
194. sga_elementos.codigo AS actividad_codigo,
195. get_nombre_actividad_comision(sga_comisiones.comision, 1) as actividad_nombre,
196. sga_elementos.codigo || ’ - ’ || get_nombre_actividad_comision(sga_comisiones.comision, 1) as codigo_y_nombre_actividad,
197. sga_periodos_genericos.nombre AS periodo_nombre,
198. sga_instancias.nombre AS instancia_nombre,
199. sga_actas_estados.nombre AS estado_nombre,
200. sga_escalas_notas.escala_nota,
201. sga_escalas_notas.nombre AS escala_nota_nombre,
202. sga_escalas_notas.tipo AS escala_nota_tipo,
203. sga_periodos.nombre AS periodo_lectivo_nombre,
204. sga_periodos_lectivos.fecha_inicio_dictado,
205. to_char(sga_periodos_lectivos.fecha_inicio_dictado, ‘DD/MM/YYYY’) as fecha_inicio_visual,
206. sga_periodos_lectivos.fecha_fin_dictado,
207. to_char(sga_periodos_lectivos.fecha_fin_dictado, ‘DD/MM/YYYY’) as fecha_fin_visual,
208. sga_periodos.fecha_inicio,
209. to_char(sga_periodos.fecha_inicio, ‘DD/MM/YYYY’) as fecha_inicio_periodo_visual,
210. sga_periodos.fecha_fin,
211. to_char(sga_periodos.fecha_fin, ‘DD/MM/YYYY’) as fecha_fin_periodo_visual,
212. f_modalidad_cursada_comision(sga_comisiones.comision) as modalidad_nombre,
213. f_instancias_comision_escala_notas(sga_actas.comision, true) as instancias_escalas,
214. sga_turnos_cursadas.nombre AS nombre_turno,
215. CASE WHEN sga_actas.tipo_acta = ‘N’ THEN ‘Normal’ WHEN sga_actas.tipo_acta = ‘R’ THEN ‘Rectificativa’ END as tipo_acta_descr,
216. CASE
217. WHEN sga_actas.estado = ‘A’ THEN
218. – Alumnos en eval_detalles_cursadas con acta no cerrada
219. (SELECT count(1)
220. FROM sga_eval_detalle_cursadas
221. WHERE id_acta_cursada = sga_actas.id_acta
222. AND sga_actas.origen = ‘R’
223. AND sga_eval_detalle_cursadas.acta_cursada_cerrada = 0
224. ) +
225. (SELECT count(1)
226. FROM sga_eval_detalle_cursadas
227. WHERE id_acta_promocion = sga_actas.id_acta
228. AND sga_actas.origen = ‘P’
229. AND sga_eval_detalle_cursadas.acta_promocion_cerrada = 0
230. )
231. WHEN sga_actas.estado <> ‘A’ THEN
232. – Alumnos en sga_actas_detalle con acta cerrada
233. (SELECT COUNT(1) FROM sga_actas_detalle WHERE sga_actas_detalle.id_acta = sga_actas.id_acta)
234. END AS cant_alumnos,
235. cerrada_por_docente AS cerrada_por_docente
236.
237. FROM sga_actas
238. JOIN sga_comisiones ON sga_actas.comision = sga_comisiones.comision
239. JOIN sga_periodos_lectivos ON sga_comisiones.periodo_lectivo = sga_periodos_lectivos.periodo_lectivo
240. JOIN sga_periodos ON sga_periodos_lectivos.periodo = sga_periodos.periodo
241. JOIN sga_periodos_genericos ON sga_periodos_genericos.periodo_generico = sga_periodos.periodo_generico
242. JOIN sga_elementos ON sga_comisiones.elemento = sga_elementos.elemento
243. JOIN sga_ubicaciones ON sga_comisiones.ubicacion = sga_ubicaciones.ubicacion
244. JOIN sga_actas_instancias ON sga_actas.id_acta = sga_actas_instancias.id_acta
245. JOIN sga_actas_estados ON sga_actas.estado = sga_actas_estados.estado
246. JOIN sga_instancias ON sga_actas_instancias.instancia = sga_instancias.instancia
247. JOIN sga_escalas_notas ON sga_actas_instancias.escala_nota = sga_escalas_notas.escala_nota
248. LEFT JOIN sga_turnos_cursadas ON sga_comisiones.turno = sga_turnos_cursadas.turno
249.
250. WHERE sga_actas.id_acta = ‘243’
ORDER BY sga_comisiones.nombre
251. SQL con perfil de datos: SELECT DISTINCT sga_comisiones_propuestas.propuesta
252. FROM sga_comisiones_propuestas
WHERE true AND sga_comisiones_propuestas.comision = ‘399’
253. SQL con perfil de datos: SELECT DISTINCT responsable_academica
254. FROM sga_propuestas_ra
WHERE sga_propuestas_ra.propuesta IN ()
255. SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near “)”
256. LINE 3: WHERE sga_propuestas_ra.propuesta IN () – toba_log: 21…
^
257. toba_error_db:

SQLSTATE: db_42601

CODIGO: 7

MENSAJE: ERROR: syntax error at or near “)” LINE 3: WHERE sga_propuestas_ra.propuesta IN () – toba_log: 21… ^

SQL: SELECT DISTINCT responsable_academica FROM sga_propuestas_ra WHERE sga_propuestas_ra.propuesta IN () – toba_log: 2150017284

[TRAZA]
258. Mensaje a usuario: Un carácter, símbolo o cláusula no es válida o no se encuentra.
259. Configurando dependencias para responder al servicio…
260. componente(34000146): Pantalla de servicio: ‘’
261. componente(34000146): [ callback ] ‘conf__previsualizacion’
262. SQL con perfil de datos: SELECT
263. par_parametros_sistema.parametro,
264. par_parametros_sistema.descripcion,
265. par_parametros_sistema.tipo_de_parametro,
266. par_parametros_sistema.tipo_de_dato,
267. par_parametros_sistema.nivel,
268. par_parametros_sistema.valor_desde,
269. par_parametros_sistema.valor_hasta,
270. par_parametros_sistema.valor_default,
271. par_parametros_sistema.tabla_referenciada
272. FROM
273. par_parametros_sistema
274. WHERE
par_parametros_sistema.parametro = ‘cur_utiliza_acta_digital_regul’
275. guarani_error_params: Los atributos para el nivel Responsable Académica no han sido especificados [TRAZA]
276. Mensaje a usuario: Los atributos para el nivel Responsable Académica no han sido especificados

Aparentemente la tabla sga_comisiones_propuestas no tiene todos los registros de comisiones que migramos en total. Por si les sirve el dato, la información de las comisiones se migró en distintas etapas.
Adjuntamos el error que da en SIU

Saludos


ErrorActasCursadas.png

ErrorActasCursadas.png

Ese error se da cuando no esta cargada con datos la tabla sga_comisiones_propuestas (en el caso de cursadas y promociones) y sga_mesas_examen_propuestas (en el caso de actas de examen)

Por favor recupera el id de la comision de ese acta que da error, luego fijate si devuelve registros esta query:

SELECT * FROM sga_comisiones_propuestas WHERE comision = <COMISION>;

Si no devuelve registros, corre lo siguiente:

  SELECT DISTINCT sga_comisiones.comision, v.propuesta, v.plan
   FROM sga_comisiones 
   JOIN vw_elementos_plan as v ON v.elemento = sga_comisiones.elemento
  WHERE v.plan_estado IN ('V','A')
    AND sga_comisiones.comision = <COMISION>;

Para entender como realizaron la migración. Activaron los planes de estudio luego de migrar las comisiones y mesas de examen?
Porque la tabla sga_comisiones_propuestas se carga con la consulta anterior y si esta consulta no devolvió registros es porque el plan de estudios donde esta esa actividad no estaba activo. ¿Puede ser?

3

Hola Alejandro!!

Los planes de estudio fueron activados antes de empezar la migración.
Nosotros cargamos manualmente actividades y planes de estudio. Los activamos y allí empezamos con todos los procesos de migración.
Tal como decís, en la tabla sga_comisiones_propuestas no se encuentra la comisión 399 indicada por SIU.
Pero mirando toda esa tabla, lo que te habíamos comentado es que solo tiene los registros del último proceso de migración de comisiones que hicimos.
Nuestra duda es, si por haber hecho en diferentes momentos migración de comisiones se haya borrado los registros anteriores, ya que del total de comisiones que deberían haber (aprox. 3600) tenemos solo 500.
Saludos y gracias por la ayuda

No, la migracion por etapas no borra datos de la base.

Ejecuten el siguiente codigo para completar esta tabla:

BEGIN WORK;
CREATE TEMP TABLE _Tcp (comision integer);
INSERT INTO _Tcp (comision)  
    (SELECT comision FROM sga_comisiones
     EXCEPT 
     SELECT DISTINCT comision FROM sga_comisiones_propuestas);

INSERT INTO sga_comisiones_propuestas (comision, propuesta, plan)
 SELECT DISTINCT sga_comisiones.comision, v.propuesta, v.plan
   FROM _Tcp
  JOIN  sga_comisiones ON sga_comisiones.comision = _Tcp.comision
   JOIN vw_elementos_plan as v ON v.elemento = sga_comisiones.elemento
  WHERE v.plan_estado IN ('V','A')
  ORDER BY sga_comisiones.comision, v.propuesta, v.plan;

DROP TABLE IF EXISTS _Tcp;
COMMIT WORK; 
-- ROLLBACK WORK;  -- Ejecutar esto si hay algun error

Luego verifiquen si sucede lo mismo con mesas de examen;

SELECT mesa_examen FROM sga_mesas_examen
EXCEPT
SELECT mesa_examen FROM sga_mesas_examen_propuestas 

Alejandro, muchas gracias!
El script funcionó. Sin embargo nos queda la duda de qué pasó, porque hicimos 2 veces la migración y vemos en ambas Bases de Datos la falta de registros en esta tabla en particular.
¿puede ser que detecte algún error y solo esté haciendo roll back en esta tabla y no en las otras cuando se migran comisiones dentro del proceso Calendario Académico?
Si bien estamos migrando a la versión 3.18, este proceso de Calendario lo estamos haciendo con la versión 3.15 ya que en la 3.18 da error (error en la ejecución una función).
¿esto tendrá algo que ver?
Gracias por todo.

Hola Cynthia, siempre recomendamos que realicen la migración con los scripts de la ultima version.
En este caso que decis que hubo error con los scripts de la 3.18, porque no lo reportaron? Estamos atentos siempre a corregir errores y que tengan la ultima version funcionando.

La migración de es tabla se encuentra en el archivo 03_migrar_comisiones.sql, y alli hay otras tablas que se migran, con lo cual si hubiera habido algun error no debio migrarse ninguna de todas esas tablas incluida la tabla de comisiones (sga_comisiones)

Por las dudas verifiquen si existen mesas de examen sin definir para que propuesta/plan estan creadas:

SELECT mesa_examen FROM sga_mesas_examen
EXCEPT
SELECT mesa_examen FROM sga_mesas_examen_propuestas

Si esta consulta devuelve registros avisa y te envio el script para completar la tabla sga_mesas_examen_propuestas, sino van a tener el mismo error que con las actas de cursadas.

2