Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Totalizar campos. (https://www.clubdelphi.com/foros/showthread.php?t=91982)

GINMARMENOR 18-06-2017 20:41:47

Totalizar campos.
 
Hola, tengo que llevar al día el stock actual de cada artículo en un almacen, hay compras y ventas lógicamente, o entradas y salidas con lo que el saldo actual va variando, pongamos por ejemplo que el artículo lo llamamos "Mesas", para sabe el número de mesas que tengo en cada momento, cómo sería el procedimiento más sencillo, crear un campo en la tabla donde llamado "Stock Actual", donde vaya sumando las compras y restando las ventas" en ese campo, o no sería necesario crear ese campo, podría hacerlo de otro modo más directo y sencillo.

Gracias.

Casimiro Notevi 18-06-2017 20:58:05

Claro, un campo "stock" que aumente o disminuye, según compres o vendas.

GINMARMENOR 18-06-2017 23:33:49

Pensaba que era más seguro, que se totalizaran todas las compras de ese articulo, y por otro lado totalizar todas las ventas, y hacer la diferencia, ya que si por ejemplo hay que modificar o anular una compra por algún motivo, hay que tener en cuenta de modificar el campo stock nuevamente por la diferencia.

Casimiro Notevi 19-06-2017 01:57:15

Tu pregunta ha sido muy genérica, así que la respuesta ha debido de ser muy genérica :)

Lo normal no es que lo hagas tú "directamente", sino tener un trigger en la base de datos que se encargue de ello cuando compres o vendas.

oscarac 19-06-2017 16:54:44

pienso que hay muchas maneras de hacerlo, lo que yo hago es similar a lo que mencionas, tener ingresos y salidas separados luego hacer la operacion matematica teniendo en consideración los saldos del mes anterior (podrias tener un proceso de cierre de mes donde se acumulen los saldos), aunque hacerlo en linea se ve mas profesional, seria cuestion de que evalues de acuerdo a tus necesidades.
saludos

Neftali [Germán.Estévez] 20-06-2017 16:18:54

Cita:

Empezado por GINMARMENOR (Mensaje 518338)
Pensaba que era más seguro, que se totalizaran todas las compras de ese articulo, y por otro lado totalizar todas las ventas, y hacer la diferencia, ya que si por ejemplo hay que modificar o anular una compra por algún motivo, hay que tener en cuenta de modificar el campo stock nuevamente por la diferencia.

No es una mala idea inicial y a priori parece lo mejor.
El problema es que en la práctica luego esa operación (dependiendo del volumen) se vuelve tremendamente ineficiente, porque en muchos sitios hay que tener el stock de cada artículo y no puedes permitirte calcularlo en el momento.

Luego las cosas se complicas cuando haces inventarios, parciales, totales,...

Cita:

Empezado por Casimiro Notevi (Mensaje 518339)
Lo normal no es que lo hagas tú "directamente", sino tener un trigger en la base de datos que se encargue de ello cuando compres o vendas.

En la práctica la solcuión que siempre he visto es la que comenta Casimniro. Un campo que se mantiene y se actualiza con todas las operaciones que haces sobre artículos.

movorack 20-06-2017 17:14:39

Se puede manejar en un campo de la tabla donde vayas llevando los movimientos, una vista que se encargue de este calculo o puede ser un valor calculado por una función. Todo depende de la estructura de tu sistema y el manejo que le quieras dar.

Creería que hacer el calculo de stock antes de una venta en caja es consumir recursos innecesariamente. Si el articulo lo tenemos en caja, la venta hay que hacerla aunque (Aveces por fallas en el sistema o de digitación) el calculo de stock diga que no hay existencias.

Si no es una venta en caja, Algo mas como una cotización, este calculo puede servirte para verificar si se debe hacer pedidos a proveedor.

A la final: No hay nada escrito que sea una verdad absoluta de como manejar esto. Todo depende de la estructura de tu sistema y como quieres manejarlo-

GINMARMENOR 21-06-2017 00:16:18

Gracias por las respuestas, lo cierto es que grandes movimientos por artículo no tengo unos 100 movimientos por año, necesito saber los stock de ese artículo en el momento de consumirlo o de venderlo y cuando supere un mínimo avisarme con un mensaje de que nos queda poco stock de ese artículo que esto último no tiene mayor complicación, pero nada de inventarios parciales.

Lo del Trigger no lo había escuchado nunca, si tenéis un ejemplo os lo agradecería, o buscaré por internet.

Gracias.

Casimiro Notevi 21-06-2017 00:22:58

Cita:

