Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Actualizar Contadores !! (https://www.clubdelphi.com/foros/showthread.php?t=12992)

triniti 03-08-2004 11:35:52

Actualizar Contadores !!
 
Hola! Os explico un poco mi situación:
Estoy haciendo un TPV para una tienda, y en una tabla guardo todos los tickets que se imprimen con números correlativos. Pero si dentro de dos días, borro un ticket, no quiero que ese número se pierda, sino que ha de ser utilizado por el siguiente ticket que se dé de alta.
Es decir, que necesitaría un proceso por el cual todos los tickets tuviesen números correlativos, incluso después de una eliminacion, un proceso de actualización de contador de tickets, teniendo en cuenta que mientras éstos se actualizan, ningún usuario puede acceder a ellos (se bloquearía la tabla durante la actualización).
Si alguién sabe de algún proceso parecido para realizarlo en Delphi u Oracle, que me heche una mano si es posible.

Saludos y gracias anticipadas!! :) :) :)

jachguate 03-08-2004 11:43:55

en oracle, no podes valerte de un trigger after delete, debido a que la tabla estará "mutante".

No me queda claro si lo que queres es reutilizar el número del borrado, o correr todos los siguientes para utilizar siempre el último número.

Supondré el segundo caso, en el cual, desde delphi podes hacer:

Código Delphi [-]

Procedure TForm1.BorrarTicket(Numero : Integer);

Begin
  db1.StartTransaction;
  try
    query1.sql.clear;
    query1.sql.add('delete ticket where numero = :numero');
    query1.ParamByName('numero').AsInteger := Numero;
    query1.execsql;
    query1.sql.clear;
    query1.sql.add('update ticket set numero = numero - 1 where numero > :numero');
    query1.ParamByName('numero').AsInteger := Numero;
    query1.execsql;
    db1.commit;
  except
    db1.rollback;
    raise;
  end;
end;

Esto correrá todos los tickets superiores a número... manteniendo la correlatividad.

Hasta luego.

;)

ruina 03-08-2004 13:00:42

Debes tener en cuenta que los tickets de venta tienen Fecha y, al igual que las facturas, de poco sirve que no tengas huecos si no son correlativos en el tiempo.

vamos que la misma multa te meten por tener un hueco que por rellenarlo de malas maneras

triniti 03-08-2004 13:31:38

Por una cuestión fiscal, supongamos el siguiente ejemplo:
tenemos los siguientes tickets : 1, 2, 3, 4 y deseamos borrar el 3.
Como resultado, deberiamos obtener la siguiente correlación despues del borrado: El ticket 1 seguiria siendo el 1, el ticket 2 seguiria siendo el 2, y el ticket 4 pasaria a ser el 3.

Si no estoy confundida, si aplicamos el procedimiento de JachGuate creo que no nos valdría.

Lo de las fechas lo hemos hablado y no tiene importancia para nuestro caso, solo necesitamos que sea correlativo el número de ticket.

Un saludo!!

triniti 03-08-2004 14:00:42

Ya hemos encontrado la solucion mis compañeros y yo:
como las ventas con su correspondiente ticket se pasan a un histórico al final del dia, y es en el histórico donde interesa la correlación de numeros, grabaremos el número de ticket de forma autonumérica, sumando 1 al nº anterior en cada insert.

Saludos!!

jachguate 03-08-2004 20:42:23

Hola.

Me alegra que ya hayas encontrado una solución... pero:

Cita:

Empezado por triniti
Si no estoy confundida, si aplicamos el procedimiento de JachGuate creo que no nos valdría.

Cita:

Empezado por triniti
El ticket 1 seguiria siendo el 1, el ticket 2 seguiria siendo el 2, y el ticket 4 pasaria a ser el 3.

Es justamente lo que te estoy proponiendo!!!

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 16:45:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi