Transaccion abortada (al ejecutar el mismo proceso desde varios vclient)


([N4] spereira) #1

Buenas tardes:
Tengo un proceso que genera albaranes y hace algunas cosillas mas (mueve stock, totales de ventas,...), el proceso tarda un poco pero lanzandolo desde un solo vclient va genial, el problema viene como lo lanze desde dos vclient a la vez, hay una transaccion que la realiza correctamente y la otra se echa para atras, pudiendola lanzar despues y realizandola perfectamente.

¿a alguien le ha pasado alguna vez?
¿alguna pista?

Un saludo.


([N4] spereira) #2

Haciendo pruebas y quitando actualizaciones, etc. he llegado a la conclusión que mientras genero los albaranes bloquea los registros y no puedes modificarlos desde dos transacciones a la vez..

¿que lo tengo que poner en foro de ideas?

Esto la verdad es un gran problema y es algo que en V6 realiza perfectamente.

Un saludo.


([N4] spereira) #3

¿Alguien tiene alguna instalación en real con mas de dos usuarios? ¿no le pasa a nadie esto?


([N4] eic) #4

Hola.

Yo tengo instalaciones con más de dos usuarios (en concreto, una con 12, y otras varias con 4, 3...). ¿Cómo es el proceso? ¿Se ejecuta en el servidor o en primer plano? Cuando se ejecuta desde dos equipos, ¿están involucrados los mismos registros?

Saludos,

Fran Varona


([N4] spereira) #5

* Lo probe a ejecutar en primer plano y en servidor.
* Probe a ejecutarlos desde dos equipos y desde el mismo equipo (terminal server).
* Estan involucrados los mismos registros.

El proceso pues es bastante grande ya que me desencadena en cascada pues actualizaciones que tocan unas 10 tablas.
Movimientos de stock, acumulados de stock, genera albaran y factura, etc. La transaccion en si puede durar unos 30 segundos en algunos casos (en otros menos).
Lo que creemos es que una transacción bloquea los registros hasta que no termina, y no puedes lanzar ninguna transacción que modifique ningun registro de los bloqueados.


([N4] innovadb) #6

Hola Santi

¿Estan involucrados los mismos registros?, si no recuerdo mal esto pasa al generar albaranes desde las ordenes de carga, entonces supongo que un usuario lee unas ordenes de carga y genera sus albaranes, mientras otro usuario lee otras ordenes de carga y genera otros albaranes.

Otra cosa, hasta la 7.5 los procesos en 3P si que bloqueaban la tabla (y digo tabla, no registro) en algunos procesos, pero esto se solucionó en la 7.6, así que no deberias tener problemas con esto.

A ver si el problema va a estar en alguna de las 10 tablas de las que hablas, si se bloque una ficha en otra tabla y no se puede terminar la transacción, el vserver la deshace entera.

Un saludo


([N4] innovadb) #7

Para descartar cosas, puedes empezar por deshabilitar los trigers en la tabla de albaranes o de lineas, y si lo hace bien, los vuelves a habilitar y vas quitando de las siguientes tablas en cascada, hasta encontrar la que genera el problema.

Si no son los trigers, haz lo mismo con las actualizaciones.

Un saludo


([N1] Nacho) #8

Si están implicados los mismos registros, yo lo haría con una cola, los procesos se lanzan a la cola, y se realizan uno detrás de otro...
Nacho


([N4] spereira) #9

Buenas:
Al fin he tenido tiempo para retocar este proceso y bueno, la solución ha sido dividir el proceso para realizarlo en transacciones pequeñas.
También aplique lo de las colas, pero si el proceso no se divide en transacciones pequeñas no sirve, ya que el proceso solo se puede mandar a cola en 2 plano y si ejecuto varios vclient me bloquearian los registros igual.

Gracias a todos.

Un saludo.