Error en la imporaciòn desde Preinscripción

Buenos días!

Tenemos la siguiente situación. Hay algunos alumnos que al importar nos arroja el siguiente error:

[b]Error actualizando. el Campo mot_vocacion no debe quedar vacío. Más info…
SQLSTATE: db_23502

CODIGO: 7

MENSAJE: ERROR: el valor null para la columna «mot_vocacion» viola la restricción not null\nDETAIL: La fila que falla contiene (29715, null, null, null, null, null, null, null, null).

SQL: UPDATE mdp_eleccion_propuesta\n SET mot_vocacion = null, mot_sugerencia_familiar = null, mot_reconocimiento_social = null, mot_insercion_laboral = null, mot_perfil_profesional = null, mot_mejora_economica = null, mot_util_sociedad = null, mot_otros = null\n WHERE dato_censal = “29715”\n – toba_log: 532743478[/b]

Comenzamos a investigar y creemos que el problema viene por acá:

  1. Nosotros tenemos como no visibles todos esos campos mot_ en sga_campos_conf
  2. Al registrar una nueva preinscripciòn todos esos campos se completan por defecto con N en la tabla sga_preinscripcion
  3. Luego del primer cambio en el formulario y posterior guardado todos esos campos quedan en null
  4. Luego se intenta importar el alumno en Guarani y por algún motivo la importaciòn no es exitosa (por ejemplo el còdigo de versiòn impresa no corresponde). En ese momento aunque da error se inserta la persona y el dato censal en las tablas mdp_eleccion_institucion y mdp_eleccion_propuesta y como utiliza la funciòn insertar_eleccion_institucion y insertar_eleccion_propuesta y $parametro[‘valor’] es null inserta los valores por defecto en la tabla que es N
  5. Luego se intenta nuevamente importar al alumno pero esta vez con el código de versión impresa correcto. Ahì como ya existe el registro en las tablas intenta actualizar y utiliza las funciones actualizar_eleccion_institucion y actualizar_eleccion_propuesta y en ese momento setea:

if (empty($parametro[‘valor’])) {
$valor = ‘null’;

Y ahì se viola la restricción.

Muchas gracias!!!

Las versiones que tenemos son guarani 3.15 y preinscripción 3.8

Buenos días, ¿Tienen una personalización que pueda afectar a este circuito?

Hola José. En ambos tenemos personalizaciones, en preinscripción por las dudas las desactivé para realizar la prueba. En guaraní la personalización trae datos propios relevados en preinscripción pero aparentemente no modifica las funciones mencionadas. No pueden reproducir el error uds?
Gracias!

Estamos intentando reproducir el error. Si es por personalización el error debería estar del lado de Gestión.

José buen día.

Ahí volví a probar. Me equivoqué en la descripción del punto 4)

El error sucede cuando si es correcto el código y el sistema pasa a la siguiente pantalla (la de carrera), pero por algún motivo no se procesa la carrera y se vuelve atrás. Luego, se vuelve a procesar el código y ahí da el error.

También da el error cuando la persona ya existe en el sistema y se está preinscribiendo nuevamente.

Gracias!

Hola Josè, pudieron ver algo sobre este tema?
Muchas gracias!

Buenos días, cuando dicen También da el error cuando la persona ya existe en el sistema y se está preinscribiendo nuevamente. ¿Lo hacen desde preinscripción de autogestión?

Por favor, si pueden prueben el circuito sin ninguna personalización, ni en preinscripción ni gestión.

¿Tienen las personalizaciones subidas a su nodo de colab?

Hola José, lo hacemos siempre desde prescripción, no tenemos habilitada la preinscripción de autogestión

Cómo hago para quitarle las personalizaciones a gestión? Están subidas al nodo.

Muchas gracias

Laura buenas tardes

Para que nodo estas necesitando esto, UNM, UNPAZ?

saludos!

Hola Sebastián. Para UNPAZ
Gracias!

Hola Sebastián.

Volví a probar esta situación y finalmente encontré cuál es el problema. A continuación te detallo todas las pruebas realizadas con preinscripción Sin personalizaciones y con el archivo involucrado de Guaraní Gestión Sin personalizaciones.

Te comento que para resolverlo momentaneamente ya que tenemos que subir las preinscripciones con error tuve que modificar dos funciones de Guaraní Gestión las cuales detallo al final de la descripción
Muchas gracias!

