Error al usar inscribir a propuestas

Hola:
Estamos en la versión 3.13.2 y al queres usar la operacion de Inscribir a Propuestas de Gestión, me salta un error de requisitos cumplidos.
El caso es el siguiente, hay una alumna que ya esta en G3, y se le dio permiso a entrar a 2º año de otra propuesta. Cree un periodo de inscripción para esa propuesta solo por dos dias para poder cargarla. Y cuando lo hago tira este error:
SQLSTATE: db_23505
CODIGO: 7
MENSAJE: SQLSTATE[23505]: Unique violation: 7 ERROR: llave duplicada viola restricción de unicidad «iu_sga_requisitos_aspirante_prop_aspira_requisito» DETAIL: Ya existe la llave (propuesta_aspira, requisito)=(69560, 1008).
SQL: INSERT INTO sga_requisitos_aspirante ( parametros, propuesta_aspira, requisito, fecha_prorroga, documento_prorroga, exceptuado, fecha_excepcion, documento_excepcion, motivo_excepcion, observaciones, origen, restrictivo ) VALUES (DEFAULT, “69560”, “1008”, DEFAULT, DEFAULT, “N”, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, “S”); – toba_log: 288134451

Ella ya es alumna de una carrera y no tiene que volver a cargar los requisitos cumplidos, ya que los tiene.
¿Es un error de la versión o hay algo mas?
Saludos

¿El requisito está duplicado?
http://foro.comunidad.siu.edu.ar/index.php?topic=14002.msg60829

No. No esta duplicado. Además estamos haciendo el ingreso por Gestión y no le cargamos ningún requisito ya que no deberían ser necesario, la chica es alumna de la facultad en otra propuesta.
Saludos

Rodrigo, podes enviar una captura de pantalla de la solapa de requisitos de ingreso de la ficha del alumno?
Fijate si hay algún requisito que este registrado como presentado mas de una vez en la misma fecha.
En el link que envió Emilse, en la ultima respuesta de ese otro mensaje hay una consulta, por favor ejecutala y fijate si devuelve algun requisito.

Hola Alejandro:
Ya se lo encontré, efectivamente había un requisito que estaba de mas. Lo borre y anduvo de diez.
Muchicismas gracias

Hola buenas tardes! Nos sucede exactamente este mismo inconveniente.

A continuación el log:
Unique violation: 7 ERROR: llave duplicada viola restriccin de unicidad iu_sga_requisitos_aspirante_prop_aspira_requisito
DETAIL: Ya existe la llave (propuesta_aspira, requisito)=(208051, 1002).

SQL: INSERT INTO sga_requisitos_aspirante ( parametros, propuesta_aspira, requisito, fecha_prorroga, documento_prorroga, exceptuado, fecha_excepcion, documento_excepcion, motivo_excepcion, observaciones, origen, restrictivo )
VALUES (DEFAULT, ‘208051’, ‘1002’, DEFAULT, DEFAULT, ‘N’, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, ‘N’); – toba_log: 419087403

Revisamos la ficha de la persona y no tienen ningún requisito duplicado en los requisitos de ingreso.

Además no tenemos la propuesta_aspira=208051, la última inserción es la propuesta_aspira=208044

“En el link que envió Emilse, en la ultima respuesta de ese otro mensaje hay una consulta, por favor ejecutala y fijate si devuelve algun requisito.” → corrimos la consulta y la persona no aparece en el listado.

No es el único caso con el que nos está sucediendo esto mismo, pero esta es por una simultaneidad, en el otro caso es un cambio de carrera.
Estamos en la versión 3.20.0

Desde ya muchas gracias, saludos!

Vean que requisito es el 1002. Y si lo tienen configurado como requisito de ingreso mas de una vez para esa propuesta en la que intentan inscribir a ese alumno.
Corran estas dos consultas y envien el resultado si alguna devuelve datos:

