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