Empezado por GINMARMENOR (Mensaje 518468)
Lo del Trigger no lo había escuchado nunca, si tenéis un ejemplo os lo agradecería, o buscaré por internet.

Utilizar bases de datos sql sin conocer trigger, dominio, stored procedure, etc. es como comprarse un Ferrari para ir a comprar el pan.
Lee este libro, es de lo mejor para usar delphi con bases de datos relacionales.

GINMARMENOR 21-06-2017 00:57:45

Mira que he leído libros de delphi, mira que he hecho bases relacionales, mira que he hecho listado complejos con Qckip Report con Rave Report, mira que he hecho procedimientos, mira que he hecho funciones, mira que he hecho funciones con parámetros valor y de referencia, mira que trabajo con SQL hago cualquier informe por muy complejo que sea, todo me ha funcionado bien, pero qué casualidad TRIGGER no lo he visto en ningún libro.

Pero también mira que casualidad te vas a una tienda de pacotilla de la coruña y sabe el stockaje de un artículo que hay en la tienda de la pedanía más pequeña de Almeria de ese mismo artículo, creo que mi duda para un Ferrari como es Delphi debería estar resuelto como sumar 2 + 2 para un Universitario, posiblemente no usa delphi.

Casimiro Notevi 21-06-2017 01:16:40

Cita:

Empezado por GINMARMENOR (Mensaje 518472)
Mira que he leído libros de delphi, mira que he hecho bases relacionales, mira que he hecho listado complejos con Qckip Report con Rave Report, mira que he hecho procedimientos, mira que he hecho funciones, mira que he hecho funciones con parámetros valor y de referencia, mira que trabajo con SQL hago cualquier informe por muy complejo que sea, todo me ha funcionado bien, pero qué casualidad TRIGGER no lo he visto en ningún libro.

Será porque no has leido ningún libro sobre el tema :rolleyes:

Cita:

Empezado por GINMARMENOR (Mensaje 518472)
Pero también mira que casualidad te vas a una tienda de pacotilla de la coruña y sabe el stockaje de un artículo que hay en la tienda de la pedanía más pequeña de Almeria de ese mismo artículo, creo que mi duda para un Ferrari como es Delphi debería estar resuelto como sumar 2 + 2 para un Universitario, posiblemente no usa delphi.

Tú mismo ;), pero esto no tiene nada que ver con delphi, sino con bases de datos (RDBMS).

PD: Y por cierto, el consejo del libro es con toda la buena intención del mundo, y más en este caso, en que Ian Marteens (el autor) trata de forma muy divertida y amena, con ejemplos sencillos, la técnica de trabajar con bases de datos relacionales: interbase, firebird, mysql, postgresql, mssql, oracle, etc.

Neftali [Germán.Estévez] 21-06-2017 09:59:14

Digamos que los triggers no es una cosa básica de SQL, no es lo primero que se lee o se estudia, pero si que es algio fundamental en cuanto haces cosas serias con una Base de Datos (SGBD) algo seria, por eso es extraño que si has trabajado con ellas no hayas oido hablar.

Es algo como las transacciones. No es lo que se lee/estudia el primer día, pero es algo obligatorio para cualquier Base de Datos.

Digamos que justo el caso que planteas (el del stock o inventarios) es uno que se ajusta mucho a usar triggers.

Si asumimos, tal y como se dijo antes, vas a crear un campo en la tabla de artículo que te mantenga actualizado el stock de ese artículo hay 2 posibilidades:

1) Enfocar el prigrama desde Delphi (o desde el programa). Debes asegurarte de que cualquier operación que hagas sobre el artículo actualiza el stock. Significa tener eso en cuenta en varias partes del programa y usar transacciones (si o si). Para evitar por ejemplo, que se guarde una venta y por algún error no se actualice el stock.

2) La segunda opción es enfocarlo desde la Base de Datos. La Base de Datos te da la posibilidad de programar una acción cada vez que haces un INSERT, un DELETE o un UPDATE sobre una tabla. La idea es programar esas operaciones en la tabla de VENTAS y COMPRAS para que actualizen el stock. De esta forma desde cualquier lugar donde se modifiquen las ventas (sea desde el programa, desde un Stored procedure, desde una importacion,...) se actualizarán los artículos.

La idea de los triggers es así de sencilla, tal vez sea un poco más complicado programarlos, pero si has trabajado con Stored Procedures te resultará parecido.

Si miras en la wiki, verás que la explicación es sencilla, es más acabo de ver que el ejemplo que viene en la WIKI es justo de actualizar el stock. ;-)
https://es.wikipedia.org/wiki/Trigger_(base_de_datos)



La franja horaria es GMT +2. Ahora son las 14:24:14.

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