error al aplicar a planes

Buen día, estamos con le versión 3.18.1 y al agregar una optativa a una actividad generica me da el siguiente error cuando quiero “Aplicar a planes”

ERROR: llave duplicada viola restricción de unicidad «pk_sga_elementos_plan»\nDETAIL: Ya existe la llave (elemento_plan)=(61147).\nCONTEXT: sentencia SQL: «INSERT INTO sga_elementos_plan (\n elemento_plan,\n plan_version,\n elemento_revision,\n nombre,\n nombre_abreviado,\n anio_de_cursada,\n periodo_de_cursada,\n escala_nota_cursada_regular,\n escala_nota_cursada_promocion,\n escala_nota_examen,\n escala_nota_equivalencia,\n creditos,\n creditos_min,\n creditos_max,\n coeficiente,\n horas_semanales,\n horas_totales,\n requiere_cursada,\n requiere_examen,\n permite_promocion,\n permite_rendir_libre,\n aprobacion_x_resolucion,\n vigencia,\n plazo,\n promediable,\n sale_listado,\n cantidad_de_aplazos,\n cobrable)\n SELECT \n elemento_plan,\n plan_version,\n elemento_revision,\n nombre,\n nombre_abreviado,\n anio_de_cursada,\n periodo_de_cursada,\n escala_nota_cursada_regular,\n escala_nota_cursada_promocion,\n escala_nota_examen,\n escala_nota_equivalencia,\n creditos,\n creditos_min,\n creditos_max,\n coeficiente,\n horas_semanales,\n horas_totales,\n requiere_cursada,\n requiere_examen,\n permite_promocion,\n permite_rendir_libre,\n aprobacion_x_resolucion,\n vigencia,\n plazo,\n promediable,\n sale_listado,\n cantidad_de_aplazos,\n cobrable\n FROM sga_elementos_plan_aux\n WHERE elemento_revision = optativas.revision_optativa\n AND optativa_existe_en_plan = "N"»\nfunción PL/pgSQL f_confirmar_modificacion_actividad_generica(integer) en la línea 51 en sentencia SQL

SQL: SELECT *\n FROM f_confirmar_modificacion_actividad_generica(9042);\n -- toba_log: 6906577

que puede estar pasando?

Gracias,
Naimid

Hola Naimid, buen dia. Probá quitar esas optativas que agregaste a la genérica y volver a agregarlas y luego la opción de aplicar los cambios en los planes donde se encuentra la genérica.
Puede ser que desde que diste de alta las optativas en la genérica y hasta el momento que seleccionaste el boton “Aplicar a Planes” alguien haya creado o modificado algun plan de estudios?

Podes enviar el resultado de esta consulta asi vemos a que actividad hace referencia?
¿Se corresponde con algunas de las optativas que estas agregando?

SELECT * FROM vw_actividades_plan WHERE elemento_plan = 61147

Si la consulta anterior da error porque no existe el campo “elemento_plan” en la vista, proba con:

SELECT a.* 
FROM sga_elementos_plan as ep 
JOIN vw_actividades_plan as a  ON a.plan_version = ep.plan_version  AND a.elemento_revision = ep.elemento_revision
WHERE ep.elemento_plan = 61147

Hola Alejandro, gracias por la respuesta Te ajdunto el resultado de la primera query (ya que no dio error). El resultado es la actividad que estoy queriendo agregar. Figura en sga_elementos_plan pero desde la operación administrar planes de estudios no veo la actvidad.

Gracias,
Naimid


resultado_query.txt (268 Bytes)

¿Probaste sacar la optativa de la genérica, y volver a realizar todo el proceso?

La actividad Seminario Externo (Ext0001), lo devuelve la consulta y segun dice esta en la version de plan 168
Fijate si es la version de plan donde esta la genérica a donde queres agregar esa actividad:

SELECT * FROM vw_planes WHERE plan_version = 168

Deberias ver esa actividad en este módulo/genérica en el plan:

SELECT e.*
FROM sga_elementos_com as ec 
JOIN vw_elementos as e ON  e.elemento_revision = ec.elemento_padre
WHERE ec.elemento_hijo = 17238

Esa operación tuvo cambios en versión 3.19 y 3.20.

2

Hola Alejandro, lo estuve viendo y NO. No es la versión del plan en donde quiero agregar a la genérica. Es una versión de otra propuesta, en donde se encuentra una actividad generica con distinto código pero mismo nombre. Hemos migrado a la version 3.20.1 y continuamos con el mismo problema.

Saludos,
Naimid.

Hola Naimid, te vuelvo a consultar porque no se si probaste sacar la optativa de la genérica, y volver a realizar todo el proceso.

Hola Alejandro, sí.Probé borrar la actividad, guardar y agregarla nuevamente y me da el mismo error. Tengo otro caso en donde me sucede el mismo problema con otra actividad genérica y otro actividad.

Saludos,
Naimid

Hola Naimid, el problema no es con la generica, es con la optativa que estas intentando agregar.
Fijate en que versiones de plan se encuentra la generica:

SELECT plan_version  FROM vw_elementos  WHERE elemento = <ID ELEMENTO GENERICA>

Luego fijate si existe la optativa en esas versiones de plan, ya sea por otra genérica o como una materia normal:

SELECT *  FROM vw_actividades_plan  
WHERE elemento = <ID ELEMENTO OPTATIVA>
   AND plan_version IN (SELECT plan_version  FROM vw_elementos  WHERE elemento = <ID ELEMENTO GENERICA>)

¿Existe ya la optativa en alguna de las versiones de plan donde esta la genérica a la que estas agregando la optativa?
Se supone que este caso esta contemplado y no se intenta agregar nuevamente la optativa al plan de estudios.

Borraste los datos de las tablas sga_elementos_comp_aux, sga_elementos_plan_aux y sga_elementos_plan_modalidad_aux y volviste a probar de agregar la optativa en la generica?

SET search_path = negocio;
DELETE FROM sga_elementos_plan_modalidad_aux;
DELETE FROM sga_elementos_plan_aux;
DELETE FROM sga_elementos_comp_aux;

En este otro foro con el mismo problema se resolvio borrando lo que habia en las tablas auxiliares y se volvió a agregar la optativa.
El problema era que estaban editando de a dos o tres genericas a la vez.
https://foro.comunidad.siu.edu.ar/index.php?topic=15891.0;prev_next=prev#new

Hemos migrado a la version 3.20.1 y continuamos con el mismo problema.
Agregaron la optativa despues de migrar a 3.20.1 o antes? Porque si la optativa ya estaba agregada a la generica, entonces el problema sigue estando porque el id del campo "elemento_plan" ya esta registrado en al tabla auxiliar.

Gracias Alejandro, se solucionó borrando los datos de las tablas temporales:

SET search_path = negocio;
DELETE FROM sga_elementos_plan_modalidad_aux;
DELETE FROM sga_elementos_plan_aux;
DELETE FROM sga_elementos_comp_aux;

Saludos,
Naimid.