SELECT r.nombre as requisito_nombre, ri.* 
FROM sga_requisitos_ingreso as ri
JOIN sga_requisitos as r ON r.requisito = ri.requisito
WHERE 
 ((ri.tipo = 'S' AND NOT EXISTS (SELECT 1 FROM sga_requisitos_ingreso_subtipos as s WHERE s.requisito_propuesta = ri.requisito_propuesta)) OR 
  (ri.tipo = 'E' AND NOT EXISTS (SELECT 1 FROM sga_requisitos_ingreso_entidades as e WHERE e.requisito_propuesta = ri.requisito_propuesta))
 )
ORDER BY r.nombre, ri.requisito, ri.requisito_propuesta ;

SELECT r.requisito, r.nombre as requisito_nombre, p.propuesta, p.propuesta_nombre, p.plan, p.plan_version, ri.restrictivo
  FROM vw_planes as p 
  JOIN sga_requisitos_ingreso_aplanado as ria ON ria.plan_version = p.plan_version
  JOIN sga_requisitos_ingreso as ri ON ri.requisito_propuesta = ria.requisito_propuesta 
  JOIN sga_requisitos as r ON r.requisito = ri.requisito
GROUP BY r.requisito, r.nombre, p.propuesta, p.propuesta_nombre, p.plan, p.plan_version, ri.restrictivo 
HAVING COUNT(distinct ri.restrictivo) > 1 
ORDER BY r.requisito, p.propuesta

Corrí las consultas pero ninguna devuelve datos.

Algo que me resulta extraño de todos modos es que en el log trata de hacer un insert sobre una propuesta_aspira que no existe.

Revisé el requisito 1002, pero en ninguna propuesta está duplicado.

Hola María,

Saben cuál es el requisito 1002? Pueden ingresar a la operación “REQUISITOS » REQUISITOS DE INGRESO » REPORTE DE REQUISITOS DE INGRESO POR PROPUESTA” (accediendo con un usuario que no tenga perfil de datos) y consultar por ese requisito y la propuesta en la que están intentando inscribir. El reporte tiene filas duplicadas?
Pueden adjuntar los logs del sistema completos al momento del error?

Saludos, Florencia.

Algo que me resulta extraño de todos modos es que en el log trata de hacer un insert sobre una propuesta_aspira que no existe
No existe ahora porque la inscripción no se realizó. Ese id ya se perdió. Todo esta dentro de una transacción (alta de la inscripción a propuesta, registro de los requisitos de ingreso que el aspirante debe presentar, alta de alumno..), si algo falla todo se vuelve atras pero estos ids por ser de secuencias se pierden ya que no se vuelven a utilizar en una próxima inscripción.

Florencia te adjunto la captura de guaraní donde se ven los requisitos de ingreso asociados a la propuesta.

Y además el archivo de log completo.

Saludos!


captura.png

captura.png

log_completo.txt (3.11 KB)

Gracias Alejandro por la respuesta y mencionar Florencia que el requisito 1002 es 1-Foto 4x4 que bien ahí aparece en el listado.

Saludos.

María,

En el log que adjuntás no se ve la secuencia completa sino sólo el error en el INSERT.
Si pueden buscar los identificadores de persona, período de inscripción y plan-versión les pediría que los reemplacen en la siguiente consulta SQL, la ejecuten y nos envíen el resultado:

SELECT		DISTINCT sga_requisitos_ingreso_aplanado.requisito_propuesta,
			sga_requisitos_ingreso.requisito,
			sga_requisitos_ingreso.restrictivo,
			sga_requisitos_ingreso.visible_en_preinscripcion,
			sga_requisitos_ingreso.doc_digital_obligatorio_preinscripcion,
			sga_requisitos_ingreso.parametros,
			sga_requisitos.nombre as nombre_req,
			sga_requisitos.regla,
			sga_requisitos.requisito_tipo,
			sga_requisitos_tipos.nombre as tipo_req,
			sga_requisitos.tipo_documento_digital,
			sga_requisitos_presentados.requisito_presentado,
			sga_requisitos_presentados.fecha_presentacion,
			sga_requisitos_presentados.fecha_vencimiento,
			sga_requisitos_presentados.fecha_alta,
			CASE
				WHEN (sga_requisitos_presentados.fecha_presentacion IS NULL OR sga_requisitos_presentados.fecha_vencimiento < CURRENT_DATE) THEN 0
				ELSE 1
			END as cumplido,
			COALESCE(sga_requisitos_ingreso_excep.fecha_tope,sga_periodos_inscripcion_propuesta.fecha_cierre_requisitos) as fecha_tope,
			sga_requisitos_digitales.requisito_digital,
			sga_requisitos_digitales.id_documento	
