[SOLUCIONADO] Imprimir Acta de Exámen (sin libro_tomo)

Buenos dias
Estamos en proceso de migracion de version 2.7 a version 3.12.0
En el sistema se tienen actas en estado abiertas, pero al momento de querer imprimir un acta de examen sale un error:

Menu:
Exámenes → Actas → Imprimir Actas de Exámen

SQLSTATE: db_22P02
CODIGO: 7
MENSAJE: ERROR: la sintaxis de entrada no es válida para integer: «» LINE 3: WHERE sga_libros_tomos.libro_tomo = “” ^
SQL: SELECT sga_libros_tomos.cant_max_folios FROM sga_libros_tomos WHERE sga_libros_tomos.libro_tomo = “” – toba_log: 397653636

llego a ver en el codigo que se ejecuta la funcion
actualizar_datos_impresion de la clase cn_ent_imprimir_actas_examen
con la siguiente definicion:
function actualizar_datos_impresion($datos_acta, $cant_alumnos, $carga_manual_libro, $forma_asignacion_folio_fisico, $libro_tomo=null)

en la funcion llama al metodo asignar_folio_fisico de la clase acta_nucleo con $libo_tomo en null
el valor de $carga_manual_libro es = ‘S’
$forma_asignacion_ff = ‘Impresion’
$datos_acta[‘version_impresa’] = 0

por lo que se ejecuta el metodo primera_asignacion

En ese entonces cuando quiere obtener la máxima cantidad de folios del libro tomo
Ejecuta el metodo get_cant_max_folios_libro de la clase co_actas

y lo encierra entre ‘’ con la función
$libro_tomo = toba::db()->quote($libro_tomo);

y allí es donde queda mal formado el sql debido a que la columna libro_tomo de la tabla ga_libros_tomos es numérica

Seguí mirando el código y se maneja de igual forma en el método get_ultimo_folio_fisico y en el método actualizar_folios_fisicos al hacer el insert

Adicionalmente busqué el id_acta en la tabla sga_actas_folios y esta tiene libro_tomo… pero de todas formas no sirve de mucho porque en ningún momento se recupera el valor, salvo que la carga del libro NO sea manual.

Mi pregunta:

  1. Es correcto a nivel funcional en G3 que se tenga un acta abierta sin libro_tomo o no debiera ser así?
    En caso negativo como se debería corregir en G3?
    En caso afirmativo, cual sería la corrección a nivel de código? por que se maneja la conversión a texto los valore numéricos de bd? (en este caso libro_tomo)

Gracias

¡Hola Cristian! Suponemos que migraste la base de 2.7 a 2.9.3 para hacer las pruebas de migración, ¿verdad?
Es correcto que el acta abierta no tenga asignación alguna de foliado o libro, a nivel funcional. Es porque se pueden configurar distintos valores para indicar en cuál momento se desea ingresar esa información, en forma manual o automática.
Revisen por favor los valores indicados en estos parámetros:
exa_forma_asignacion_folio_fisico
exa_carga_manual_libro_examen

Hola Emilse
Efectivamente, la migración se hizo correctamente pasando por las versiones de 2.7 hasta la 2.9.3 y luego a la versión 3.12.0

Los valores de los parámetros son:

exa_forma_asignacion_folio_fisico = Impresion = La asignación se realizará en la impresión del acta. Actas con/sin notas
exa_carga_manual_libro_examen = S = El libro de actas se ingresa manualmente por el usuario

Con esta configuracion… en que momento y donde debería asignar el libro?

Gracias

Segun exa_forma_asignacion_folio_fisico = Impresion ( La asignación se realizará en la impresión del acta. Actas con/sin notas), como dice el parámetro es al momento que se imprime por primera vez el acta de examen. Luego si llegan a agregarse folios al acta porque se agregaron alumnos o los folios son menos porque se quitaron alumnos, al reimprimir se realizara un refoliado del acta.

