[CERRADO] mesa de examen

Estimados:
En esta versión tambien tengo el error de mesas de examenes.s.

Se da de alta una mesa de examen y posteriormente se quiere inscribir a los estudiantes dice que no hay mesas disponibles para el alumno.
Gracias, saludos, Emilio.

Emilio, corroboraste que:

  1. La mesa este creada para la propuesta y plan del alumno
  2. Exista un período de inscripcion vigente para la version del plan del alumno
  3. La mesa sea de la ubicación del alumno (a menos que se permita rendir en otra ubicacion que no sea la del alumno)
  4. La mesa este definida para la modalidad de cursada del alumno (presencial, a distancia…)
  5. La mesa si es solo para regulares, el alumno tenga la cursada vigente.

Todo está chequeado, se hicieron todos los pasos.
Gracias!!!

Chequeaste el NIvel que tiene definido el llamado?

ana

Hola, hay dos posibilidades más:

  1. Ir al plan de estudios, seleccionar la actividad y en las características chequear si la materia está habilitada para Rendir Examen.

  2. Ir al ABM de Actividades, buscar la materia y fijarse si está “Disponible para: Todas las operaciones”.

Los dos puntos estan verificados y no tenemos inconcistencia con las recomendaciones.

Gracias

Hola

Si es una instalación que trabajes solo y tengas acceso a los logs, hace lo siguiente.
Ejecutá el guarani hasta que te aparezca el mensaje que no existen mesas. Ni siquiera clickees en aceptar
En ese momento abrí los log y fijate las consultas que hizo. Alguna de las últimas debería no devolverte registros y saldrá cual es la condicion que hace no devolver filas.

Emilio Luque

¿Cual es la versión del sistema? Como empezas diciendo “En esta version también…”. Tal vez lo dijiste en otro mensaje en este foro.

Perdon por no aclarar. Acabo de migrar de la 3.0.0(5) a la 3.4.1. Gracias

Estimados, adjunto el log con la operacion. Desde ya agradezco colaboracion. Saludos, Emilio


log.txt (13.1 KB)

Tomá el select de las mesas de examen y ejecutalo en postgres
Supuestamente no te debería devolver nada.
Empezá a comentar las lineas del where en la cual pasas datos de a una.
fijate en cual de ellas te devuelve algo.

Si no logras que te devuelva algo, empezá a comentar los join a ver que pasa.

Por suerte no son tantos.

Emilio

Emilio:

Por lo que vi el scrip tira error al invocar la funcion “f_mesas_vigentes_una_actividad”

ERROR: function f_mesas_vigentes_una_actividad(unknown, unknown, unknown, unknown, boolean, unknown) does not exist

Llendo de abajo hacia arriba, eliminando los AND y por ultimo el WHERE todas las condiciones me trajieron resultados. Gracfias, Emilio

Hola

Existe esa función en la base de datos?

no tendrás un problema de casting en la instalación del postgresql?

No se…, como me doy cuenta…?, que tengo que hacer para solucionarlo…? Gracias

Por lo que me comentas si…

ERROR: function f_modalidad_cursada_examen(integer) does not exist
LINE 11: f_modalidad_…
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

ERROR: function f_modalidad_cursada_examen(integer) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 1039

Hola Emilio!
Por lo que veo en el log de Toba que adjuntaste no se está generando ningún error con las funciones en la sql, con lo cual existen en la base y están bien definidas. De otra forma, si hubiese algún error con los argumentos, tipos o existencia de: f_modalidad_cursada_examen o de f_mesas_vigentes_una_actividad, quedaría registrado ese error de postgresql capturado por Toba en el log. Supongo que lo otro que mencionás debe ser algún tema de configuración de la herramienta que estás utilizando para probar las consultas (pgadmin o alguna otra).