FROM		sga_requisitos_ingreso_aplanado
			JOIN sga_requisitos_ingreso ON sga_requisitos_ingreso.requisito_propuesta = sga_requisitos_ingreso_aplanado.requisito_propuesta
			JOIN sga_requisitos ON sga_requisitos.requisito = sga_requisitos_ingreso.requisito
			JOIN sga_requisitos_tipos ON sga_requisitos_tipos.requisito_tipo = sga_requisitos.requisito_tipo
			JOIN sga_periodos_inscripcion_propuesta ON true
			LEFT JOIN sga_requisitos_presentados ON sga_requisitos_presentados.requisito_presentado = (	SELECT		rp.requisito_presentado
																										FROM		sga_requisitos_presentados as rp
																										WHERE		rp.persona = <Identificador de la persona> AND
																													rp.requisito = sga_requisitos_ingreso.requisito
																										ORDER BY	rp.fecha_presentacion DESC,
																													rp.requisito_presentado DESC
																										LIMIT		1)						
			LEFT JOIN sga_requisitos_ingreso_excep ON sga_requisitos_ingreso.requisito = sga_requisitos_ingreso_excep.requisito AND sga_requisitos_ingreso_excep.periodo_inscripcion = <Identificador del período de inscripción>
			LEFT JOIN sga_requisitos_digitales ON sga_requisitos_ingreso.requisito = sga_requisitos_digitales.requisito AND sga_requisitos_digitales.persona = <Identificador de la persona>
WHERE		sga_requisitos_ingreso_aplanado.plan_version = <Identificador del plan-versión> AND
			sga_periodos_inscripcion_propuesta.periodo_inscripcion = <Identificador del período de inscripción>
ORDER BY	sga_requisitos_ingreso.requisito;

Saludos, Florencia.

Agrego a la query que les envió Florencia en el mensaje anterior:

Esta query no necesita parametros, fijate si devuelve registros:

SELECT persona, requisito, count(*) FROM sga_requisitos_digitales  GROUP BY persona, requisito HAVING COUNT(*) > 1;

¿Esa preinscripción que estan intentando procesar, es de un aspirante que ya es alumno en alguna otra propuesta o es un nuevo aspirante preinscripto por el módulo de preinscripción?

Es el mismo caso que el planteado en este otro mensaje

Te envío el resultado obtenido, acá si aparece dos veces el requisito 1002. Adjunto salida.

Muchas gracias.


salida_query.pdf (42.8 KB)

María,

Claro, el problema es que existen dos registros diferentes en la tabla ‘sga_requisitos_digitales’ para la misma tupla persona-requisito-id_documento. Qué resultado devuelve esta consulta SQL?

SELECT * FROM sga_requisitos_presentados WHERE requisito_digital IN (11076, 13222);

Saludos, Florencia.

Hola Florencia buen día! Con la query que me pasaste obtengo una única salida.

Probé también la query :
select * from sga_requisitos_digitales WHERE requisito_digital IN (11076, 13222);

Te adjunto imágenes de ambas salidas.
Saludos


requisitos_presentados.png

requisitos_presentados.png

requisitos_digitales.png

requisitos_digitales.png

María,

Para solucionar este caso en particular bastaría con ejecutar la siguiente sentencia SQL:

DELETE FROM sga_requisitos_digitales WHERE requisito_digital = 11076;

Te pido que crees una solicitud en el Gestor de Solicitudes haciendo referencia a este post para evaluar una solución definitiva.

Saludos, Florencia.