PDA

Ver la Versión Completa : Deshacer proceso de facturacion


donpedro
26-05-2013, 01:48:48
Hola a todos, espero que Dios me los bendiga mucho.....
les comento que estoy realizando un programa de gestion educativa en delphi 2009 con mysql....
ya esta casi terminado, tengo una duda..... tengo un modulo de facturacion que funciona bien, lo que quiero saber es, si la persona responsable de realizar el cobro, por alguna razon comete un error a la hora de realizar un proceso, por ejemplo:
si un cliente va a pagar 500 pesos, y el cajero sin querer coloca 1000 pesos, como se podria deshacer ese proceso, y que los cambios que se realizaron en las tablas vuelvan a estar como antes de haber guardado el proceso.....

espero haberme explicado bien.....agradeciendo de antemano cualquier ayuda que me puedan brindar.

PepeLolo
26-05-2013, 02:01:01
Con translaciones. Rollback deshace todos los cambios realizados desde que se inició esta. Las translaciones en MySql solo están disponibles con el motor inodb

AzidRain
26-05-2013, 18:44:14
En cuanto a programación ya te pusieron una forma, pero creo que más bien te refieres a deshacer una transacción (OJO, no hablo del motor de BD). Lo cual administrativamente es incorrecto y no debe permitirlo tu sistema. Una vez que se finalice cualquier transacción ya no debe haber forma de borrarla. Tienes que hacer una transacción adicional que corrija el error, pero obviamente, esta última operación debe realizarla un usuario diferente (con mayores privilegios) que el usuario original. De manera que al analizar las transacciones en esa caja al terminar el día se puede ver que en efecto un error y que fue corregido por x usuario. Si lo haces como estás pensando no quedaría rastro de error y sería peligroso ya que cualquiera podría "equivocarse" a propósito para realizar algún mal manejo. Y mas hablando de facturación ya que folio tomado debe ser folio utilizado.

donpedro
28-05-2013, 02:58:41
Hola AzidRain tienes mucha razon,,,sin quitarle merito a pepelolo al cual tambien le agradezco,,,, pero me llamo la antencion lo que comentaste AzidRain, he visto en los supermercados que cuando la cajera comete un error o un cliente desea devolver un producto realmente la que realiza ese proceso es la supervisora la cual tiene una llave para cancelar dicho producto......ahora, en mi caso como lo haria, ya que en el modulo de facturacion intervienen 3 tablas: una que lleva la carga de los meses a pagar y donde se hacen los pagos, la otra lleva el acumulativo etc....entonces tendria que actualizar cada tabla y borrar el recibo y/o factura que se genero....

PepeLolo
28-05-2013, 17:57:38
Hola AzidRain tienes mucha razon,,,sin quitarle merito a pepelolo al cual tambien le agradezco,,,, pero me llamo la antencion lo que comentaste AzidRain, he visto en los supermercados que cuando la cajera comete un error o un cliente desea devolver un producto realmente la que realiza ese proceso es la supervisora la cual tiene una llave para cancelar dicho producto......ahora, en mi caso como lo haria, ya que en el modulo de facturacion intervienen 3 tablas: una que lleva la carga de los meses a pagar y donde se hacen los pagos, la otra lleva el acumulativo etc....entonces tendria que actualizar cada tabla y borrar el recibo y/o factura que se genero....

Lo que hace la supervisora, es realizar una venta en negativo del producto asociado al ticket erróneo. Bien por diferencia de precio o por la devolución del producto.

juanelo
28-05-2013, 18:20:46
Lo que hace la supervisora, es realizar una venta en negativo del producto asociado al ticket erróneo. Bien por diferencia de precio o por la devolución del producto.
Y lo "normal" es que el ticket no haya sido terminado y grabado. Esto sucede mientras siguen adicionando items a la nota.

AzidRain
28-05-2013, 18:35:40
Haciendo la analogía. El "ticket" de compra es en realidad una transacción. De hecho el sistema operativo de POS de IBM (que es el que conozco bien) maneja cada transacción como única y genera el ticket a partir de ella. Las operaciones posibles dentro de la transacción son:

* Devolución de producto (cliente ya no lo quiere, cajero marcó doble, no era el artículo,etc.) : El sistema hace una venta negativa en al misma transacción (con llave de supervisor)
* Cambio de precio (precio mal puesto, descuento por daño, etc.): El sistema registra la venta con el precio distinto pero guarda en la transacción el precio original (con llave)
* Abortar la transacción (no le alcanzo el dinero, no pasó su tarjeta, etc.): Aquí si pasa lo mismo que al hacer un rollback. Solo que se requiere llave de supervisor.

Al cerrar la cuenta, que normalmente es cuando se ingresa el total pagado y la forma de pago del cliente la transacción hace commit y queda todo registrado, normalmente es en este momento cuando se debe abrir el cajón de dinero, no antes. Llegado a este punto ya no hay forma de borrar nada ni cambiar nada. Cualquier ajuste se hace en otra transacción, por ejemplo si el cliente ya no quiere un artículo tiene que pedir una devolución que se realiza en otra transacción especial para ello y normalmente en otra caja destinada a ello. Si le cobraron de más o estaba mal el precio, se hace lo mismo: primero se hace una devolución y luego se hace la venta con los precios correctos. En todos los casos las transacciones no pueden borrarse y solo pueden corregirse mediante otra transacción.

Hacerlo de otra forma se puede pero administrativamente no es lo mejor y se pierde no solo el control de los fondos sino de los artículos. Otra cosa. Normalmente los tickets no son facturas, sino que se guardan como notas o simples tickets. Si el cliente quiere factura simplemente se digita el ticket y la factura se genera a partir de él.

donpedro
28-05-2013, 21:52:39
Aqui les cargo la imagen del modulo de facturacion que tiene mi sistema.
https://lh5.googleusercontent.com/-3xCPMkZ-twM/UaUDm1S_OwI/AAAAAAAAAG4/XeCAeAbtob4/w958-h581-no/factura.jpg

en ese modulo se cargan todos los meses, y cuando se va pagando el sistema va restando el monto pagado con los cargos. Lo que hice fue es que al momento de guardar salga un mensaje donde el cajero debe confirmar con el cliente el pago que el esta realizando y si es correcto hacer clic en si para guardar de lo contrario en no, como se muestra en la siguiente imagen.
https://lh6.googleusercontent.com/-WBcDgHI8WB8/UaUEPoJ13jI/AAAAAAAAAHA/y-GO75RzUM0/w958-h589-no/factura2.jpg

ahora en caso de que se cometa un error,, me recomiendan crear un modulo donde solo el administrador tenga acceso, y donde se puedan modificar las tablas que intervienen en dicho proceso de facturacion??????????

Fita
15-06-2013, 19:31:04
Hola donpedro...

También desarrollo software para instituciones educativas y también me he encontrado con el mismo problema.
Lo que yo hago se llama "Reversa de Operaciones" y es simplemente generar el mismo movimiento que generó la cobranza pero invertido en todas las tablas que se ven afectadas.

Con esto se logra que ante una inspeccción quede reflejado:

a) el movimiento de la cobranza
b) el asiento contable que la refleja
c) la "reversa" de la cobranza
d) el asiento contable que refleja la reversa
e) la nueva cobranza cargada correctamente.
f) el asiento contable que refleja la nueva cobranza
.
.
.
además deberías actualizar las cuentas corrientes, movimientos y los saldos de las familias/alumnos/clientes...


Esto es para que te sirva de idea, ya que depende de cómo tengas estructurado tu sistema.

Te mando un cordial saludo
Fita