Lo que se ve en el log es que se captura el error de sistema “No hay mesas disponibles para el alumno y actividad seleccionados”, excepción que se genera cuando la sql no retorna datos.
Como bien dice Emilio Luque la opción más fácil para que detectes qué condición es la que te está faltando, es ir comentando los filtros del where.
La sql concreta que está ejecutando en tu instalación en el ejemplo que enviás es:
SELECT sga_mesas_examen.mesa_examen,
sga_mesas_examen.nombre as mesa_nombre,
sga_llamados_mesa.entidad,
sga_llamados_mesa.llamado_mesa,
sga_periodos_llamado.nombre as llamado_nombre,
sga_llamados_mesa.fecha,
to_char(sga_llamados_mesa.fecha,‘DD/MM/YYYY’) || ’ ’ || to_char(cast(sga_llamados_mesa.hora_inicio as time), ‘HH24:MI’) as fecha_visual,
COALESCE(sga_catedras.nombre, ’ ') as catedra_nombre,
sga_mesas_examen.ubicacion,
sga_ubicaciones.nombre as ubicacion_nombre,
f_modalidad_cursada_examen(sga_mesas_examen.mesa_examen) as modalidad_nombre,
sga_periodos_llamado.anio_academico,
sga_llamados_turno.turno_examen,
sga_periodos_llamado.anio_academico || ’ - ’ || periodos_turnos_examen.nombre as turno_examen_nombre,
(SELECT count(*) FROM sga_docentes_mesa_llamado WHERE sga_docentes_mesa_llamado.llamado_mesa = sga_llamados_mesa.llamado_mesa) as docentes_cant

                            FROM    sga_mesas_examen
                                            LEFT JOIN sga_catedras ON sga_catedras.catedra = sga_mesas_examen.catedra,
                                            sga_ubicaciones,
                                            sga_llamados_mesa,
                                            sga_llamados_turno,
                                            sga_periodos as sga_periodos_llamado,
                                            sga_turnos_examen,
                                            sga_periodos as periodos_turnos_examen

                            WHERE   sga_mesas_examen.mesa_examen = sga_llamados_mesa.mesa_examen
                                            AND sga_ubicaciones.ubicacion = sga_mesas_examen.ubicacion
                                            AND     sga_mesas_examen.elemento = '3'

                                            AND     sga_llamados_turno.llamado = sga_llamados_mesa.llamado
                                            AND     sga_periodos_llamado.periodo = sga_llamados_turno.periodo
                                            AND     sga_turnos_examen.turno_examen = sga_llamados_turno.turno_examen
                                            AND     sga_turnos_examen.periodo = periodos_turnos_examen.periodo
                                            AND     sga_llamados_mesa.fecha >= CURRENT_DATE
                                            AND sga_llamados_mesa.llamado_mesa IN (SELECT * FROM f_mesas_vigentes_una_actividad('3', '1', '2', '2', true, '1'))

                            ORDER BY
                                            sga_periodos_llamado.anio_academico DESC,
                                            sga_llamados_turno.turno_examen ASC,
                                            sga_llamados_mesa.fecha DESC,
                                            sga_llamados_mesa.hora_inicio DESC

En concreto, si ya verificaste las condiciones que mencionó Alejandro, la ejecución de esta función con los parámetros dados:
SELECT * FROM f_mesas_vigentes_una_actividad(‘3’, ‘1’, ‘2’, ‘2’, true, ‘1’)
debería retornarte un conjunto de datos no vacío…esto es así?

Espero que te sirva de ayuda.
Saludos! Gabi.

Estimados:

La unica forma que encuentro de ejecutar el SELECT es comentando las lineas que tienen las funciones. De esta manera todas las condiciones arrojan resultados, juntas o individualmente:

f_modalidad_cursada_examen

ERROR: function f_modalidad_cursada_examen(integer) does not exist
LINE 11: f_modalidad…
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

********** Error **********

sga_llamados_mesa.llamado_mesa
ERROR: function f_mesas_vigentes_una_actividad(unknown, unknown, unknown, unknown, boolean, unknown) does not exist
LINE 35: …sga_llamados_mesa.llamado_mesa IN (SELECT * FROM f_mesas_vi…
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

********** Error **********

Estoy utilizando pgAdmin3 y las funciones las tengo en la base de datos.

Ejecutandolo desde psql arroja el mismo error:

psql -d g3p -f selectError.sql
psql:selectError.sql:41: ERROR: function f_modalidad_cursada_examen(integer) does not exist
LINE 11: f_modalidad…
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

Alguna forma alternativa de realizar la tarea. Estoy apremiado con las necesidades operativas.

Gracias

Hola

Supongo que verificastes la existencia de las funciones.

Si están correctamente creadas fijate si esto

http://foro.comunidad.siu.edu.ar/index.php?topic=2088.0

te resuelve el problema.

Emilio

Estimado Emilio:

No me doy cuenta entre que tengo que hacer el cast…, por lo que veo solo interviene una variable integer…, asi que no se como hacerlo…, no me doy cuenta…

Gracias

CREATE OR REPLACE FUNCTION f_modalidad_cursada_examen(integer)
STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT

???
[b]int4($1::text);';

CREATE CAST (integer AS integer) WITH FUNCTION
f_modalidad_cursada_examen(integer) AS IMPLICIT;[/b]

No
tenes que ejecutar las dos

CREATE OR REPLACE FUNCTION pg_catalog.varchartoint(character varying) RETURNS integer
STRICT IMMUTABLE LANGUAGE SQL AS ‘SELECT
int4($1::text);’;

CREATE CAST (character varying AS integer) WITH FUNCTION
pg_catalog.varchartoint(character varying) AS IMPLICIT;

luego tu funcion utilizará el cast definido en la última.

Recopilemos un poco.
la funcion
SELECT * FROM f_mesas_vigentes_una_actividad(‘3’, ‘1’, ‘2’, ‘2’, true, ‘1’))
no anda. Es así?
Probá
SELECT * FROM f_mesas_vigentes_una_actividad(3, 1, 2, 2, true, 1)
a ver si funciona.

si la segunda devuelve algo pero la primera no, es un problema de cast. Ejecutando las dos funciones debería resolverse
Si no es un tema de datos.

O sea…

Si tenes un problema de cast yo te recomendaría que hagas un backup de la base de datos y reinstales el postgres con los cast habilitados. No que sigas con estos parches.

Emilio