SOLUCIONADO Mesas de examen (exa00003)

Hola nuestros usuarios detectaron un problema en la operacion exa00003 para la creación de mesas de examen. Si crean mas de una mesa por materia, confirman los datos, luego vuelven a entrar y borran todas, al confirmar, sale el siguiente error:

No puede borrar el registro, ya que el mismo está siendo utilizado en otra tabla. Referencia: "pk_prestamos".

El problema está en la ‘w_mesas_examen’, método ue_confirmar(), línea 60:


...
FOR li_fila =1 to ll_llamados_a_borrar
	ds_llamados_a_borrar.uof_getclaves(ls_clave_llamado[],li_fila)
	ds_llamados.Reset()
li60:	ll_llamados_a_borrar = ds_llamados.Retrieve(ls_clave_llamado[1],ls_clave_llamado[3],ls_clave_llamado[2],ls_clave_llamado[5],ls_clave_llamado[4],ls_clave_llamado[6])
	ds_llamados.DeleteRow(1)
	// borro los llamados
	IF  ds_llamados.Update(True, False) <> 1 THEN 
		ib_grabar = False
		destroy ds_llamados 
		THIS.SetReDraw(TRUE)
		Return
	END IF
	
NEXT
...

Cuando se ejecuta el retrieve, se sobreescribe ll_llamados_a_borrar (en este caso en 1, ya que devuelve una fila) y el for siempre termina en 1. Para solucionarlo, habría que sacar esa asignación (marcada en li60). Podría quedar:


...
FOR li_fila =1 to ll_llamados_a_borrar
	ds_llamados_a_borrar.uof_getclaves(ls_clave_llamado[],li_fila)
	ds_llamados.Reset()
li60:	ds_llamados.Retrieve(ls_clave_llamado[1],ls_clave_llamado[3],ls_clave_llamado[2],ls_clave_llamado[5],ls_clave_llamado[4],ls_clave_llamado[6])
	ds_llamados.DeleteRow(1)
	// borro los llamados
	IF  ds_llamados.Update(True, False) <> 1 THEN 
		ib_grabar = False
		destroy ds_llamados 
		THIS.SetReDraw(TRUE)
		Return
	END IF
	
NEXT
...

Después también en el método ue_borrar_mesa(), línea 68:


// paso los llamados a borrar al ds que los acumula
dw_2.Rowscopy (1, dw_2.deletedCount(), Delete!, ds_llamados_a_borrar, 1, Primary!) 

Habría que cambiar el 1 de la posición del target DW, por la cantidad de filas + 1, ya que si no en varios borrados las sobreescribiría al empezar siempre de la posición 1. Podría reemplazarse por:


dw_2.Rowscopy (1, dw_2.deletedCount(), Delete!, ds_llamados_a_borrar, ds_llamados_a_borrar.rowCount() + 1, Primary!) 

Nosotros hicimos esas modificaciones, probamos, y funcionó borrar varias mesas.

Saludos!

Luciano

Hola Luciano

En que versión pasa esto?

Emilio

Hola Luciano
Ustedes están en versión 2.6.1, no? en esa versión les pasó esto?
saludos

Creo que esta demás ese código de borrar llamados y prestamos de las mesas borradas, ya que se hace por trigger de la tabla de mesas de examen y de llamados x mesa.

Hola, estamos en la versión 2.6.2

Hola Alejandro,
sin embargo el error salía al intentar hacer el Update (de power builder, en la parte de actualizar los prestamos, la que sigue a la mencionada de ue_confirmar)

Desde ya muchisimas gracias!!

Hola Luciano

Hay un parche para esa ventana para la version 2.6.2.
Pedilo y probalo a ver si funciona.

Emilio