Pasos realizados:

  1. Nosotros tenemos configurados como no visibles en todos los tipos de propuestas los campos
    columna in(
    ‘como_conocio_institucion’
    ‘insc_otra_inst’
    ‘insc_otra_inst_descr’
    ‘mot_inst_econom’
    ‘mot_inst_prestigio’
    ‘mot_inst_difusion’
    ‘mot_inst_rec_estud’
    ‘mot_inst_rec_amigos’
    ‘mot_inst_sist_ing’
    ‘mot_inst_ubicacion’
    ‘mot_inst_otros’
    ‘mot_prop_vocacion’
    ‘mot_prop_sug_fam’
    ‘mot_prop_rec_social’
    ‘mot_prop_ins_lab’
    ‘mot_prop_perf_prof’
    ‘mot_prop_mejora_ec’
    ‘mot_prop_util_soc’
    ‘mot_prop_otros’)
    en la tabla sga_campos_conf

  2. Desde la pantalla de propuestas se ejecuta la funciòn accion__guardar() de censo->controlador

  3. Se llama a la función set_datos_preinscripcion con los datos como parámetro. Los datos que le pasa como parámetro son (impresos en el log):

– DATOS --------------------------------------------------------------------

Array
(
[turno_preferido] => T
[como_conocio_institucion] =>
[insc_otra_inst] =>
[insc_otra_inst_descr] =>
[mot_inst_econom] =>
[mot_inst_prestigio] =>
[mot_inst_difusion] =>
[mot_inst_rec_estud] =>
[mot_inst_rec_amigos] =>
[mot_inst_sist_ing] =>
[mot_inst_ubicacion] =>
[mot_inst_otros] =>
[mot_prop_vocacion] =>
[mot_prop_sug_fam] =>
[mot_prop_rec_social] =>
[mot_prop_ins_lab] =>
[mot_prop_perf_prof] =>
[mot_prop_mejora_ec] =>
[mot_prop_util_soc] =>
[mot_prop_otros] =>
)
3) Luego llama a la función filtrar_datos_preinscripcion pasándole los datos del punto anterior como parámetro

En dicha función busca los campos del formulario llamando a util::form()->get_campos_preinscripcion() y la salida del mismo trae los campos

– CAMPOS --------------------------------------------------------------------

