Error al dar de alta un Bien Patrimonial (SOLUCIONADO)

Estimados, buenas tardes.

Hasta el día lunes teníamos instalada la versión 2.0.0 de diaguita, el día lunes instalamos la versión 2.1.0 desde ese momento no podemos dar de alta bienes patrimoniales por el siguiente error…

" Se ha detectado un nombre de columna duplicado en una operación de inserción o actualización, o bien la sentencia SET de variable de transición. "

Adjunto imagen.

Estoy buscando dentro del sistema en donde genera la consula para modificarla.
Podrán ayudarme con este tema? o informarme una mejor solución??

desde ya muchas gracias.

Saludos

Diego P


diaguita.png

diaguita.png

Hola Matias,

Con cualquier bien que quiera dar de alta y el error lo tira cuando le doy al botón “guardar cambios” que figura en la imagen.

Hola Diego,

Si pueden adjuntar el archivo diaguita/instalacion/i__produccion/p__diaguita/logs/sistema.log (opcionalmente el log del PostgreSQL) al momento de producirse el error, asi podemos rastrear la consulta conflictiva y darle una solución.

Saludos!

Adjunto el archivo pedido…

Muchas gracias…

Saludos.


sistema.txt (94.6 KB)

Diego,

Revisando los logs que adjuntaste, puedo ver que el problema está en el trigger de auditoria sp_scp_alta_bien_patrimonial_detalles que está presente en el esquema diaguita_auditoria de la base de datos. Puntualmente, el problema es que está duplicada una columna en la definición de la sentencia sql

INSERT INTO diaguita_auditoria.logs_scp_alta_bien_patrimonial_detalles (...) VALUES (...) 

Este SQL (parte del trigger), se genera y actualiza automáticamente por Toba… cuando se instala una nueva versión de SIU-Diaguita. Una solución temporal sería que editen dicho trigger y eliminen la definición de columna repetida titular_bien_tercero en todos los lugares donde interviene. Adjunto un SQL de dicho trigger que pueden ver como referencia y comparar.

De todas formas, es raro que suceda pero no imposible, porque tiene que ver la forma en que Toba lee el catálogo de columnas del PostgreSQL para construir dinámicamente el trigger. Te pido que generen una solicitud GDS para darle solución al mecanismo de actualización de la auditoria presente en Toba.

Saludos!


sp_scp_alta_bien_patrimonial_detalles.sql (2.87 KB)

Muchas gracias sergio.

Modifique el insert y anduvo. Estaba repetido el campo “titular_bien_tercero”

Decís que genere un GDS para que no vuelva a ocurrir en futuras actualizaciones??

Saludos.

Diego.

Diego,

te adjunto un script SQL para que lo corran en la DB y así obtener algunos datos de la estructura. No modifica nada, solo realiza un select sobre las tablas… y me gustaría ver el resultado que les produce.


consulta_sp.sql (2.36 KB)

Buenas tardes Sergio;

Perdón por la demora.

adjunto los datos pedidos.

Diego


Info_siu.zip (7.16 KB)

Hola Diego,
Cómo andás?
Te queríamos consultar si después de la actualización 2.2.0 te pasó lo mismo???
Si podés, probalo y comentanos como les fue…
Muchas gracias!!!
Juan Manuel.

Buenas tardes.
me da el mismo error. modifique los triggers, y ahora el error es otro.

adjunto imagen.


error1.png

error1.png

Diego,

Para dar continuidad a este problema, ¿el error de los triggers dejó de reaparecer luego de instalar la versión 2.2.0? ¿O por el contrario tuvieron que aplicar nuevamente el script SQL para ajustar el trigger?

Saludos!

PD: Para el nuevo error que indicas, sigamos viendo el hilo nuevo que abriste. Gracias!

Nos volvió a tirar el mismo error.
Lo modifique como la otra ves pero ahora el error es otro.

Saludos.
Diego

Dale Diego, entonces este error del trigger lo doy como solucionado :slight_smile:

Saludos!

Me tiro el mismo error que en la actualización anterior.

En el trigger se ve el siguiente código.

