Lorem Ipsum/DOL Differet Solmena

Separat existentie 2010 Unee MYT por scientie, musica, sport etc, litot Europa usa li sam Vocabular Lingues, differe solmen in li grammatica, li pronunciation. Delete this widget in Dashboard and add yours. This is just an example. Read More

RE: Grabar código

lunes, 25 de enero de 2016

Extendiendo lo que dice el maestro Techera, creo que ese script debe estar en el boton "Grabar".

(que yo recuerde el evento UpdateStart no lo he usado)

Siempre he hecho el script en el botón "Grabar".
Creo que al darle al botón grabar sucedería ...
0. INICIO DE LA TRANSACCION (si mal no recuerdo esto bloquearía la tabla Ventas, o lo que está por venir)
1. tomamos el nuevo numero correlativo. (**1)  (la tabla esta bloqueada)
2. se le asigna el nuevo correlativo a la cabecera, luego al detalle con el FOR..NEXT
3.  UPDATE()  a la cabecera(**1), luego al detalle, si el primero falla ==> Rollback, sino Update() al detalle... lo mismo, si falla este Update==>>Rollback.
4. Ninguno de los 2 fallo?  ==> Commit.
5.fin DE LA TRANSACCION (se liberan las tablas) (**2)
....y todo eso en fracciones de segundo por lo que creo que no se chocarán en cuanto al correlativo.

(**1): Entiendo que el correlativo lo toma de la misma tabla de Ventas(por eso necesitaríamos solo 2 Update()'s.
(**2) : Los mensajes como "Grabación ok" o "Error al grabar"(que solemos poner para informar al usuario) deben estar después de haberle dado Rollback o Commit, sino, sí estaríamos bloqueando las tablas y otros usuarios no podrán hacer nada con esas tablas.

Saludos.


Subject: Re: Grabar código
To: techeraz9@googlegroups.com
From: techeraz9@googlegroups.com
Date: Mon, 25 Jan 2016 10:04:59 +0100

Buenas,

Te comento como lo haría yo:

Bloquearía en modo exclusivo la tabla ventas para lectura/escritura

dw_cabecera.Object.codigo_venta[1] =  wf_generacodigo()

bucle de 1 a N líneas
     dw_detalle.Object.codigo_venta[n] =  dw_cabecera.Object.codigo_venta[1]

si dw_cabecera.update() <> 1 --> rollback;
si dw_detalle.update() <> 1 --> rollback;

commit;

MUY IMPORTANTE, las llamadas a rollback y commit para liberar el bloqueo de la tabla.

De este modo nos aseguramos de que unicamente un usuario pueda acceder a la tabla ventas para generar el codigo y evitar duplicidad de clave

Un saludo


El 24/01/2016 a las 21:39, Alberto Cuevas escribió:
Buenos días, tengo una ventana en mi aplicación de registro de ventas (Cabecera / Detalle) que sera utilizada por mas de 2 personas a la vez.

Esta ventana funciona bien si solo lo usa un usuario pues al momento de abrir ya se establecía el código secuencial de la tabla asociada (Ventas) con este codigo:

This.Object.codigo_venta[1] =  wf_generacodigo()

Al insertar en el datawindow detalle pasaba el valor del codigo que estaba en el datawindow cabecera y al final grababa y listo.

Ahora que sera utilizado por 2 o mas usuarios pues cambie (Aun en prueba) este codigo:

This.Object.codigo_venta[1] =  wf_generacodigo() ahora esta en el evento updatestar del datawindow cabecera.

Mi pregunta es como trabajar con el datawindow detalle tendría que grabar primero el datawindow cabecera y así seria mas fácil todo, pero se necesita agilizar las cosas y que se de clic solo una vez al boton grabar.

Espero sus recomendaciones.

Gracias por su apoyo.
--

---
Has recibido este mensaje porque estás suscrito al grupo "TechEra" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a techeraz9+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--

---
Has recibido este mensaje porque estás suscrito al grupo "TechEra" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a techeraz9+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

0 comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.