Array
(
[0] => id_preinscripcion
[1] => usuario
[2] => clave
[3] => codigo_validacion
[4] => email_valido
[5] => facebook
[6] => google
[7] => fecha_registro
[8] => fecha_ult_modif
[9] => version_modificacion
[10] => version_impresa
[11] => persona
[12] => apellido
[13] => nombres
[14] => pais_documento
[15] => tipo_documento
[16] => nro_documento
[17] => numero_cuil
[18] => sexo
[19] => fecha_nacimiento
[20] => nacionalidad
[21] => loc_nacimiento
[22] => turno_preferido
[23] => colegio_secundario
[24] => titulo_secundario
[25] => anio_egreso_sec
[26] => ent_emisora_ci
[27] => nro_ci
[28] => pais_emisor_pasap
[29] => nro_pasap
[30] => apellido_padre
[31] => nombres_padre
[32] => apellido_madre
[33] => nombres_madre
[34] => alu_est_civil_uh
[35] => alu_trab_hace
[36] => alu_trab_desjub
[37] => alu_trab_fami
[38] => alu_trab_ocup
[39] => alu_trab_tarea
[40] => padre_trab_hace
[41] => padre_trab_ocup
[42] => padre_trab_otro
[43] => padre_trab_tarea
[44] => madre_trab_hace
[45] => madre_trab_ocup
[46] => madre_trab_otro
[47] => madre_trab_tarea
[48] => alu_cos_est_ap_fam
[49] => alu_cos_est_trab
[50] => alu_cos_est_beca
[51] => alu_cos_est_plsoc
[52] => alu_cos_est_otra
[53] => alu_cos_est_espec
[54] => alu_beca_muni
[55] => alu_beca_otra
[56] => alu_beca_prov
[57] => alu_beca_tipo_eco
[58] => alu_beca_tipo_ser
[59] => alu_beca_tipo_inv
[60] => alu_beca_eco_tran
[61] => alu_beca_eco_come
[62] => alu_beca_eco_foto
[63] => alu_beca_eco_efec
[64] => alu_beca_eco_habi
[65] => alu_otestsup_uni
[66] => alu_otestsup_tipo
[67] => alu_otestsup_area
[68] => alu_otestsup_carr
[69] => alu_otestsup_esta
[70] => alu_otestsup_razon_abandono
[71] => alu_otestsup_razon_abandono_otros
[72] => alu_otestsup_egre
[73] => alu_otestsup_niv
[74] => alu_tec_pc_casa
[75] => alu_tec_pc_trab
[76] => alu_tec_pc_univ
[77] => alu_tec_pc_otro
[78] => alu_tec_int_movil
[79] => alu_tec_int_casa
[80] => alu_tec_int_trab
[81] => alu_tec_int_univ
[82] => alu_tec_int_otro
[83] => alu_idioma_ingl
[84] => alu_idioma_fran
[85] => alu_idioma_port
[86] => alu_idioma_ital
[87] => alu_idioma_alem
[88] => alu_idioma_chino
[89] => alu_idioma_otro
[90] => alu_idioma_otro_nivel
[91] => sec_egreso
[92] => o_est_ter_estado
[93] => o_est_uni_estado
[94] => sit_actual_padre
[95] => sit_actual_madre
[96] => tit_obt_padre
[97] => tit_obt_madre
[98] => cant_fami_cargo
[99] => cant_empl_cargo
[100] => barrio_per_lec
[101] => barrio_proc
[102] => barrio_alleg
[103] => pais_nacionalidad
[104] => existe_trab_alum
[105] => cant_hijos_alum
[106] => vive_actual_con
[107] => obra_social_alu
[108] => obra_social_trab
[109] => obra_social_fami
[110] => obra_social_univ
[111] => costea_estudios
[112] => tiene_beca
[113] => tiene_beca_univ
[114] => tiene_beca_nacio
[115] => tiene_beca_inter
[116] => remuneracion
[117] => hora_sem_trab_alum
[118] => practica_deportes
[119] => hace_dep_univ
[120] => hace_dep_gim_priv
[121] => hace_dep_partic
[122] => hace_dep_otros
[123] => prac_dep_futbol
[124] => prac_dep_basquet
[125] => prac_dep_voley
[126] => prac_dep_gimnasia
[127] => prac_dep_tenis
[128] => prac_dep_natacion
[129] => prac_dep_handball
[130] => prac_dep_otros
[131] => padre_vive
[132] => madre_vive
[133] => vive_con_conyuge
[134] => vive_con_padre
[135] => vive_con_madre
[136] => vive_con_hijos
[137] => vive_con_hermanos
[138] => celular_numero
[139] => celular_compania
[140] => estado_civil
[141] => e_mail
[142] => tipo_visa
[143] => otorgamiento_visa
[144] => vencimiento_visa
[145] => tipo_residencia
[146] => tipo_res_per_lect
[147] => calle_per_lect
[148] => numero_per_lect
[149] => piso_per_lect
[150] => dpto_per_lect
[151] => unidad_per_lect
[152] => loc_per_lect
[153] => cp_per_lect
[154] => te_per_lect
[155] => calle_proc
[156] => numero_proc
[157] => piso_proc
[158] => dpto_proc
[159] => unidad_proc
[160] => loc_proc
[161] => cp_proc
[162] => te_proc
[163] => otros_estud_super
[164] => fliares_cargo_alum
[165] => sit_laboral_alu
[166] => categ_ocup_alum
[167] => act_econom_alum
[168] => det_rama_act_alum
[169] => rel_trab_propuesta
[170] => sit_laboral_padre
[171] => ult_est_cur_padre
[172] => act_econom_padre
[173] => det_rama_act_padre
[174] => categ_ocup_padre
[175] => sit_laboral_madre
[176] => ult_est_cur_madre
[177] => act_econom_madre
[178] => det_rama_act_madre
[179] => categ_ocup_madre
[180] => apellido_pers_alleg
[181] => nombre_pers_alleg
[182] => tipo_allegado
[183] => calle_pers_alleg
[184] => nro_pers_alleg
[185] => piso_pers_alleg
[186] => dpto_pers_alleg
[187] => unidad_pers_alleg
[188] => loc_pers_alleg
[189] => cp_pers_alleg
[190] => te_pers_alleg
[191] => residencia
[192] => fecha_respre_otorg
[193] => fecha_respre_venc
[194] => empresa
[195] => empresa_otra
[196] => sector
[197] => subsector
[198] => facilidad_est_emp
[199] => facilidad_est_inst
[200] => pertenece_pueblo_originario
[201] => pueblo_originario
[202] => pueblo_originario_otro
[203] => insc_otra_inst
[204] => insc_otra_inst_descr
[205] => como_conocio_institucion
[206] => orientacion_recibida
[207] => mot_inst_econom
[208] => mot_inst_prestigio
[209] => mot_inst_difusion
[210] => mot_inst_rec_estud
[211] => mot_inst_rec_amigos
[212] => mot_inst_sist_ing
[213] => mot_inst_ubicacion
[214] => mot_inst_otros
[215] => mot_prop_vocacion
[216] => mot_prop_sug_fam
[217] => mot_prop_rec_social
[218] => mot_prop_ins_lab
[219] => mot_prop_perf_prof
[220] => mot_prop_mejora_ec
[221] => mot_prop_util_soc
[222] => mot_prop_otros
[223] => es_celiaco
[224] => adeuda_materias
[225] => estado
)

