Error en personalización

Hola comunidad!

Estoy teniendo un inconveniente con una personalización. Extendí una tabla en una pantalla, más precisamente en Matriculas-Reportes-Reporte de Inscripción a Propuestas. Alli agregué una columna cuya información es traida de una tabla creada por mí. Para ello personalicé el archivo co_inscripciones.php. Hasta ahi funciona todo excelente.
El problema surge en otro sector del sistema, cuando quiero ir a la opción Matriculas-Personas- Administrar Personas. Alli selecciono una persona y se produce un error por la siguiente consulta:

SELECT
fotos.sincronizada,
fotos.nombre_imagen,
fotos.foto_persona,
fotos.persona,
fotos.fecha
FROM
mdp_personas_foto as fotos
WHERE
) IN (
SELECT

	FROM
		negocio.mdp_personas as personas LEFT OUTER JOIN negocio.mdp_personas_ext ON personas.persona = negocio.mdp_personas_ext.id_persona
	WHERE
		personas.persona = '11410' )

Noto que la consulta SQL está incompleta. Antes de mi personalización esa consulta tenía este formato:

SELECT
fotos.sincronizada,
fotos.nombre_imagen,
fotos.foto_persona,
fotos.persona,
fotos.fecha
FROM
mdp_personas_foto as fotos
WHERE
(fotos.persona) IN (
SELECT
persona
FROM
mdp_personas as personas
WHERE
personas.persona = ‘11410’ )

Precisamente, la tabla mdp_personas es la que vinculo a mí tabla nueva mdp_personas_ext.

Alguna orientación?

Hola, ¿que error arroja en sistema.log ?

Hola Nicolás,

Pareciera que quedó mal definida alguna RELACIÓN entre TABLAS dentro del datos_relacion “Personas”. Tienen la personalización completa commiteada en el repositorio Colab para que podamos chequearla?

Saludos, Florencia.

Hola Florencia, estamos trabajando en un entorno de pruebas, aun no lo subimos al repositorio. Efectivamente, cuando creamos la relación en la seccion de datos - tablas - mdp_personas del toba editor, sale el siguiente error:

SQLSTATE: db_22P02

CODIGO: 7

MENSAJE: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: “true” LINE 8: AND pk = “true” ^

SQL: UPDATE apex_objeto_db_registros_col SET externa = “0” WHERE objeto_proyecto = “guarani” AND objeto = “37000061” AND col_id = “827000001” AND columna = “persona” AND tipo = “E” AND pk = “true” AND secuencia = “mdp_personas_seq” AND largo IS NULL AND no_nulo IS NULL AND no_nulo_db = “true” AND externa IS NULL AND tabla = “mdp_personas”; – toba_log: 827899207 . De todos modos la relación queda establecida como se adjunta en el png adjunto.


Relacion.png

Relacion.png

Arroja el siguiente error:

[DEBUG][toba] TABLA: [mdp_personas]
Carga de datos FILAS: 1
[DEBUG][toba] AP_TABLA: [mdp_personas_foto]
SQL de carga:
SELECT
fotos.sincronizada,
fotos.nombre_imagen,
fotos.foto_persona,
fotos.persona,
fotos.fecha
FROM
mdp_personas_foto as fotos
WHERE
) IN (
SELECT

	FROM
		mdp_personas as personas LEFT OUTER JOIN negocio.mdp_personas_ext ON personas.persona = negocio.mdp_personas_ext.id_persona
	WHERE
		personas.persona = '11410' )

[ERROR][guarani] SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near “)”
LINE 10: ) IN (
^
[ERROR][guarani] toba_ap_tabla_db_s - Error cargando datos. Un carácter, símbolo o cláusula no es válida o no se encuentra.
[ERROR][toba] toba_error_db:

SQLSTATE: db_42601

CODIGO: 7

MENSAJE: Error cargando la tabla mdp_personas_foto, a continuación el mensaje de la base:
ERROR: syntax error at or near “)”
LINE 10: ) IN (
^

SQL: SELECT
fotos.sincronizada,
fotos.nombre_imagen,
fotos.foto_persona,
fotos.persona,
fotos.fecha
FROM
mdp_personas_foto as fotos
WHERE
) IN (
SELECT

	FROM
		mdp_personas as personas LEFT OUTER JOIN negocio.mdp_personas_ext ON personas.persona = negocio.mdp_personas_ext.id_persona
	WHERE
		personas.persona = '11410' ) -- toba_log: 827899318 </p>

