El 21/04/2016 a las 16:39, Ivan Perales M. escribió:
Yo también creo que tu problema es una solución más por software que por
la base de datos.
Pero ahora, la pregunta sería, ¿el número de factura debe ser
consecutivo?, si a un cliente se le van a hacer 100 facturas, y a otro
solo 2, al primer cliente le deben de salir del 1 al 100 y al segundo
del 101 al 102?, o puede ser posible que al cliente 1 le salgan del 1 al
102 y al cliente por ahi del 35 y 47, eso es factible? Por que si esto
si lo es, yo creo que lo que deberias tener es un método exclusivo que
ye este regresando el folio. Despues de hacer todas las validaciones en
el método que crea la factura y ya lo único que queda es guardarla en la
base de datos, en ese momento deberias llamar a éste método exclusivo
(que debe crear una transaccion independiente) y que debe estar
preparado para ser llamado desde diferentes threads, encolando las
peticiones, asi el método exclusivo checa cual es el siguiente folio,
actualiza la tabla y lo retorna, las siguientes peticiones entonces
siempre recibirán el siguiente único. La ventaja de esto es que puedes
agregar un parámetro adicional como la serie para obtener el folio.
2016-04-21 9:14 GMT-05:00 Jaime Casanova <jaime.casan...@2ndquadrant.com
<mailto:jaime.casan...@2ndquadrant.com>>:
2016-04-21 8:03 GMT-05:00 Hellmuth Vargas <hiv...@gmail.com
<mailto:hiv...@gmail.com>>:
> Hola Lista
>
> Quisiera que aclaráramos y dividiéramos el problema en cuestión: la
> necesitad del bloqueo es por los Item o artículos que hacen parte
de la
> factura para que otro cliente nos los vaya a tomar nuestros artículos
> mientras se efectúa la factura o es por el numero de la factura?
Porque
> según estoy entendiendo en el hilo de la discusión el tema es el
numero de
> facturación, si es así no hay necesidad de bloquear las tablas,
el tema es
> con la secuencia que genera el numero de factura, que no debe
tener saltos,
> debe ser consecutivo, debe ser UNICO, que debe corresponder a un
rango
> valido, etc. etc y el enfoque es diferente para lograr esto de forma
> concurrente.
>
El problema de usar secuencias es que si puede haber saltos, por
ejemplo si
se cancela la operación luego de haber tomado un valor de la secuencia.
Pero el otro problema que podría haber, o al menos a mi me paso en
Ecuador,
es que el gobierno nos obligaba a imprimir un formato especifico en una
imprenta y nosotros debíamos usar ese formato llenando los espacios en
blanco pero la imprenta ya debía darte los números de las facturas así
que si tenias varias personas facturando debías asegurarte que
terminen las
transacciones en el orden correcto para que coincidan con los
números fisicos
de la factura.
Por supuesto, existe más de una manera de solventar ese problema pero el
problema existe. Y seguramente hay variantes del mismo problema en
otras partes.
--
Jaime Casanova www.2ndQuadrant.com <http://www.2ndQuadrant.com>
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
-
Enviado a la lista de correo pgsql-es-ayuda
(pgsql-es-ayuda@postgresql.org <mailto:pgsql-es-ayuda@postgresql.org>)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y
las que no.
Las facturas tienen que ser correlativas , sin saltos y por supuesto la
fecha de una factura no puede ser menor que una con numero superior.
Voy a utilizar el select for update con la clausula nowait a una tabla
que voy a crear para el proceso, asi puedo bloquear por empresa,serie.
No voy a hacer el select for update a la propia tabla de series, por que
en el mismo registro esta el ultimo numero de
factura,albaran,pedido,presupuesto, orden de fabricacion y bloquearia
muchos procesos.
Voy a leer el ultimo numero de factura al principio, lo incrementare en
memoria y solo escribiré en el fichero de series al final, justo antes
del commit, creo que es la mejor solución ..
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda