Problema con control de superposición horaria

Gente:

Me acaban de traer 2 casos en los cuales el control de superposición horaria entre comisiones no ha funcionado. Este control está implementado hace varios años y siempre funcionó bien. El control está habilitado tanto en la Inscripción a Cursadas, como en la Inscripción fuera de termino, así como en el proceso de Pendientes.

Como estaba dudoso, verifiqué las bandas horarias de las comisiones en cuestión y efectivamente hay superposición (Martes de 20:20 a 21:50 una materia, Martes de 19:40 a 22:30 la otra materia). Por las dudas, di de baja una de las inscripciones y lo volví a inscribir, y no actuó el control.

La única diferencia respecto del año 2015 es que cambiamos de versión, de la 2.6.5 a la 2.9.0 y que el servidor de Informix lo pasamos de una PC con Win 2003 a una VM con Linux.

Antes de ponerme a hacer un trace y pruebas del control con SQL, se les ocurre que puede ser??

Saludos

Gustavo

¿Alguna de esas comisiones tiene subcomisiones?
¿Tenes activo los dos controles, el de superposicion horaria entre comisiones y entre subcomisiones?

Los controles de superposicion horaria fueron cambiados en la version 2.9.0: sp_superphoraria, sp_superpos_subco
Podes ver la documentacion (Ticket 613)
http://servicios.siu.edu.ar/?ai=servicios||31000001&tcm=previsualizacion&tm=1&cod_proyecto=378&cod_query=22

Gracias, Ale!.

No debieran haber subcomisiones, nunca se usaron … Mañana verifico si tengo activos los 2 controles, hoy no voy al INSPT que es donde tenemos el inconveniente. Como debiera ser? Nunca se usaron ni existen subcomisiones. Debiera haber 1 solo control activado?

El cambio de versiones no lo hice yo, sino Darío Fernández, y creo que fue posterior a la inscripciòn a materias del 2º cuatrimestre 2015.

Saludos

Gustavo

El ajuste que se hizo en 2.9.0 tiene que ver con lo siguiente. No da error el control si dos comisiones en las que se inscribiò un alumno se cursan el mismo horario y dia de semana pero en semanas intercaladas, por ejemplo
Comision Materia A: Lunes de 19:00 a 21:00hs los dias 7/3, 21/3, 4/4
Comision Materia B: Lunes de 19:00 a 21:00hs los dias 14/3, 28/3, 11/3

Hasta version 2.8.x este control fallaba indicando que habia superposicion horaria, cuando no lo habia porque cursaban en semanas diferentes. A partir de la version 2.9.0 este control se corrigiò para que detecte estos casos y no de error.

Por favor fijate esas dos comisiones que dias (clases) y horarios tienen asignado y ver si realmente hay superposicion.

Efectivamente Ale, ese problema lo detecté yo en IUSAM pero este no es el caso. Ya que las materias se cursan semanalmente en los mismos días y horarios.

Lo que puede ser es que no esten informadas las aulas, ya que nunca las cargaron en el sistema. Que sucede en ese caso? Los horarios tienen superposición para las comisiones involucradas, lo que no recuerdo hoy es si está informada el aula y si está informada la periodicidad. Eso recién lo puedo ver mañana a la noche.

El control funciona bien si las aulas están en NULL?

Saludos

Gustavo

No, no considera el aula, asi que no es problema que la asignaciòn tenga o no tenga aula asignada.
Fue un error mio en el mensaje anterior.

Compara directamente cada clase de cada banda horaria de la comision que el alumno se intenta inscribir con clases de comisiones en las que esta inscripto (comisiones vigentes).

Ale:

Estoy investigando el problema y lo primero que veo es que no existen los SP que me indicas: sp_superphoraria y sp_superpos_subco.

Si el control está invocando esos SP, no funciona porque no existen los SP.

Por otra parte, al hacer las consultas:

select * from sysprocedures where procname like “%superphoraria%”;
select * from sysprocedures where procname = “%superpos_subco%”;

verifico que existe un SP llamadop ctr_superphoraria, pero no existe ninguno para las subcomisiones.

Cuando ejecuto EXECUTE PROCEDURE ctr_superphoraria(“INSPT”, “I60”, “L-32271”, 8207); es decir el control de superposición horaria de las comisiones para el caso del alumno en cuestión y una de las comisiones que tiene superposición horaria, me devuelve
1 OK, es decir como que no hay superposición.

En las tablas vinculadas a las subcomisiones
sga_asign_subcom
sga_docentes_subco
sga_insc_subcom
sga_subcomcupo
sga_subcomisiones

no hay ningún registro en ninguna de ellas.

Adjunto un reporte con las inscripciones del alumno y un documento con las pantallas de la asignación horaria de las comisiones donde se ve la superposición. Yo voy a seguir buscando donde está el problema, pero si recibo alguna ayuda en base a los datos de este mensaje, mucho mejor.

Saludos


Inscripciones alumno CENTO.pdf (15.8 KB)

Asignaciones comisiones.rar (110 KB)

Ale:

