Puede ser un problema, no te lo discuto, pero depende el tipo de empresa
y el uso que le de, si la empresa hace bloques de facturación grandes,
lo lógico es que habilite otra serie de facturación o facture los
bloques grandes a otras horas. Tampoco es logico que estes facturando un
bloque de un cliente o varios cliente y aparezca una factura en medio de
otro cliente.
Este problema aparecería en empresas que facturen de manera quincenal o
mensual, que acumulen albaranes y no los facturen en el momento.
El 21/04/2016 a las 18:14, Ivan Perales M. escribió:
Imaginate si a un cliente le van a hacer 100 facturas y a otro solo 1,
pero el de 100 empezo primero, lo obligarás a esperarse el tiempo que
tarde hacen esas 100 en lugar de solo el tiempo que tarde hacer la de el?.
El método que te propuse lo puedes adaptar para que te aparte un rango
de folios.
En fin, suerte.
2016-04-21 11:06 GMT-05:00 Kernel <jucab...@gmail.com
<mailto:jucab...@gmail.com>>:
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>
<mailto: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>
<mailto: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> <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>
<mailto: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 ..
--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y
las que no.
-
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