Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No. Factura (https://www.clubdelphi.com/foros/showthread.php?t=70587)

cmfab 29-10-2010 14:30:04

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...

marcoszorrilla 29-10-2010 15:12:30

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.

duilioisola 29-10-2010 16:50:07

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.

adelpino 06-11-2010 13:48:58

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

rgstuamigo 06-11-2010 15:07:22

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...:)

AzidRain 06-11-2010 22:39:14

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