Más datos: ejecutando el ctr_superphoraria veo que hasta el comentario:
– Se superpone en dia de la semana y horario. Hay que ver si se superpone en las fechas, porque
– podrian estar en semanas intercaladas (Casos de periodicidad mensual, quincenal, …)
– Verifico las clases de cada comision

encuentra la superposición horaria con la otra comisión, teniendo los ciclos FOR EACH una sola iteración en cada caso, por lo que fue más o menos sencilla la prueba.

A partir de ese punto, el SELECT siguiente al comentario mencionado, da 0 en el COUNT(*) como resultado, o sea la variable vi_cant_clases queda en 0 (cero). En este caso, esto ocurre porque la tabla sga_calendcursada no tiene registros para las comisiones involucradas (comisiones 8207 y 8006). De hecho solo 6 de las 531 comisiones del año 2016 tienen registros en esa tabla … No recuerdo en que momento se generan los registros correspondientes

Y pareciera ser por esto que el control ese NO FUNCIONA bien con la modificación agregada, porque habiendo superposición horaria real entre las comisiones, no la detecta por la lógica agregada y las condiciones de los datos en la base. Ya que al ser la variable vi_cant_clases = 0, y no entrar al IF, en ningún momento le asigna a la variable iStatus el valor -1 que se lo debiera haber asignado antes, cuando encontró la superposición.

La parte posterior al comentario siguiente (" – Verifico la superposición con otras subcomisiones") ni la revisé ya que al no tener subcomisiones no debiera afectar en nada, o si?

Si es necesario, levanto la base al repositorio para ver el problema.

Saludos

Gustavo

Las clases deberian crearse cuando se asignan las bandas horarias a las comisiones
Ventana: w_asignacion_comision
Tabla: sga_calendcursada

Y que puede haber pasado que no se crearo, aparentemente?? En realidad se crearon algunas y otras, la mayoría, no …

Por otra parte, no sería más correcto que si encontró superposición horaria en la comisión y no se encontró superposición horaria en las clases, en este caso por no haber sido generadas, que el control funcione como que efectivamente hay superposición (ya detectó superposición en las comisiones!!)?? A mi me parece que si …

Saludos

PD: de nuevo, no estoy en el INSPT hasta mañana a la noche, recién allí podré ver que pasó que no se generaron, pero si ya podés decirme que puede ser, puedo ver si alguien las genera de alguna manera …

Es que se supone que las clases deberian estar creadas!!!

Recordar que el perìodo lectivo debe tener definido el tramo para asistencias para que se creen las clases!!!
Podes verificar si para las comisiones que no se crearon las clases, el perìodo lectivo no tiene ningun tramo definido?

Si, tal vez si detecta que la asignacion horaria de la comision no tiene clases pero se superpone en fechas inicio-fin y dia de la semana y horario entonces podria fallar y no dejar inscribir…
Crea una solicitud asi vemos de ajustr estos dos controles considerando este caso (cuando no se crearon las clases porque no llevan asistencia) y te lo enviamos.
Incluiremos esta modificaciòn en la version 2.9.3

pd: Volviste con todo!!!

OK. Gracias!!

Mañana verifico lo de los tramos … y si, puede ser eso. La mayor parte de las materias son anuales y puede ser que las que tienen las clases generadas sean las del 1er. cuatrimestre …

Genero el GDS como indicas, creo que va a ser lo mejor, le puede pasar a otro si no utiliza asistencias y no genera o se olvida de generar los tramos. Antes no pasaba nada (en la versión 2.7) porque ese control funcionaba bien, para lo que ya hacía.

Saludos

PD: no volví con todo … volví con mucha fiaca en Febrero y recién ahora después de 2 meses, me engancho en leer los foros … Y usarlos para solucionar algunos problemitas nuevos

Alejandro:

Lamentablemente no se comprobó tu teoría … los tramos estaban definidos perfectamente. Se generaron clases en calendario de cursada para 6 de las 404 comisiones del período lectivo Anual, y ninguna para el periodo lectivo 1º Cuatrimestre.

Se te ocurre algún otro motivo para que no se hayan generado las clases? En que momento se generan? Con que SP o trigger??

Como puedo hacer para generarlas?

Saludos

PD: ahí genere el GDS para que se haga la modificación del control. Solicitud número 19217.

Gustavo

Las clases se crean cuando se asignan las bandas horarias a las comisiones
Ventana: w_asignacion_comision
Evento: ue_set_calendario
Se agregan registros en la tabla: sga_calendcursada

Las fechas de cada clase se recuperan con el procedure sp_get_fechas_bh. Fijate si es que en tu instalacion este procedure esta recuperando fechas segun la fecha de inicio-fin de la banda horaria, y periodicidad.
Podes probarlo para alguna banda horaria que tengas creada en alguna comision y no tenga clases para ver si recupera o no fechas y sino recupera ver el motivo del porque no recupera.

Anoche después de escribir el mensaje anterior y generar el GDS, me quedé probando más cosas.

En la asignación de bandas horarias. si modifico algunos datos no genera las clases, pero si las genera si lo que modifico es el día de dictado o si modifico la periodicidad. Para las 2 comisiones que tenía en estudio, si les cambiaba de día, del Martes al Domingo, por ejemplo, me generaba las clases.

