Error de SQL en Reportes - Regularidades Versión 2.9.1

Buenas Tardes:

Estamos probando la versión 2.9.1 y nos aparece un error en “Reportes → Regularidades”. El error en cuestión es:

SQL ERROR: SQLSTATE[42000]: Syntax error or access violation: -201 [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. (SQLPrepare[-201] at /tmp/PDO_INFORMIX-1.2.7/informix_driver.c:131) SELECT descripcion FROM sga_det_escala WHERE escala_notas = AND nota = ‘’

Estuve analizando los logs y el mismo proviene de …db/alumno.php en la función get_nota_descripcion, esto me pasa solo con alumnos que tienen equivalencia parcial, la misma al no tener escala de notas (no es un vacío, sino que no tiene valor) produce el error.

SELECT descripcion FROM sga_det_escala WHERE escala_notas= and nota=‘’ esto es lo que está ocurriendo en esos casos.

Aguardo apreciaciones.

Saludos!

Ezequiel Molina
Facultad de Ciencias Agrarias - UNJu

Hola Ezequiel!!!
Habría que agregar a la función get_nota_descripcion una validación de los parámetros ‘escala_notas’ y ‘nota’ por null y string vacío.

Probá lo siguiente:

PHP: modelo/datos/db/alumno.php

Función: get_nota_descripcion


	/**
	 * parametros: escala_notas, nota
	 * cache: memoria
	 * filas: n
	 */
	function get_nota_descripcion($parametros)
	{
		if(is_null($parametros[escala_notas]) OR $parametros[escala_notas] == "" OR is_null($parametros[nota]) OR $parametros[nota] == "" )
		{
			return "";
		}

		$sql = "SELECT	descripcion
				FROM	sga_det_escala
				WHERE	escala_notas = {$parametros['escala_notas']}
				AND		nota = {$parametros['nota']}";
		
		$datos = kernel::db()->consultar_fila($sql, db::FETCH_NUM);
		return $datos[0];
	}

Función: regularidades


	/**
	 * parametros: _ua, carrera, legajo
	 * cache: memoria
	 * filas: n
	 */
	function regularidades($parametros)
	{
		$sql = "execute procedure sp_regulAlumno({$parametros['_ua']}, {$parametros['carrera']}, {$parametros['legajo']},3,3,3)";
		$datos = kernel::db()->consultar($sql, db::FETCH_NUM);

		$nuevo = array();
		foreach($datos as $id => $dato) {
			$nuevo[$id]['MATERIA'] = $dato[3];
			$nuevo[$id]['MATERIA_NOMBRE'] = $dato[12];
			$nuevo[$id]['RESULTADO'] = $dato[7];
			$nuevo[$id]['FECHA_REGULARIDAD'] = "";
			$nuevo[$id]['FECHA_VENCIMIENTO'] = "";

			if (!empty($dato[10])){
				$nuevo[$id]['FECHA_REGULARIDAD'] = date("d/m/Y", strtotime($dato[10]));
			}

			if (!empty($dato[9])){
				$nuevo[$id]['FECHA_VENCIMIENTO'] = date("d/m/Y", strtotime($dato[9]));
			}

			$nuevo[$id]['DETALLE']['FECHA_VENCIMIENTO'] = $nuevo[$id]['FECHA_VENCIMIENTO'];
			$nuevo[$id]['DETALLE']['ANIO_ACADEMICO'] = $dato[4];
			$nuevo[$id]['DETALLE']['PER_LEC'] = $dato[5];
			$nuevo[$id]['DETALLE']['ORIGEN'] = $dato[8];
			$parametros = array('escala_notas' =>$dato[23],
								'nota' => "'".$dato[19]."'");
			$nota_descripcion = $this->get_nota_descripcion($parametros);
			if ($nota_descripcion != ""){
				$nuevo[$id]['DETALLE']['NOTA'] = $dato[19]." (".$nota_descripcion.")";
			} else {
				$nuevo[$id]['DETALLE']['NOTA'] = $dato[19];
			}			
		}
		return $nuevo;
	}

En la función ‘get_nota_descripcion’ se agrega la validación de los parámetros que te comentaba.
En la función ‘regularidades’ se agregó una validación por la nota_descripción, si viene vacía, no muestra los paréntesis.

Este arreglo estará incluido en la version 2.9.2.

Probalo y avisanos si se resolvió el problema.
Saludos!

Buen día Ezequiel, ¿podrías confirmarnos si se resolvió el inconveniente?
¡Gracias y saludos!