Minientrada

Bloqueandome a mi mismo (I)

Vamos a ver un ejemplo curioso, en el que el mismo usuario impide que se realicen las actualizaciones de su propia operación.

El proceso es de lo mas sencillo, partiendo de 2 tablas una de cabecera y otra de líneas, modifica el registro de cabecera y da de alta una nueva línea.

Proyecto de pruebas
Tengo un proyecto para hacer pruebas, y que utilizo para acotar bugs. El proyecto tiene 5 tablas, pero para este ejemplo solo necesitamos 2 de ellas.
Se trata de una estructura de tipo cabecera de albarán – líneas, con una actualización desde las líneas a la cabecera. Esta actualización mantiene un campo NRO_LIN, que nos deberia indicar (cuando las cosas funcionan como debe) el número de líneas del albarán.

Esquema:
PruebasEsquema
Ahora vemos las 2 tablas que usaremos en este caso:
Esta es la estructura de la tabla albaranes (ALB):
PruebasALB
Esta es la estructura de la tabla líneas de albarán (LIN):
PruebasLIN
Esta es la actualización del nº de líneas que tiene un albarán:
PruebasLIN-Actualiza

Cómo veis suma un 1 al campo NRO_LIN de la tabla ALB

Bien ahora ejecutamos el siguiente proceso, que lo que hace es recorrer los albaranes, modificando el campo NAME, y añadiendo una nueva línea. Como este proceso modifica el registro de albaranes, lo bloquea, y cuando el mismo proceso, al crear una línea, intenta actualizar la tabla de albaranes y sumarle 1 al campo NRO_LIN, no puede!!!!!!. Nosotros mismos nos bloqueamos

REM. Recibimos una lista de albaranes (tabla: ALB)
Recorrer lista lectura/escritura
Modificar campo NAME: "ANTES: Nº lineas:" + #NRO_LIN + ". AHORA deberia tener Nº:" + numberToString( #NRO_LIN + 1 , "L", 0 ) + "<--MAL"
Set ALB = #ID
Crear nueva ficha en memoria lin: LIN
Modificar campo ALB: ALB
Modificar camop CNT: 1
Alta ficha lin

Proceso autobloqueo.

RESULTADO:
Vista_Fallo_Actualiza
¿que os parece?. Una forma sencilla de generar una incongruencia de datos no?

Anuncios