Bueno una vez con un sistema de facturación que teniamos con PHP y postgres
ese tema lo solucionamos implementando semáforos con PHP

El 21 de abril de 2016, 11:44, Ivan Perales M. <ivan.pera...@gmail.com>
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>:
>
>> 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 ..
>>
>>
>>
>>
>
>
> --
> Lindolfo Iván Perales Mancinas
> Solo existen 10 tipos de personas en el mundo, las que saben binario y las
> que no.
>



-- 
Ing. Jorge A. González V.
Especialista de Base de Datos
Gerencia de Tecnología
Oficina (Máster): +58 (251) 232 16 34
Oficina (Directo): +58 (251) 250 43 99
*Móvil: *+584261534450
Fax: +58 (251) 231 77 64

Responder a