![]() |
No. Factura
Hola a todos. Estoy desarrollando un sistema de facturación con delphi y MySQL. El dilema radica cuando tengo que asignar el numero de la factura. tengo una tabla "A" que contiene un campo numerico donde se aloja el numero de la siguiente factura. por ejemplo 1. el sistema debe capturar dicho valor y una vez elaborada la factura No. 1 aumentar en uno el valor en la tabla "A", osea 2 para la proxima factura, y así sucesivamente. como puedo hacer para que cuando se esté trabajndo en red, no se repita el mismo numero en dos facturas diferentes. osea impedir que dos o mas usuarios accedan a la vez a la tabla "A" a pedir el numero de la factura. En otras plataformas de BD habia revisado el tema de bloquear la tabla y liberarla despues de captado el valor. pero acá en MYSQL, no tengo ni idea de como hacerlo. Gracias...
|
Yo lo que hago es asignar el número en el momento de grabar la factura, previamente le asigno un número provisional y solamente al grabarla le asigno el definitivo.
El número será clave única con lo cual es imposible que se repita. Tomamos el último número le incrementamos en 1 en la tabla configuración y se le asignamos a la factura y la grabamos. Un Saludo. |
Otra forma es que NO le envíes el numero y que a travez de triggers el sistema vea cual es el número que le toca e incremente la tabla de contadores.
Es importante que sea clave única o por lo menos un índice único, que no permita que se repita dentro de su serie / canal / año / etc. |
Yo lo que hago es una funcion en mysql que me da el nro factura y lo incrementa, asi no hay problemas.
supongamos que tenemos la tabla numeros y facturas. En mysql define una funcion asi begin define n int; select nrofactura into n from numeros limit 1; update numeros set nrofactura = nrofactura + 1; return n; end en return type pon int |
Otra opcion es hacer que tu campo "Numero" lo declares como auto_increment de esa forma no deberías enviarle ningun numero, es más ni siquiera deberias preocuparte en enviarle el campo "Número" en la insercion o edicion, ya que el propio servidor se encargará de asignarle uno.;).
De todas formas en MySQL tambien se pueden bloquear y desbloquear las tablas cuando uno lo desee.;), pero en ese caso :rolleyes: mejor sería usar Transacciones.;) Saludos...:) |
El tema de las facturas es harto complicado porque por muy excelso que sea el sistema en esas lides, siempre dependerá de lo que suceda en la realidad puesto que los folios de las facturas son físicos. Yo dejé de quebrarme la cabeza con los errores que sucedían (no correspondia el folio del sistema con el físico, facturas faltantes, cancelaciones no declaradas, etc.) simplemente preguntándo al operador antes de iniciar una "sesión de facturas"..¿Con que folio inicias? y de ahí empezar a llevar el control únicamente en esa sesión. Así si por algún motivo echaban a perder facturas o las quitaban sin capturarlas el sistema siempre esta actualizado y me ha funcionado bien ya que los operadores ya se acostumbraron a ver que factura física es con la que van a empezar y durante esa sesión el sistema si va incrementando la numeración en tanto no se le indique lo contrario.
Y aclaro que este sistema genera casi 500 facturas diarias y hasta ahorita sin ningún problema. |
La franja horaria es GMT +2. Ahora son las 18:19:47. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi