Error en formulario de datos principales

Buen día, estamos en versión 3.13.1 y cuando intentamos guardar cambios en el formulario del asunto arroja el siguiente mensaje de error:
Se han encontrado errores. No se pudieron guardar los cambios
Desde que arroja el error no permite moverse a ningún otro formulario para intentar continuar.
No estamos usando personalizaciones.
En los logs del servidor web:

[Tue Aug 15 10:37:45.383441 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Trying to access array offset on value of type null in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 70, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
10.0.2.110 - - [15/Aug/2023:10:27:51 -0300] "GET /inscripcion/rs.php/censo/datos_principales/pagelet_datos_principales.js HTTP/1.1" 200 10804
10.0.2.4 - - [15/Aug/2023:10:37:45 -0300] "POST /inscripcion/censo/guardar/datos_principales HTTP/1.1" 200 32240
10.0.2.4 - - [15/Aug/2023:10:27:59 -0300] "POST /inscripcion/censo/guardar/datos_principales HTTP/1.1" 200 32242
[Tue Aug 15 10:37:45.383411 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Undefined index: nacionalidad in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 70, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
[Tue Aug 15 10:37:45.407775 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Undefined index: celular_numero in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 65, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
[Tue Aug 15 10:37:45.407797 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Trying to access array offset on value of type null in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 65, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
[Tue Aug 15 10:37:45.412795 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Undefined index: celular_numero in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 65, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
[Tue Aug 15 10:37:45.412814 2023] [php7:notice] [pid 8103] [client 10.0.2.4:32802] PHP Notice:  Trying to access array offset on value of type null in /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php on line 65, referer: https://guarani3-prueba.unne.edu.ar/inscripcion/censo/datos_principales
10.0.2.4 - - [15/Aug/2023:10:37:45 -0300] "POST /inscripcion/censo/guardar/datos_principales HTTP/1.1" 200 32240

En los logs de la aplicación:

================================================================================
=================================   WARNINGS   =================================
================================================================================

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Undefined index: nacionalidad

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Trying to access array offset on value of type null

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Undefined index: celular_numero

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Trying to access array offset on value of type null

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Undefined index: celular_numero
NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Trying to access array offset on value of type null
.......sigue la información de debug con las consultas SQL sin error visible

En instalacion/config.php :

 'produccion' => false,

                /**
                 * Indica si el sistema utiliza personalizaciones. Se debe complementar indicando
                 * el ID de personalizacin en la configuracin de los puntos de acceso.
                 *  - Valores posibles: true|false
                 */
                'usar_personalizaciones' => false
/**
                 * Configuracin de logging. Si no se especifica este bloque no se usa 
                 * el log (es lo mismo que setear activo en false).
                 */
                'log' => [
                        /**
                         * Indica si el log est activo o no
                         *  - Valores posibles: true|false
                         */
                        'activo' => true,

                        /**
                         * Niveles de log: 
                         *  - 'log::NIVEL_DEBUG'        -> Recomendado en Desarrollo
                         *  - 'log::NIVEL_INFO'         -> Solo muestra informacin de tiempo y memoria consumida

                         *  - 'log::NIVEL_ERROR'        -> Recomendado en Produccin
                         */
                        'nivel' => log::NIVEL_DEBUG,
'nivel_consola' => Logger::ERROR,

                        /**
                         * Nivel mnimo de log para Web: 
                         *  - 'Logger::DEBUG'   -> Recomendado en Desarrollo
                         *  - 'Logger::INFO'
                         *  - 'Logger::NOTICE'
                         *  - 'Logger::WARNING'
                         *  - 'Logger::ERROR'   -> Recomendado en Produccin
                         *  - 'Logger::CRITICAL'
                         *  - 'Logger::ALERT'
                         *  - 'Logger::EMERGENCY'
                         */
                        'nivel_web' => Logger::DEBUG,

                        'barra_dev' => false

Cualquier ayuda será agradecida.

Saludos

Hola Damian,

¿Completaste los campos Característica de celular (sin 0) y Número de celular (sin 15)?

En la función accion__guardar de src/siu/operaciones/censo/controlador.php habría que debuggear la variable $datos:


			$datos = $form->get_datos();
			klog2('=== datos prescripción ===', $datos);

En los logs se podrá ver si hay datos faltantes.

Revisa en el php.ini que la directiva max_input_vars este en 2000 o mayor (Requisitos para la instalación de Preinscripción).

saludos.
2

Hola Damian,

¿que te devuelven las siguientes queries?

SELECT * FROM sga_campos_form WHERE columna = 'nacionalidad_desc';
SELECT * FROM sga_campos_conf WHERE columna = 'nacionalidad_desc';

saludos.
2

Gracias por contestar Leonel
Agrego mas información al contexto.
Se agrega un registro a la tabla de tipos de propuestas (‘Secundario’)
Este tipo de propuesta aparece en el combo inicial de configuración de campos (perfil admin de preinscripción)
En la sección de datos principales (admin de preinscripción) se visualiza el campo celular
En la sección de datos principales (alumno de preinscripción) no se visualiza el campo celular
Información de depuración salida de:

$datos = $form->get_datos();
			klog2('=== datos prescripción ===', $datos);

– === datos prescripcion DAMIAN=== ------------------------------------------

Array
(
)

Las consultas en la base de datos no devuelven registros.

Saudos


perfil_alumno_1_preinsc_datos_principales_celular_invisible.png

perfil_alumno_1_preinsc_datos_principales_celular_invisible.png

perfil_admin_2_preinsc_datos_principales_celular.png

perfil_admin_2_preinsc_datos_principales_celular.png

perfil_admin_1_preinsc.png

perfil_admin_1_preinsc.png

Hola Damian,

Se agrega un registro a la tabla de tipos de propuestas ('Secundario')
Ok, la agregaste en la tabla [b]sga_propuestas_tipos[/b] supongo.

Luego deberías agregarle todos los registros en la tabla sga_campos_conf, los podes ver en el archivo BD/creacion/creacion_preinscripcion3_postgresql.sql donde dice Configuración inicial para propuestas de GRADO, vas a tener que cambiar ‘200’ por el valor de sga_propuestas_tipos.propuesta_tipo para Secundario.

Luego en la operación Copiar configuración de campos de formulario podes copiar la configuración de otro tipo de propuesta.

$datos = $form->get_datos(); klog2('=== datos prescripción ===', $datos);

– === datos prescripcion DAMIAN=== ------------------------------------------

Array
(
)

Claro, te viene todo vacío, ¿revisaste lo de max_input_vars que te puse en el mensaje anterior?

Otra cosa, no deberías tener registros para la columna nacionalidad_desc en las tablas sga_campos_form y sga_campos_conf.

saludos.
2

Si, se agregó en la base de datos de preinscripciones

select * from sga_propuestas_tipos

propuesta_tipo|descripcion | --------------+--------------------+ 200|Grado | 201|Pregrado | 202|Posgrado | 203|Ciclo Básico o Común| 204|Curso de Ingreso | 205|Postítulo | 206|Terciario | 207|Vocacional | 208|Cursos | 209|Convenio | 999|Secundario |

Si, se agregaron los registros

select * from sga_campos_conf where propuesta_tipo = 999;

propuesta_tipo|columna |visible|obligatorio|se_imprime|genera_reporte| --------------+--------------------------+-------+-----------+----------+--------------+ 999|id_preinscripcion | 1| 0| 1| 0| 999|usuario | 1| 0| 1| 0| 999|clave | 1| 0| 1| 0| 999|fecha_registro | 1| 0| 1| 0| 999|fecha_ult_modif | 1| 0| 1| 0| 999|version_modificacion | 1| 0| 1| 0| 999|estado | 1| 0| 1| 0| 999|apellido | 1| 1| 1| 0| 999|nombres | 1| 1| 1| 0| 999|sexo | 1| 1| 1| 0| 999|fecha_nacimiento | 1| 1| 1| 0| 999|loc_nacimiento | 1| 1| 1| 0|

Luego en la operación [b]Copiar configuración de campos de formulario[/b] podes copiar la configuración de otro tipo de propuesta.

Se ejecutó la operación

Claro, te viene todo vacío, ¿revisaste lo de [b]max_input_vars[/b] que te puse en el mensaje anterior?
max_input_vars => 15000 => 15000
Otra cosa, no deberías tener registros para la columna [b]nacionalidad_desc[/b] en las tablas [b]sga_campos_form[/b] y [b]sga_campos_conf[/b].

Correcto, no tengo registros allí.

Muchas gracias

Hola Damian, gracias por la información!!!

¿la propuesta a la que te inscribiste es de tipo “Secundario”, no? Lo podes ver en la solapa Propuesta columna Tipo de propuesta.

En la solapa Datos principales, ¿ves todos los campos?
Revisa el archivo src/siu/operaciones/censo/datos_principales/form_datos_principales.php, busca todos los campos donde form::obligatorio => true, ¿todos esos campos los ves en pantalla? Si hay alguno que falta hace que falle la validación de obligatoriedad y da el error Se han encontrado errores. No se pudieron guardar los cambios.

saludos.
2

Si, se visualiza (imagen adjunta)

No, faltan algunos

Estos campos están como obligatorios y no se ven en la pantalla:

$this->set_campo('nacionalidad_desc', array(                                                                               
                        form::label => 'nacionalidad_desc',                                     
                        form::filtro => validador::TIPO_TEXTO,                                                                        
                        form::obligatorio => true,                                                                
                        form::elemento => array('tipo' => 'text'),                           
                        form::readonly => true,                                                                                            
                ));                            
                
                
                
                
$this->set_campo('nacionalidad', array(                                                                                    
                        form::label => '',                                                                                                 
                        form::filtro => validador::TIPO_INT,                                                                        
                        form::obligatorio => true,                                              
                        form::elemento => array('tipo' => 'hidden'),                                                 
                        form::readonly => true,                                                                                       
                ));

Saludos


InscripciAn UNNE Carga de datos censales.png

InscripciAn UNNE Carga de datos censales.png

Hola Damian,

Veo que en la siguiente query le faltan registros, por ejemplo nacionalidad:

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999;

¿que te devuelve la siguiente query?

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999 AND columna = 'nacionalidad';

También compara la cantidad de campos para Grado con Secundario, ¿es la misma cantidad de campos?:


SELECT COUNT(1) AS cantidad_grado FROM sga_campos_conf WHERE propuesta_tipo = 200;

SELECT COUNT(1) AS cantidad_secundario FROM sga_campos_conf WHERE propuesta_tipo = 999;

Tenes que tener todos estos INSERTS para Secundario.

¿con propuesta de Grado da el mismo error?

saludos.
2

Hola Leonel

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999;

devuelve 255 registros

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999 AND columna = 'nacionalidad';

devuelve 1 registro

SELECT COUNT(1) AS cantidad_grado FROM sga_campos_conf WHERE propuesta_tipo = 200;

devuelve 255 registros

SELECT COUNT(1) AS cantidad_secundario FROM sga_campos_conf WHERE propuesta_tipo = 999;

devuelve 255 registros

Hola Damian, gracias por la información, parece estar todo bien.

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999 AND columna = 'nacionalidad'; devuelve 1 registro

¿la columna visible esta en 1?
Revisa que quede como acá:

INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('999','nacionalidad',1,1,1);

saludos.
2

Hola Leonel, la columna tiene valor 1

propuesta_tipo|columna     |visible|obligatorio|se_imprime|genera_reporte|
--------------+------------+-------+-----------+----------+--------------+
           999|nacionalidad|      1|          1|         1|             0|

Hola Damian,

Es extraño que tenes el campo nacionalidad como visible pero no se muestre en pantalla.

Te voy a pedir lo siguiente:

  1. Desactivar las personalizaciones en instalacion/config.php pones ‘usar_personalizaciones’ => false, ya que veo que tenes personalizaciones aquí.

  2. Veo que tenes un commit que modifica el core en revisión 72543.

  3. Quizás tenes cacheado el twig en caso de tener ‘produccion’ => true en instalacion/config.php, podes eliminar el contenido dentro de la carpeta instalacion/temp/ y volver a ejecutar el comando bin/preinscripcion compilar_recursos.

Insisto, ¿con otro tipo de propuesta pasa lo mismo, por ejemplo con Grado o Posgrado?

saludos.
2

Hola Leonel, gracias por contestar.
Se cambiaron los siguientes valores en instalacion/config.php

 'produccion' => true 
 'usar_personalizaciones' => false

Se borra el contenido de instalacion/temp
Se compila recursos
Se obtiene el mismo comportamiento.
Con propuestas de grado no se observan inconvenientes. Se guarda correctamente la información del formulario en cuestión.

Saludos

Hola Damian, gracias por la información!!!

Estoy viendo este ambiente: https://guarani3-prueba.unne.edu.ar/inscripcion/ , ¿es el que están usando para las pruebas?

Para la propuesta Tecnicatura En Producción Agropecuaria (tipo Secundario) no muestra la Nacionalidad en Datos principales, para la propuesta Abogacía (tipo Grado) si lo muestra.

Podrías revisar en la función control_group de src/siu/operaciones/_comun/preinscripcion_form.php si el campo nacionalidad_desc esta visible y activo, podes agregar lo siguiente:


	function control_group($nombre, $clase_control_group = '')
	{
                if ($nombre == 'nacionalidad_desc') {
                    $nacionalidad_desc_visible = $this->def_visible($nombre);
                    klog2('$nacionalidad_desc_visible', $nacionalidad_desc_visible);

                    $nacionalidad_desc_activo = $this->check_activo($nombre);
                    klog2('$nacionalidad_desc_activo', $nacionalidad_desc_activo);
                }
                
		if ($this->def_visible($nombre)) {
..................

Luego en los logs deberías ver algo así:


--  $nacionalidad_desc_visible  ------------------------------------------------

1

--  $nacionalidad_desc_activo  -------------------------------------------------

1

saludos.
2

Proba también desde el perfil Admin menú Borrar caché APC hacer click en el botón Limpiar caché.

saludos.
2

Si, correcto, ese es el ambiente

Se borra el cache APC y se agregan las líneas de log y se obtiene:

--  CATALOGO  ------------------------------------------------------------------

Además:

– SQL -----------------------------------------------------------------------

SELECT
– $nacionalidad_desc_visible ------------------------------------------------

– $nacionalidad_desc_activo -------------------------------------------------

1



BUSCAR CONFIGURACIN FORM: 25449d74da79ee4445211c1b6ec8163df32e9594 -- 200

--  $nacionalidad_desc_visible  ------------------------------------------------

1

--  $nacionalidad_desc_activo  -------------------------------------------------

1

--  SQL  -----------------------------------------------------------------------

Cuando selecciono una propuesta de tipo Secundario (999), no se muestra el campo nacionalidad
en los logs se visualiza:

================================================================================
=================================   WARNINGS   =================================
================================================================================

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Undefined index: nacionalidad

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Trying to access array offset on value of type null

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Undefined index: nacionalidad

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Trying to access array offset on value of type null
NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 70
Trying to access array offset on value of type null

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Undefined index: celular_numero

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Trying to access array offset on value of type null

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Undefined index: celular_numero

NOTICE
Archivo: /usr/local/app/src/siu/operaciones/_comun/util_formulario_preinscripcion.php
Linea: 65
Trying to access array offset on value of type null

Ademas:


--  SQL  -----------------------------------------------------------------------

SELECT 
--  $nacionalidad_desc_visible  ------------------------------------------------



--  $nacionalidad_desc_activo  -------------------------------------------------

1
[/code ]

Hola Damian, voy a tratar de reproducir el caso localmente:

¿como tenes dado el alta el tipo de propuesta en Guaraní?


SELECT * FROM sga_propuestas_tipos WHERE propuesta_tipo = 999;

SELECT * FROM sga_g3entidades_subtipos WHERE entidad_subtipo = 999;

saludos.
2

Hice una prueba localmente, pero funciona bien:

En las tablas de Guaraní:

SELECT * FROM sga_g3entidades_subtipos WHERE entidad_subtipo = 999;


999	"Secundario"	6	1					"N"	"N"	"N"	"N"	"N"	"sga_propuestas"	"propuesta_tipo"	"SELECT propuesta_tipo as id, descripcion  as nombre FROM sga_propuestas_tipos WHERE propuesta_tipo = "

SELECT * FROM sga_propuestas_tipos WHERE propuesta_tipo = 999;


999	"Secundario"	"S"	"S"	"S"	"S"	"S"	"S"	"N"

En las tablas de Preinscripción:

SELECT * FROM sga_propuestas_tipos WHERE propuesta_tipo = 999;


999	"Secundario"

Luego ejecute la siguiente query para copiar la misma configuración de Grado (200):


INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime)
     SELECT sga_propuestas_tipos.propuesta_tipo, 
            sga_campos_conf.columna, 
            sga_campos_conf.visible, 
            sga_campos_conf.obligatorio, 
            sga_campos_conf.se_imprime
       FROM sga_campos_conf,
            sga_propuestas_tipos 
      WHERE sga_campos_conf.propuesta_tipo = '200'
        AND sga_propuestas_tipos.propuesta_tipo = '999'
   ORDER BY sga_propuestas_tipos.propuesta_tipo,
            sga_campos_conf.columna;

SELECT * FROM sga_campos_conf WHERE propuesta_tipo = 999;
Me devuelve 249 registros.

Revisa si tenes algo diferente a lo que te pase.

saludos.
2