Luego, por como esta configurado este otro parámetro (exa_carga_manual_libro_examen = S = El libro de actas se ingresa manualmente por el usuario), cuando intente imprimir por primera vez y quiera asignar el folio fisico a los folios del acta le solicitará al usuario que ingrese el libro de actas. Si estuviera definido co nel valor N, entonces esa asignación del libro de actas se hace en forma automática.

Buen dia Alejandro…
Según lo que me indicas segun la configuracion que se tiene al momento de imprimir el acta me debería pedir ingresar el nro de libro, pero no me aparece ese campo para completar.

Te adjunto una captura de pantalla de un acta en estado Abierta, en el que no se ve que se pida nro de libro y que al darle imprimir sale el error.

Que puede estar pasando?


imprimir-acta-abierta.png

imprimir-acta-abierta.png

Cristian, podras correr la siguiente consulta y ver si recupera ese acta con el que tenes problemas y otras que esten en estado abierta y que nunca hayan sido impresas:

SELECT * FROM sga_actas WHERE origen = 'E' and estado = 'A' and version_impresa = 0
AND exists (select 1 from sga_actas_folios as af where af.id_acta = sga_actas.id_acta);

Alejandro… la consulta trae las actas abiertas… entre ellas la que te doy como ejemplo (una de las tantas que da el error)

Te adjunto la captura de pantalla de la consulta con el agregado del nro de acta que estoy revisando en particular.

Gracias


acta1-1-04-103.png

acta1-1-04-103.png

Hace lo siguiente

  1. Consulta los datos de esta tabla y anotalo (por si tenes que volver a ingresarlos en la base)
SELECT * FROM sga_actas_folios WHERE id_acta = 75 ;

¿En el campo libro_tomo y folio_fisico estan en null en los registros de este acta?

  1. Si los campos “libro_tomo” y “folio_fisico” estan en null en todos los registros para ese acta, entonces borra esos datos de la tabla para ese acta:
DELETE FROM sga_actas_folios WHERE id_acta = 75  ;
  1. Proba nuevamente imprimir el acta.

buen dia Alejandro…

Solo hay un registro con libro_tomo = 25 y folio_fisico en null

[tr]
[td]id_acata[/td][td]folio[/td][td]libro_tomo[/td][td]folio_fisico[/td]
[/tr]
[tr]
[td]75[/td][td]1[/td][td]25[/td][td][/td]
[/tr]

Borré el registro y al intentar imprimir el acta nuevamente me pide ingresar libro/tomo

Pero al seleccionar un valor y darle imprimir, sigue fallando

Adjunto captura de pantalla


imprimir-acta-abierta-libro.png

imprimir-acta-abierta-libro.png

Hace lo siguiente

  1. Volve a insertar ese registro en esa tabla. Ya tenia registrado un libro que corresponde con el libro_tomo = 25.

  2. Actualiza el campo version_impresa de ese acta:

UPDATE sga_actas SET version_impresa = version WHERE id_acta = 25;
  1. Intenta nuevamente imprimir el acta de examen.

El dato del folio físico lo estan registrando? Porque para estas actas abiertas ese dato por lo que vi no existe en estas actas migradas.

Creo que el problema se da cuando existen registros en la tabla sga_actas_folios (que se genera cuando se imprime el acta) y en sga_actas.version_impresa = 0. Situacion que no debiera llegarse si el acta se genera y se imprime por el sistema desde el comienzo.

De haberse solucionado el problema con los pasos anteriores en este acta, entonces para corregir esto en otras actas hace lo siguiente:


UPDATE sga_actas 
           SET version_impresa = version 
 WHERE origen = 'E' AND estado = 'A'  AND version_impresa = 0
        AND EXISTS (SELECT 1 FROM sga_actas_folios as af WHERE af.id_acta = sga_actas.id_acta);

Ajustaremos el script de migracion para que no deje el dato “version_impresa” en 0 si el acta tiene registrado los folios.

Perfecto!!! solucionado el problema!!!

Gracias