[TRAZA]exception ‘toba_error_db’ with message ‘Un carácter, símbolo o cláusula no es válida o no se encuentra.’ in /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/lib/db/toba_db.php:468
Stack trace:
#0 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/persistencia/toba_ap_tabla_db.php(374): toba_db->consultar(‘SELECT\n\tfotos.s…’)
#1 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/persistencia/toba_ap_tabla_db.php(360): toba_ap_tabla_db->cargar_con_sql(‘SELECT\n\tfotos.s…’, false, false)
#2 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/persistencia/toba_ap_tabla_db.php(327): toba_ap_tabla_db->cargar_con_where_from_especifico(Array, NULL, false, false)
#3 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/persistencia/toba_ap_relacion_db.php(129): toba_ap_tabla_db->cargar_por_clave(Array)
#4 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/persistencia/toba_datos_relacion.php(517): toba_ap_relacion_db->cargar_por_clave(Array)
#5 /usr/local/proyectos/guarani/php/nucleo/_lib/cn_entidad_nucleo.php(33): toba_datos_relacion->cargar(Array)
#6 /usr/local/proyectos/guarani/php/nucleo/_lib/cn_manejador_entidad_nucleo.php(109): cn_entidad_nucleo->cargar(Array, NULL)
#7 /usr/local/proyectos/guarani/php/operaciones/_lib/ci_navegacion.php(95): cn_manejador_entidad_nucleo->cargar(Array)
#8 [internal function]: ci_navegacion->evt__cuadro__seleccion(Array)
#9 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php(322): call_user_func_array(Array, Array)
#10 [internal function]: toba_ci->registrar_evento(‘cuadro’, ‘seleccion’, Array)
#11 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei.php(300): call_user_func_array(Array, Array)
#12 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei_cuadro.php(1926): toba_ei->reportar_evento(‘seleccion’, Array)
#13 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei_cuadro.php(1897): toba_ei_cuadro->disparar_eventos_simples(‘seleccion’)
#14 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php(201): toba_ei_cuadro->disparar_eventos()
#15 /usr/local/proyectos/guarani/php/extension_toba/componentes/interface/guarani_ci.php(28): toba_ci->disparar_eventos()
#16 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php(135): guarani_ci->disparar_eventos()
#17 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php(55): toba_solicitud_web->procesar_eventos()
#18 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php(97): toba_solicitud_web->procesar()
#19 /usr/local/proyectos/guarani/www/aplicacion.php(27): toba_nucleo->acceso_web()
#20 {main}

Nicolás,

Pareciera que cuando extendieron la tabla ‘mdp_personas’ modificaron la definición de su primary key y esto rompió la relación con las demás tablas. Pueden verificarlo?

Saludos, Florencia.
3

Hola Florencia, veo que como PK figura persona. Adjunto foto de las relaciones que tiene.
Para crear la tabla nueva, solo adapté el siguiente script:

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PERSONALIZACIÓN
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.X.Y
-- PERSONALIZACIÓN Tabla: sga_colaciones_ext
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SET SEARCH_PATH = 'negocio_pers';

CREATE TABLE sga_colaciones_ext
(
        id_colacion     INTEGER NOT NULL, 
        hora            TIME
);

-- PRIMARY KEY
ALTER TABLE sga_colaciones_ext ADD CONSTRAINT pk_sga_colaciones_ext PRIMARY KEY (id_colacion);

-- FOREIGN KEY
CREATE INDEX ifk_sga_colaciones_ext_sga_colaciones ON sga_colaciones_ext (id_colacion);

ALTER TABLE sga_colaciones_ext 
        ADD CONSTRAINT fk_sga_colaciones_ext_sga_colaciones FOREIGN KEY (id_colacion) 
        REFERENCES negocio.sga_colaciones (colacion) on update restrict on delete restrict;