La intriga es porque no se generaron oportunamente, capaz que cuando se hicieron las asignaciones horarias no estaban cargados los tramos?? Donde se guardan los datos de los tramos y en consecuencia sus datos del log, a ver si viendo los logs consigo descubrir que pasó?

Tengo alguna manera rápida de generar las clases para todas las comisiones que no la tengan, sin que signifique entrar una a una y modificar el día, para luego volverlo a modificar y que sea el correcto?

Saludos

Gustavo

Tabla sga_inasis_tramos.
Seguramente paso que no estaban el tramo para el periodo lectivo de esas comisiones.

Ale:

Después de poner operativo el control modificado, pasar a todos los alumnos inscriptos del 2016 con estado “A” al estado “P” y procesar los pendientes aparecieron muchos con superposición (unos 130), acabo de hacer un listado para que los Coordinadores Académicos llamen a uno por uno y que elijan que materia de las superpuestas van a elegir. Con eso creo que el problema está superado.

Ahora me puse a ver porqué sucedió eso, que no se generaron las clases. Y lo de la hipótesis del tramo no es, ya que los tramos se generaron junto con los períodos lectivos , como se puede ver:
45 2016 Anual 1 21/03/2016 18/11/2016 glovallo 2016-02-18 11:16:38 I
46 2016 1° cuatrimestre 1 21/03/2016 16/07/2016 glovallo 2016-02-18 11:26:00 I
47 2016 2° cuatrimestre 1 08/08/2016 18/11/2016 glovallo 2016-02-18 11:32:31 I
48 2016 Curso Cuatrimestral 1 21/03/2016 18/11/2016 glovallo 2016-02-18 11:36:44 I

Y las primeras comisiones se generaron el 19/02/2016, por lo tanto la asignación de la banda horaria tuvo que ser en esa fecha o posterior, y los tramos ya estaban generados.

Se te ocurre alguna otra causa?

Y más importante, tengo alguna manera rápida de generar las clases para todas las comisiones que no la tengan ya, sin que signifique entrar una a una a las bandas horarias por el ABM y modificar el día, para luego volverlo a modificar y que sea el correcto?

Saludos

Gustavo

No se me ocurre porque pudo haber pasado eso.

Fijate de usar el procedure sp_crearcalendcurs. Recibe el dato de la comision, y por cada banda horaria crea las clases.
Por las dudas verifica si las fechas de inicio y fin de la banda horaria de esa comision esta dentro de las fecha de inicio y fin del año academico, porque este procedure no crea clases si caen fuera del año academico. Si no podes modificarlo y sacar ese control.

hola! nos pasó lo mismo. Estamos en la 2.9.3. No tenemos de algunas comisiones las clases generadas y entonces el control no funcionó y tenemos alumnos con superposición.
La gente del departamento de estudiantes usó la operación cur00023 GENERAR COMISIONES copiando de períodos anteriores las comisiones y creo que ahi fue que no se generaron las clases.
Mirando el sp sp_i_copia_com_per genera por copia las comisiones, las bandas horarias pero no las clases.
eso está bien? o debería agregar en ese SP que ademas genere las clases?
Necesito saber como solucionarlo para evitar problemas en el proximo periodo lectivo. Aca siempre se usa esa operación asi que va a volver a pasar.
Gracias!
Jacqui

Es correcto, la copia de comisiones de un periodo lectivo anterior no genera las clases (registros en la tabla sga_calendcursada) de las bandas horarias que se crean en cada comision generada (tabla sga_asign_clases).

Deberías hacer lo siguiente:

  1. Crear una temporal para registrar las comisiones que no tienen clases:
CREATE TEMP TABLE _Tcom (comision integer);
  1. Llenar la temporal con las comisiones a las que no se le creo clases (agrega los filtros que sean necesarios):
INSERT INTO _Tcom (comision)
SELECT comision FROM sga_comisiones 
WHERE anio_academico = 2018
    AND periodo_lectivo = '.......'
    AND NOT EXISTS (SELECT 1 FROM  sga_calendcursada as a  WHERE a.comision = sga_comisiones.comision);

  1. Armar el sql para que cree las clases de las comisiones que no tienen clases creadas:
SELECT 'EXECUTE PROCEDURE sp_crearcalendcurs (' || comision || ');' FROM _Tcom ORDER BY 1;
  1. Ejecutar la consulta anterior y sacar las sentencias a ejecutar y correrlas para que genere las clases.
    Por ejemplo quedará algo asi:
EXECUTE PROCEDURE sp_crearcalendcurs(345);
EXECUTE PROCEDURE sp_crearcalendcurs(350);
EXECUTE PROCEDURE sp_crearcalendcurs(351);
EXECUTE PROCEDURE sp_crearcalendcurs(352);
EXECUTE PROCEDURE sp_crearcalendcurs(368);
.....

  1. Borrar la tabla temporal o cerrar la sesion de la base y se borra automaticamente.
DROP TABLE _Tcom;