PDA

Ver la Versión Completa : ¿como obtener folios consecutivos mysql firebird postgresql?


JXJ
23-07-2013, 06:02:09
hola.
pongo esto en varios por que estoy en el problema de generar folios consecutivos
en un ambiente multiusuarios.

Es decir. tengo la base de datos en el servidor.
a la que se conectan 10 usuarios 2 en cada sucursal 5 sucursales en total y a veces
si se tiene la serie y el folio

SUCURSAL1 1000

y se hace una venta.
con la computadora del usuario 1
y en la computadora del usuario 2
se hace igualmente una venta casi al mismo tiempo.

en lugar de que la secuancia sea
SUCURSAL1 1000
SUCURSAL1 1001
SUCURSAL1 1002

sale

SUCURSAL1 1000
SUCURSAL1 1001
SUCURSAL1 1001



MyQueryDatEmp.SQL.Add('SELECT MAX(folio) AS FolioFact FROM Facturas WHERE Serie = ''' + serie + '''');


¿que tecnicas usan para que no se les repitan folios?

¿que tecnicas usan los bancos para tener folios seguros, imagino los de los pagos que se hacen y los cobrar a las cuentas.?

gracias.

:D

cloayza
23-07-2013, 07:43:32
Amigo le propongo que la obtención del numero de secuencia lo asigne en un trigger o disparador de la tabla...

Ejemplo Firebird:

CREATE OR ALTER trigger FACTURAS_bi for FACTURAS
active before insert position 0
AS
BEGIN
FOR SELECT MAX(Facturas.FOLIO)
FROM Facturas
WHERE Facturas.Serie = NEW.Serie
INTO NEW.FOLIO;

END

Saludos...

Casimiro Notevi
23-07-2013, 11:09:08
Lo indicado por cloayza es la mejor solución.
Aunque hay un fallo en la estructura de tu base de datos:
SUCURSAL1 1001
SUCURSAL1 1001
Ese dato debe ser clave única, no permitir duplicados.
De esa forma te saltaría una excepción y podrías controlarlo para asignarlo el siguiente número.

JXJ
23-07-2013, 20:08:04
hola cloayza

esa opcion la voy a probar.

Casimiro Notevi


yo meneje asi esas tablas por que cuando se ingresan las facturas.
cada una tiene su serie y folio.
y a veces sin serie. puro folio.

es decir.

SUCURSAL1 1001
SUCURSAL1 1001

SUCURSAL2 1001
SUCURSAL2 1001

1001
1001

no me parecio adecuado usar la clave unica para tener la secuancia de numeracion.

o tal vez entendi mal tu observacion.

Casimiro Notevi
23-07-2013, 20:55:50
Me ha parecido entender que el problema que tienes es que se repiten.
Por lo tanto, si eso es así, entonces hay que evitar que se repitan, el campo debe ser clave única, sin duplicados.