Luego ejecuta el foreach

if (in_array($campo, $campos)) {
	if (is_null($dato) || ($dato == opciones::NO_SELECCION)) {
		$dato = null;
	}
	if (!in_array($campo, $no_formatear)) {
		$dato = formatear($dato);
	}
	$salida[$campo] = $dato;
}

Aqui todos los campos de DATOS entran en $salida pues los encuentra en CAMPOS

4)Por último vuelve a la función set_datos_preinscripción y hace el insert con $salida que queda de la siguiente manera

– SALIDA --------------------------------------------------------------------

Array
(
[turno_preferido] => N
[como_conocio_institucion] =>
[insc_otra_inst] =>
[insc_otra_inst_descr] =>
[mot_inst_econom] =>
[mot_inst_prestigio] =>
[mot_inst_difusion] =>
[mot_inst_rec_estud] =>
[mot_inst_rec_amigos] =>
[mot_inst_sist_ing] =>
[mot_inst_ubicacion] =>
[mot_inst_otros] =>
[mot_prop_vocacion] =>
[mot_prop_sug_fam] =>
[mot_prop_rec_social] =>
[mot_prop_ins_lab] =>
[mot_prop_perf_prof] =>
[mot_prop_mejora_ec] =>
[mot_prop_util_soc] =>
[mot_prop_otros] =>
[fecha_ult_modif] => now()
)

  1. Allí quedan en la BBDD todos los campos de SALIDA vacíos salvo turno_preferido (los mismos son default N en la BBDD)

  2. En guarani Gestión, cuando se importa a la persona y la misma No existe, inserta los datos de elecciòn propuesta con la función insertar_eleccion_propuesta de act_personas_nucleo.

Como todos los campos vienen vacíos, pero gracias a esta condición

		if (!is_null($parametro['valor'])) {
			$insert .= ', '.$parametro['campo'];
			$values .= ', '.toba::db()->quote($parametro['valor']);
		}

no los inserta en la tabla, el insert solo queda como

INSERT INTO mdp_eleccion_propuesta ( dato_censal ) VALUES ( ‘30949’ );

como la tabla tiene todos sus campos como default N, esto no ocasiona problemas.

  1. Ahora, si la persona ya existe en Guarani, va a ir por la funciòn actualizar_eleccion_propuesta

y luego en el foreach

foreach ($parametros as $parametro) {
if (!empty($set)) {
$set .= ', ';
}
if (empty($parametro[‘valor’])) {
$valor = ‘null’;
} else {
$valor = toba::db()->quote($parametro[‘valor’]);
}
$set .= $parametro[‘campo’] . ’ = ’ . $valor;
}

si parametro[‘valor’] viene vacío, le pone null como valor,
lo que va en contra de la restricción not null de la tabla de dichos campos, ahí es cuando da el error. Lo mismo sucede con la tabla mdp_eleccion_institucion

MENSAJE: ERROR: el valor null para la columna «mot_vocacion» viola la restricción not null\nDETAIL: La fila que falla contiene (21012, null, null, null, null, null, null, null, null).

SQL: UPDATE mdp_eleccion_propuesta\n SET mot_vocacion = null, mot_sugerencia_familiar = null, mot_reconocimiento_social = null, mot_insercion_laboral = null, mot_perfil_profesional = null, mot_mejora_economica = null, mot_util_sociedad = null, mot_otros = null\n WHERE dato_censal = “21012”\n – toba_log: 531999297

FUNCIONES Modificadas para resolver el error

de la clase act_personas.php

