FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Actualización números de factura
Hola a todos!
Trabajo con Interbase 6, Delphi 4 Professional, conexión a través del BDE y CachedUpdates. La aplicación se ejecuta en red y desde dos puestos de trabajo están facturando al mismo tiempo, el problema lo tengo al generar el número de la factura, el cual debe ser correlativo y por supuesto diferente en los dos puestos. No puedo usar generadores para obtener el número debido a que los tipos de comprobante son variables. Lo que tengo es una tabla con los tipos de comprobante y para cada tipo existe un campo donde se guarda el último número emitido; tengo que sumar 1 a este número y asignárselo al comprobante. A su vez, el tipo y número de comprobante son los campos clave en el archivo de comprobantes. Este número tengo que grabarlo también en otra tabla relacionada pero que no tiene foreign key. El problema que estoy teniendo es que desde los dos puestos se genera el mismo número y da el error Key violation. Alguna ayudita, por favor. Desde ya muchas gracias Marina |
#2
|
||||
|
||||
Re: Actualización números de factura
Hola,
Cita:
Saludos. |
#3
|
|||
|
|||
Oye, porque no usas mejor un generador para cada tipo de comprobante? denro de un trigger beforeinsert puedes establecer el valor dependiendo del tipo de comprobante que estas insertando, asi te evitaras problemas con el uso de campos para ese fin.
__________________
Saludos Douglas Cruz |
#4
|
||||
|
||||
Hola,
la función de los generadores es justamente la inversa: garantizan que no se producirán duplicados de claves, y en consecuencia que no habrá "Key violations", pero no garantizan una secuencia correlativa. En pocas palabras, en un entorno multi-transacción (InterBase) es imposible conseguir una secuencia correlativa de enteros y que además no se puedan producir errores de claves duplicadas. Saludos. |
#5
|
|||
|
|||
NUmeracion de Comprobantes
Hola:
Me enganche en este hilo buscando otra coas y bueno. Mira yo tenia el mismo problema. Por lo pronto yo no uso como clave primaria el mismo numero del comprobante, si no que uso un id interno, que lo tomo de un generador, tanto en la cabecera como en las lineas. Ese Id que es un Integer lo uso como PK. Los numero de comprobantes lo tomo de una tabla que tiene (igual que vos) de un campo de numero el cual leo y le sumo uno. Cuando dos puesto de trabajo hacen el mismo tipo de comprobante, no me afecta ya que los dos tiene un id diferente y no hay conflictos, pero si van a tener el mismo numero de comprobante. Entonces en el momento de hacer un commit en la base de datos en el BeforePost hago una consulta de la tabla de comprobantes donde esta el numero de comprobante, si el numero difiere en el numero mas uno listo lo gravo pero si el otro gravo antes que yo la diferencia va ser menor ya que cuando gravo el comprobante actualizo el campo de numero con el ultimo ingresado. re-actualizo el numero de factura y vuelvo actualizar el numero de comprobante en la tabla de comprobantes. y dejo que grave. No se si me entendistes.. cualquier cosa laromdp@infovia.com.ar chau |
#6
|
|||
|
|||
Chaja tiene razón, el nº de factura no debe ser la clave primaria, y para generarlo se pueden utilizar varios métodos, yo el que uso es mediante un disparador que se activa al guardar los datos en el servidor, (cuando se ha confirmado la inserción del registro), luego hago un refresh y recupero el nº de factura.
Antes almacenaba el último número en una tabla, pero ahora lo que hago es obtenerlo con la consulta: Código:
select max(n_factura)+1 from facturas |
#7
|
||||
|
||||
Pues yo creo que el número de factura ha de ser clave única, otra cosa es como obtener ese número único en el momento de la grabación.
Yo utilizo una tabla auxiliar y en el evento beforeInsert: 1º.- Pongo en edición el último número que es un campo de esta tabla auxiliar,, con lo cual garantizo que no pueda acceder nadie a él en ese momento. 2º.- Le sumo 1 y lo libero Ahora ya tengo un número único para la factura que se está grabando, la consulta le veo un problema, si se da la casualidad que dos puestos acceden a hacer la consulta al mismo tiempo obtendrán el mismo número de factura. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#8
|
||||
|
||||
Hola,
Cita:
Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Fallo Nº Factura y Linea Factura | CarmaZone | Tablas planas | 5 | 26-05-2005 11:17:19 |
Ticket & Factura | mosorio | Varios | 0 | 14-08-2003 18:25:53 |
Falla en actualización con CachedUpdates | Marina | Conexión con bases de datos | 5 | 03-06-2003 20:55:05 |
Fallo en actualización con CachedUpdates | Marina | SQL | 1 | 31-05-2003 17:24:02 |
Diseño de una factura con RAVE | Er_Manué | Impresión | 0 | 28-05-2003 10:14:43 |
|