Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2014
mantraxer21 mantraxer21 is offline
Miembro
 
Registrado: ago 2010
Posts: 94
Poder: 14
mantraxer21 Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
-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.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #3  
Antiguo 21-03-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.461
Poder: 20
newtron Va camino a la fama
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
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
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.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #5  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Se me olvidaba, si tu tabla de materiales tiene muchos registros, mejor haz una consulta SQL, directamente sobre el ibdataset
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 21-03-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 21-03-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.461
Poder: 20
newtron Va camino a la fama
Cita:
Empezado por José Luis Garcí Ver Mensaje
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
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Cita:
Empezado por newtron Ver Mensaje
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.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Control de Stock y Precios de Ventas cmm07 Varios 6 14-01-2012 03:32:29
control de stock en delphi ingmichel Varios 5 01-08-2007 23:54:40
Control de stock por almacenes. Producto77 SQL 29 26-02-2007 15:51:30
stock general ELINK SQL 5 29-03-2005 17:58:00


La franja horaria es GMT +2. Ahora son las 13:58:41.


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
Copyright 1996-2007 Club Delphi