Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Control Stock Simple (https://www.clubdelphi.com/foros/showthread.php?t=85469)

mantraxer21 21-03-2014 05:41:34

Control Stock Simple
 
Estimados,

Estoy en un proceso con Delphi + Firebird sobre el proceso de Aumento o Disminución de 1 o más productos.

Ejemplo:

Prestamos:
- Se solicita 1,2 o 3 item de determinados productos (sólo 1 x producto), por ende al momento de gestionar el préstamo, entonces disminuir el stock de esos productos... y cuando se "devuelven" , entonces se aumenta (Proceso de Biblioteca)

Tabla Prestamos: en resumen
(IDPrestamo)
Fecha
(IDUsuario)
IDMaterial
FechaDevolucion

Tabla Materiales
: en resumen
(IDMateriales)
Nombre_Material
Cantidad
Fecha_Compra

Hasta el momento el proceso de "Guardar" está funcionando bien, creo que al momento de hacer un POST a la tabla Prestamos; entonces debemos actualizar el stock (cantidad) de la tabla Materiales de él o los productos seleccionados.

Alguna idea o ayuda?

José Luis Garcí 21-03-2014 09:14:13

-Siempre que hablamos de stock, el proceso es básicamente el mismo, lo primero que tenemos que saber es si trabajamos con Stock activos o no, si el stock es activo, quiere decir que podemos tener cantidades en negativo, que serán cubiertas con nuevas compras (si he entendido se trata de una biblioteca, no seria el caso), si no es activo entonces no podemos sacar si no queda, aclarado este punto, vemos la teoría de los procesos.

Como digo si el caso es una biblioteca
Salidas
Tendríamos que apuntar en la tabla de prestamos, a quien se le ha prestado, el libro que es, la fecha, daríamos a guardar y antes de la transición, entraríamos en la de libros y marcaríamos activo como no (si fueran otros artículos, tendríamos una tabla de stock de donde descontaríamos las unidades de existencias)

Entradas
Apuntaríamos la devolución del libro en la tabla de prestamos junto con la fecha y antes de la transición iríamos a la tabla de libros y pasaríamos activo a Si (si fuese otros artículos deberíamos sumar las unidades a existencia)

Un pequeño detalle a tener en cuenta es cuando tenemos una tabla de stock, pero de artículos con lotes, es que aparte de las existencias, debemos tener dos campos más que son el número de lote y si esta activo, en estos casos el lote nunca varia, pero el activo si y hay que hacerlo de la siguiente manera
Salidas (ejemplo 5 unidades y 7 unidades de dos lotes diferentes existencias del primer lote 10 y del segundo 7) se haría de la siguiente manera
Primer lote >existencias 5 (10-5) Activo S
Segundo lote> existencias 0 (7-7) Activo N

Una devolución,siguiendo con el ejemplo anterior devolveríamos 2 y 2
Primer lote> Existencias 4 (2+2) Activo S
Segundo Lote> Existencias 2 (0+2) Activo S

La importancia del stock en el caso de los lotes, es total ya que de ello dependerá la trazabilidad (cuando damos salida) y la recursividad (cuando damos una devolución) y el alta(cuando damos una entrada a un lote nuevo o añadimos a un lote existente nuevas unidades), claro, cuando hablamos de miles de artículos la cosa se pone delicada, pero además si de cada artículo, con el tiempo podemos tener decenas, cientos o miles de lotes, la tabla se vuelve engorrosa, por ello lo mejor es cada año, hacer una copia de seguridad, guardarla y dar de baja a todos los datos con más de tres años de antigüedad.

Como digo, si no te he entendido mal, lo que tu pides es como un vídeo club, donde no existe un stock real, sólo quieres indicar si el libro esta en disposición para ser prestado o ya esta prestado.

newtron 21-03-2014 09:51:09

Yo creo que lo que está pidiendo es bastante más simple y a mi no me mola liar las cosas más de lo conveniente.

Para los requerimientos que tiene efectivamente al hacer el post de la tabla "Idprestamo" debería restar una unidad al campo "cantidad" de la tabla "IdMateriales" y a la inversa cuando se efectúe el proceso de devolución. Lo ideal de esto es que para no tener problemas este proceso lo ejecutara un "trigger" de la base de datos que se encargara de forma automática de hacer esas operaciones en el momento de actualizar la tabla "IdPrestamo".

Saludos

José Luis Garcí 21-03-2014 09:57:05

De hecho yo cambiaría tu tabla de

Cita:

Tabla Materiales: en resumen
(IDMateriales)
Nombre_Material
Cantidad
Fecha_Compra
a

Cita:

Tabla Materiales: en resumen
(IDMateriales)
Nombre_Material
Prestado (char 1 sólo S o N)
Fecha_Compra
y lo que haría en el caso de prestamos más o menos el siguiente código

Código Delphi [-]
     //Hacemos el después de las comprobaciones Post de la tabla de prestamos
     if ibdMateriales.locate('ID',DsPrestamos.dataset.fieldbyname('IDMaterial').value,[lopartialkey, locasesensitive]) then
     begin
          ibdMAteriales.edit
          ibdMaterialesPRESTADO.value:='S';
           ibdMAteriales.Post;
     end;
     IBT.CommitRetaining;


En el caso de la devolución

Código Delphi [-]
     //Hacemos el después de las comprobaciones (la fecha de devolución y demás Post de la tabla de prestamos
     if ibdMateriales.locate('ID',DsPrestamos.dataset.fieldbyname('IDMaterial').value,[lopartialkey, locasesensitive]) then
     begin
          ibdMAteriales.edit
          ibdMaterialesPRESTADO.value:='N';
           ibdMAteriales.Post;
     end;
     IBT.CommitRetaining;

Espero te ayude mejor, pero recuerda esto sólo es valido, para prestamos y por artículos unitarios.

José Luis Garcí 21-03-2014 10:18:39

Se me olvidaba, si tu tabla de materiales tiene muchos registros, mejor haz una consulta SQL, directamente sobre el ibdataset

shoulder 21-03-2014 16:53:02

Stock
 
Acordate tambien.. me paso a mi, que tendrias que hacer el sistema con TRANSACCIONES porque sino dos personas piden el mismo stock en el mismo momento y te comienza a fallar el Sistema y te da cualquier cosa despues.

newtron 21-03-2014 19:47:25

Cita:

Empezado por José Luis Garcí (Mensaje 474129)
De hecho yo cambiaría tu tabla de



a



y lo que haría en el caso de prestamos más o menos el siguiente código

Código Delphi [-] //Hacemos el después de las comprobaciones Post de la tabla de prestamos if ibdMateriales.locate('ID',DsPrestamos.dataset.fieldbyname('IDMaterial').value,[lopartialkey, locasesensitive]) then begin ibdMAteriales.edit ibdMaterialesPRESTADO.value:='S'; ibdMAteriales.Post; end; IBT.CommitRetaining;



En el caso de la devolución

Código Delphi [-] //Hacemos el después de las comprobaciones (la fecha de devolución y demás Post de la tabla de prestamos if ibdMateriales.locate('ID',DsPrestamos.dataset.fieldbyname('IDMaterial').value,[lopartialkey, locasesensitive]) then begin ibdMAteriales.edit ibdMaterialesPRESTADO.value:='N'; ibdMAteriales.Post; end; IBT.CommitRetaining;


Espero te ayude mejor, pero recuerda esto sólo es valido, para prestamos y por artículos unitarios.

Yo esa opción no la usaría porque imagino que se dará la posibilidad de tener varios libros iguales con lo que tendrían que tener un pequeño control de existencias, es mejor mantener un número.

Saludos

José Luis Garcí 21-03-2014 22:20:06

Cita:

Empezado por newtron (Mensaje 474161)
Yo esa opción no la usaría porque imagino que se dará la posibilidad de tener varios libros iguales con lo que tendrían que tener un pequeño control de existencias, es mejor mantener un número.

Saludos

Si Newtron, yo normalmente no la usaria, lo que pasa es que giandome en el mensje original donde pone

"Se solicita 1,2 o 3 item de determinados productos (sólo 1 x producto), por ende al momento de gestionar el préstamo, entonces disminuir el stock de esos productos... y cuando se "devuelven" , entonces se aumenta (Proceso de Biblioteca)"


es por lo que entiendo esta opción es más eficaz, siempre y cuando este sea el caso, claro.


La franja horaria es GMT +2. Ahora son las 18:43:51.

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