-- +++++++++++++++++ Fin tabla sga_colaciones_ext ++++++++++++++++++++++++++++++++++

Asi está la definicion de la tabla mdp_personas

– Table: negocio.mdp_personas

– DROP TABLE negocio.mdp_personas;

CREATE TABLE negocio.mdp_personas
(
persona integer NOT NULL DEFAULT nextval((‘mdp_personas_seq’::text)::regclass),
apellido character varying(60) NOT NULL,
nombres character varying(60) NOT NULL,
apellido_elegido character varying(60),
nombres_elegido character varying(60),
sexo character(1) NOT NULL,
fecha_nacimiento date NOT NULL,
localidad_nacimiento integer,
nacionalidad smallint NOT NULL,
fecha_ingreso_pais date,
pais_origen integer,
documento_principal integer,
recibe_mensajes_x_mail smallint NOT NULL DEFAULT 1,
usuario character varying(60),
clave character varying(255),
fecha_vencimiento_clave date,
autenticacion character varying(20) NOT NULL DEFAULT ‘md5’::character varying,
bloqueado smallint NOT NULL DEFAULT 0,
parametro_a character varying(255),
token character varying(250),
email_temporal character varying(100),
email_valido smallint NOT NULL DEFAULT 0,
id_imagen character varying(180),
tipo_usuario_inicial character varying(20),
pertenece_pueblo_originario character(1),
pueblo_originario integer,
pueblo_originario_otro character varying(100),
CONSTRAINT pk_mdp_personas PRIMARY KEY (persona),
CONSTRAINT fk_mdp_personas_acc_tipos_usuarios FOREIGN KEY (tipo_usuario_inicial)
REFERENCES negocio.acc_tipos_usuarios (tipo_usuario) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT fk_mdp_personas_mdp_nacionalidades FOREIGN KEY (nacionalidad)
REFERENCES negocio.mdp_nacionalidades (nacionalidad) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT fk_mdp_personas_mdp_personas_sexo FOREIGN KEY (sexo)
REFERENCES negocio.mdp_personas_sexo (sexo) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT fk_mdp_personas_mdp_pueblos_originarios FOREIGN KEY (pueblo_originario)
REFERENCES negocio.mdp_pueblos_originarios (pueblo_originario) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_mdp_personas_mug_localidades FOREIGN KEY (localidad_nacimiento)
REFERENCES negocio.mug_localidades (localidad) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT fk_mdp_personas_mug_paises FOREIGN KEY (pais_origen)
REFERENCES negocio.mug_paises (pais) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT ck_mdp_personas_autenticacion CHECK (autenticacion::text = ANY (ARRAY[‘md5’::character varying::text, ‘sha256’::character varying::text])),
CONSTRAINT ck_mdp_personas_bloqueado CHECK (bloqueado = ANY (ARRAY[0, 1])),
CONSTRAINT ck_mdp_personas_email_valido CHECK (email_valido = ANY (ARRAY[0, 1])),
CONSTRAINT ck_mdp_personas_pertenece_pueblo_originario CHECK (pertenece_pueblo_originario = ANY (ARRAY[‘S’::bpchar, ‘N’::bpchar, ‘X’::bpchar])),
CONSTRAINT ck_mdp_personas_recibe_mensajes_x_mail CHECK (recibe_mensajes_x_mail = ANY (ARRAY[1, 0]))
)
WITH (
OIDS=FALSE
);
ALTER TABLE negocio.mdp_personas
OWNER TO postgres;
GRANT ALL ON TABLE negocio.mdp_personas TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE negocio.mdp_personas TO public;

– Index: negocio.ifk_mdp_personas_acc_tipos_usuarios

– DROP INDEX negocio.ifk_mdp_personas_acc_tipos_usuarios;

CREATE INDEX ifk_mdp_personas_acc_tipos_usuarios
ON negocio.mdp_personas
USING btree
(tipo_usuario_inicial COLLATE pg_catalog.“default”);

– Index: negocio.ifk_mdp_personas_mdp_nacionalidades

– DROP INDEX negocio.ifk_mdp_personas_mdp_nacionalidades;

