Con lo de las horas quede comprendido.
con lo de los codigos a ver si entendi, es que no debo de tomar el numero incremental, si no que debo de dejar que se autoincremente al momento que se ingrese la factura, es asi? y si es asi comprendi que puede haber un error con la fecha y la hora de la creacion del documento, ya que si llamo primero el form, y otro en red llama el mismo form con el valor incremental siguiente, y hace el proceso primero que mi, y yo un par de horas despues quedaria con una fecha menor adelante de una mayor.
Si fuera asi,como harian los otros grandes sistemas de facturacion para obtener elcodigo primero alabrir el formulario de facturacion.
Cita:
Iniciado por gnzsoloyo En realidad lo que tienes no es un problema de BBDD, sino un problema de diseño de sistemas. En un sistema de facturación que va a funcionar en red es absolutamente imposible hacer una reserva de autoincremental sin generar este tipo de inconveniente, y otros mucho mayores.
Todo debido al principio mas sencillo de todo sistema concurrente: La coexistencia de N transacciones simultáneas.
En realidad, siendo que forzosamente la facturación es el cierre de toda operación, y esta debe ser consistente, y no puede crearse en una forma que la numeración presente discrepancias con la hora de creación del comprobante, esta se debe ejecutar como un proceso atómico, y por ende no puede tomarse el número de factura previamente. Debe siempre crearse en el momento de la emisión (requisitos legales en todas partes del mundo).
Los sistemas concurrentes en realidad solucionan parte del inconveniente creando un estado intermedio de la compra, en una tabla transaccional que luego relacionan con la de facturación, pero sólo a los efectos de la consistencia de datos.
Esta tabla transaccional solo debe ser consistente consigo misma, por lo que el orden numérico de su identificador es irrelevante.
¿Qué quiero decir con todo esto?
Bueno, simplemente creas una tabla de, digamos, "ordenDePedido", donde vas a cumulando todos los detalles necesarios para la emisión de la factura, y sólo al confirmar toda la operación tomas esos mismos datos y los vuelcas en la factura, en un sólo ciclo de proceso, recuperando en el acto el numero de factura que se genera .
¿Se entiende?
NUNCA usas una tabla de facturas como tabla de proceso previo. JAMÁS.
Usas siempre tablas intermedias y la ejecución de facturación es un proceso atómico de cierre final.
Una factura nunca debe tener procesos posteriores que modifiquen datos una vez emitido su identificador. Toda modificación de la operación asentada en una factura, siempre generará nuevos documentos a registrar en otras tablas, pero la factura en si se cierra junto con la generación de su identificador, y no se modifica.
Respecto a la consistencia tiempo-numero de factura, me refiero a que si si tienes dos facturas con números consecutivos, en todas las legislaciones que yo conozco, la factura de numero mayor siempre debe tener una fecha y hora posteriores, y eso puede no cumplirse en tu sistema (dependería de cuanto tarde la segunda transacción), con lo que existe margen para que la facturación sea legalmente considerada fraudulenta, si las horas de registración son inversas a la numeración. ¿Queda claro?
¿Se entiende la idea?