CREATE OR REPLACE FUNCTION diaguita_auditoria.sp_scp_solicitud_alta_bien_patrimonial_detalles()
RETURNS trigger AS
$BODY$
DECLARE
schema_temp varchar;
rtabla_usr RECORD;
rusuario RECORD;
vusuario VARCHAR(30);
voperacion varchar;
vid_solicitud integer;
vestampilla timestamp;
BEGIN
vestampilla := current_timestamp;
SELECT INTO schema_temp diaguita.recuperar_schema_temp();
SELECT INTO rtabla_usr * FROM pg_tables WHERE tablename = ‘tt_usuario’ AND schemaname = schema_temp;
IF FOUND THEN
SELECT INTO rusuario usuario, id_solicitud FROM tt_usuario;
IF FOUND THEN
vusuario := rusuario.usuario;
vid_solicitud := rusuario.id_solicitud;
ELSE
vusuario := user;
vid_solicitud := 0;
END IF;
ELSE
vusuario := user;
END IF;
IF (TG_OP = ‘INSERT’) OR (TG_OP = ‘UPDATE’) THEN
IF (TG_OP = ‘INSERT’) THEN
voperacion := ‘I’;
ELSE
voperacion := ‘U’;
END IF;
INSERT INTO diaguita_auditoria.logs_scp_solicitud_alta_bien_patrimonial_detalles (id_solicitud_alta_detalle, persona, id_estado_bien, id_catalogo_bien_patrimonial, id_detalle_recepcion, id_solicitud_alta, valor_bien, descripcion_bien, cantidad, fecha_incorporacion, factura_fecha, factura_numero, id_empleado_responsable_uso, id_area_responsable, id_ubicacion_fisica, titular_bien_tercero, titular_bien_tercero, auditoria_usuario, auditoria_fecha, auditoria_operacion, auditoria_id_solicitud) VALUES (NEW.id_solicitud_alta_detalle, NEW.persona, NEW.id_estado_bien, NEW.id_catalogo_bien_patrimonial, NEW.id_detalle_recepcion, NEW.id_solicitud_alta, NEW.valor_bien, NEW.descripcion_bien, NEW.cantidad, NEW.fecha_incorporacion, NEW.factura_fecha, NEW.factura_numero, NEW.id_empleado_responsable_uso, NEW.id_area_responsable, NEW.id_ubicacion_fisica, NEW.titular_bien_tercero, NEW.titular_bien_tercero, vusuario, vestampilla, voperacion, vid_solicitud);
ELSIF TG_OP = ‘DELETE’ THEN
voperacion := ‘D’;
INSERT INTO diaguita_auditoria.logs_scp_solicitud_alta_bien_patrimonial_detalles (id_solicitud_alta_detalle, persona, id_estado_bien, id_catalogo_bien_patrimonial, id_detalle_recepcion, id_solicitud_alta, valor_bien, descripcion_bien, cantidad, fecha_incorporacion, factura_fecha, factura_numero, id_empleado_responsable_uso, id_area_responsable, id_ubicacion_fisica, titular_bien_tercero, titular_bien_tercero, auditoria_usuario, auditoria_fecha, auditoria_operacion, auditoria_id_solicitud) VALUES (OLD.id_solicitud_alta_detalle, OLD.persona, OLD.id_estado_bien, OLD.id_catalogo_bien_patrimonial, OLD.id_detalle_recepcion, OLD.id_solicitud_alta, OLD.valor_bien, OLD.descripcion_bien, OLD.cantidad, OLD.fecha_incorporacion, OLD.factura_fecha, OLD.factura_numero, OLD.id_empleado_responsable_uso, OLD.id_area_responsable, OLD.id_ubicacion_fisica, OLD.titular_bien_tercero, OLD.titular_bien_tercero, vusuario, vestampilla, voperacion, vid_solicitud);
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION diaguita_auditoria.sp_scp_solicitud_alta_bien_patrimonial_detalles()
OWNER TO postgres;

se duplica un parametro.
En la version anterior al borrarlo se soluciono el problema. ahora me tira otro error.
Error:
AP_TABLA_DB: ERROR en la carga de una columna externa. El metodo: get_datos_convocatoria no esta definido

Espero sus comentario.

Re instale la actualización varias veces en prueba y en producción y el error es siempre el mismo.

También estoy teniendo problemas al asociarlo a un catalogo.

Saludos
Diego


diaguita.png

diaguita.png

Hola Diego,

Mirá, el tema del trigger lo pueden resolver con la misma respuesta que te pasé acá inicialmente (correr el SQL que reconstruye el trigger). Con eso, el problema del trigger no vuelve a saltar. Esto les está pasando probablemente por como se almacena en postgres la definición de la base de datos Diaguita y algún problema en la consulta que arma el trigger (componente parte de SIU-Toba).

A modo de mejora a futuro, pueden realizar un dump de la db actual y restaurarla nuevamente. Con esto, se mueven a otra definición de base de datos dentro de postgres que no tendría ese historial de cambios de columnas de las tablas…

Esto es otro bug Diego, ya se te pasó una directiva a revisar (en el post anterior, el tema del método).

Saludos!