Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Usar un solo procedimiento almacendado para restar o sumar valores a un mismo registro (https://www.clubdelphi.com/foros/showthread.php?t=80796)

Chogo 08-05-2007 22:07:19

Usar un solo procedimiento almacendado para restar o sumar valores a un mismo registro
 

Muy a menudo hacemos aplicaciones (desktop o que soporte multiusuarios) que tengan que actualizar una columna de saldo en una tabla de proveedores o clientes. También puede ser el caso de actualizar la existencia de un producto en el inventario.

Por ejemplo hay transacciones (Compra al crédito) que puede aumentar el saldo del proveedor o puede haber una transacción (un pago al proveedor) que disminuya el saldo del proveedor.

La mejor manera de hacer esto es por medio de procedimientos almacenados.

Yo en lo personal hacia un procedimiento que actualizara el saldo. Pero antes tenia saber como quedaría el saldo después de la transacción. Ya sea que aumentara o disminuyera dependiendo de la transacción.

Así que tenia que hacer un procedimiento en delphi, que decidiera dependiendo de la transacción, si debía aumentar o disminuir el saldo. Por fuerza tiene que haber una condición if para lograr esto. Pero con este truco ya no es necesario una sentencia if. Basta con solo enviar el monto de la transacción en forma negativa o positiva. Aprovechando la ley de los signos en aritmética.

Por ejemplo tenemos una columna Saldo de la tabla proveedores y vamos aplicarle un abono al saldo del proveedor. Al final de la transacción el saldo será menos. Con la siguiente sentencia logro esto. La sentencia tiene dos parámetros, uno es el monto que se aumentara o disminuirá el saldo y el otro el numero del proveedor para localizarlo.

UPDATE proveedores SET proveedores.Saldo = proveedores.saldo+[Monto]
WHERE (((proveedores.registro)=[xRegistro]));


El truco esta en mandar el parámetro del monto como negativo si queremos disminuir y como positivo si queremos aumentarlo. Así nos ahorramos código y la aplicación es mucho mas rápida.

waly2k1 09-05-2007 18:16:00

Y en el preocedimiento preguntas si es una nota de credito o debito?. O asumes que es siempre una factura y tienes un Stored para cada proceso?. Pensalo.

Chogo 11-05-2007 18:39:01

Es el mismo procedimiento para ambos casos, solo que lo llamo desde una funcion y este tiene un parametro integer, que si es una nota de credito es igual a 1 y si es un debito es igual a -1. es parametro lo multiplico por el monto de la transacción.


La franja horaria es GMT +2. Ahora son las 07:06:48.

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