//PERSONALIZADO. Se personaliza la funciòn para que no arroje error de campo, esperando soluciòn del SIU en el thread: http://foro.comunidad.siu.edu.ar/index.php?topic=16041.0
function actualizar_eleccion_propuesta($dato_censal, $parametros)
{
$dato_censal = toba::db()->quote($dato_censal);

	$set = '';
	foreach ($parametros as $parametro) {
		//PERS. si el valor viene vacío no lo incluyo en el set.
		if(!empty($parametro['valor'])){
			if (!empty($set)) {
				$set .= ', ';
			}
			if (empty($parametro['valor'])) {
				$valor = 'null';
			} else {
				$valor = toba::db()->quote($parametro['valor']);
			}	
			$set .= $parametro['campo'] . ' = ' . $valor;
		}	
	}

	if (!empty($set)) {	
		$sql = "UPDATE	mdp_eleccion_propuesta
				SET		$set
				WHERE	dato_censal = $dato_censal
				";
		
		guarani_db::ejecutar($sql);
		toba::logger()->info('************ Se actualizaron datos censales personales con éxito. ************');
	}
}

//PERSONALIZADO. Se personaliza la funciòn para que no arroje error de campo, esperando soluciòn del SIU en el thread: http://foro.comunidad.siu.edu.ar/index.php?topic=16041.0
	function actualizar_eleccion_institucion($dato_censal, $parametros)
{
	$dato_censal = toba::db()->quote($dato_censal);

	$set = '';
	foreach ($parametros as $parametro) {
		//PERS. si el valor viene vacío no lo incluyo en el set.
		if(!empty($parametro['valor'])){
			if (!empty($set)) {
				$set .= ', ';
			}
			if (empty($parametro['valor'])) {
				$valor = 'null';
			} else {
				$valor = toba::db()->quote($parametro['valor']);
			}	
			$set .= $parametro['campo'] . ' = ' . $valor;
		}
	}
	
	if (!empty($set)) {
		$sql = "UPDATE	mdp_eleccion_institucion
				SET		$set
				WHERE	dato_censal = $dato_censal
				";
		
		guarani_db::ejecutar($sql);
		toba::logger()->info('************ Se actualizaron datos censales personales con éxito. ************');
	}
}

Hola!
Pudieron ver algo sobre este error?
Muchas gracias!!

Buenos días, respecto al punto 7
¿Cómo es posible que ya exista en Gestión y aún así pueda usar preinscripción? El sistema debería bloquear esta acción. ¿Modificaron algo de eso?

Hola Buenos días

Les comento que estamos teniendo el mismo error en la importación de los datos desde preinscripción.
En preinscripción tenemos configurado como no visibles la mayoría de los campos de la sección de datos adicionales.

Como explica Laura en este hilo, en ocasiones se importan los datos de los aspirantes pero no se completa el proceso de inscripción. Luego el aspirante modifica su ficha generando un nuevo código, cuando desde gestión se procesa el nuevo código se invoca a la función actualizar_eleccion_propuesta la cual genera el error que adjunto.

Además, en esta primera etapa de la migración, desde el SIU nos recomendaron realizar las inscripciones, tanto de los aspirantes como los que ya son alumnos, desde preinscripción. Por lo que tuvimos que personalizar ese proceso para que no valide si el aspirante ya es alumno en gestión.

Estamos utilizando Gestión v3.17.1 y Preinscripción v3.10.

¿Hay alguna solución para este inconveniente ?

Saludos


error importacion.png

error importacion.png

Hola Edgardo! Cómo estás?

Estamos analizando este tema y trabajando para solucionarlo. Les pedimos por favor que nos carguen un GDS haciendo referencia a este foro.
(Solucionado en ticket 32458 - version 3.18.1)

Saludos!

8

Buen día Martín

Genial ahora procedemos a enviar el GDS correspondiente.
Muchas gracias !

Hola,

¿Quedó algún parche para esto (3.17.1)? ¿O recomiendan hacer los mismos cambios que hicieron ellos ?

O algún campo lo llenamos con N y listo ?

Gracias !

Hola Fernando! Cómo estás?

Tenemos diseñado un parche que está desarrollado justamente en base a esa modificación. Igualmente habría que analizar que las causas del problema sean las mismas en su caso. Por favor cárguennos un GDS haciendo referencia a este foro y adjunten en el mismo el error que les aparece, así lo analizamos.

Saludos!

2

Se continua via gds 55899