CREATE INDEX ifk_mdp_personas_mdp_nacionalidades
ON negocio.mdp_personas
USING btree
(nacionalidad);

– Index: negocio.ifk_mdp_personas_mdp_personas_sexo

– DROP INDEX negocio.ifk_mdp_personas_mdp_personas_sexo;

CREATE INDEX ifk_mdp_personas_mdp_personas_sexo
ON negocio.mdp_personas
USING btree
(sexo COLLATE pg_catalog.“default”);

– Index: negocio.ifk_mdp_personas_mdp_pueblos_originarios

– DROP INDEX negocio.ifk_mdp_personas_mdp_pueblos_originarios;

CREATE INDEX ifk_mdp_personas_mdp_pueblos_originarios
ON negocio.mdp_personas
USING btree
(pueblo_originario);

– Index: negocio.ifk_mdp_personas_mug_localidades

– DROP INDEX negocio.ifk_mdp_personas_mug_localidades;

CREATE INDEX ifk_mdp_personas_mug_localidades
ON negocio.mdp_personas
USING btree
(localidad_nacimiento);

– Index: negocio.ifk_mdp_personas_mug_paises

– DROP INDEX negocio.ifk_mdp_personas_mug_paises;

CREATE INDEX ifk_mdp_personas_mug_paises
ON negocio.mdp_personas
USING btree
(pais_origen);

– Index: negocio.iu_mdp_personas_apellido_nombres

– DROP INDEX negocio.iu_mdp_personas_apellido_nombres;

CREATE INDEX iu_mdp_personas_apellido_nombres
ON negocio.mdp_personas
USING btree
(apellido COLLATE pg_catalog.“default”, nombres COLLATE pg_catalog.“default”);

– Index: negocio.iu_mdp_personas_usuario

– DROP INDEX negocio.iu_mdp_personas_usuario;

CREATE UNIQUE INDEX iu_mdp_personas_usuario
ON negocio.mdp_personas
USING btree
(usuario COLLATE pg_catalog.“default”);

– Trigger: tia_mdp_personas on negocio.mdp_personas

– DROP TRIGGER tia_mdp_personas ON negocio.mdp_personas;

CREATE TRIGGER tia_mdp_personas
AFTER INSERT
ON negocio.mdp_personas
FOR EACH ROW
EXECUTE PROCEDURE negocio.ftia_mdp_personas();


relaciones.png

relaciones.png

Nicolás,

Perdón si no se entendió pero me refería a las definiciones de la PK en el datos_tabla y sus relaciones en el datos_relacion, no en la base de datos. Verifiquen eso por favor.

Saludos, Florencia.

Ah entendi mal. Efctivamente en datos-tablas-mdp_personas se habia modificado la composición de la PK. Figuraba no solo mpd_personas.persona, sino también mdp_personas_ext.id_persona. Destildé este último, asi solo queda como PK mdo_personas.persona.
De todos modos, al ejecutar el proceso de administrar personas, el error persiste. Adjunto como quedó la pantalla de datos_tablas.

El error es el mismo:
SQL: SELECT\n fotos.sincronizada, \n fotos.nombre_imagen, \n fotos.foto_persona, \n fotos.persona, \n fotos.fecha\nFROM\n mdp_personas_foto as fotos\nWHERE\n ) IN (\n SELECT\n \n FROM\n mdp_personas as personas LEFT OUTER JOIN negocio.mdp_personas_ext ON personas.persona = negocio.mdp_personas_ext.id_persona\n WHERE\n personas.persona = “11410” ) – toba_log: 827899234


Datos_Tablas_1.png

Datos_Tablas_1.png

Datos_Tablas_2.png

Datos_Tablas_2.png

Nicolás,

Que ambas columnas sean PK era correcto, fijate en la documentación: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.18.0/personalizaciones/extender_tablas.
Lo que pareciera por el log es que la columna ‘persona’ original se borró y la volvieron a crear pero ahora tiene otro identificador y eso hace que se rompan las relaciones con las demás tablas (‘mdp_personas_foto’ entre ellas).
Si quieren pueden commitear la personalización para que veamos qué pasó. Otra opción sería que la reviertan y vuelvan a probar de hacerla.

Saludos, Florencia.
2