Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Como puedo calcular Stock ...

Hola estimados y estimadas.....estoy trabajando en una pequeña aplicación que controle altas y bajas en una bodega , las altas y bajas funcionan bien, pero el problema lo tengo para calcular el stock de un producto.....pensaba en un select anidado pero no se si sirve para esto...

Tengo estas tablas

Ingreso
Codigo
Codenvase
Cantidad
Fecha

Egreso
Codigo
CodEnvase
Cantidad
Fecha

Envase
Codigo
Nombre

En la tabla ingresos tengo los movimientos de ingreso que voy haciendo cada vez que llega un producto y en la tabla egreso cargo las salidas de cada producto.....entonces mi consulta apunta mas menos , a poder calcular el stock de cada producto y mostrarlo en una grid, para esto tengo una query pero todavia no he llegado a que debo ingresar en la SQL.....

Agradezco alguna info.

Gracias.
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #2  
Antiguo 07-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Asi de memoria por que no tengo ganas.
Código SQL [-]
Select (sum(Ingreso.Cantidad)-Sum(Egreso.Cantidad)) as Stock From Ingreso, Egreso where Ingreso.codigo = :Cod.
No se si los parentesis estan bien o todo.
Tal vez le falta algun join y group by para hacer la suma.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 07-10-2010 a las 01:40:55.
Responder Con Cita
  #3  
Antiguo 07-10-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 22
AzidRain Va camino a la fama
Me parece que el stock no se calcula: El stock es el mínimo que debes de tener de cada producto para no caer ni en faltantes ni en sobrantes. Ahora bien si lo que quieres es saber la existencia (cuantas piezas tienes) te puede servir lo que puso Caral, pero repito Stock<>Existencia o en inglés "Stock<>OnHand"
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 07-10-2010
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 20
luisgutierrezb Va por buen camino
bueno, al menos en mi región del norte de México stock equivale a existencia, nada mas como comentario
Responder Con Cita
  #5  
Antiguo 07-10-2010
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: 23
José Luis Garcí Va camino a la fama
Veamos como te comentan varios Compañeros, el Stock, se mantiene con la entrade de remesas (lo aumenta) y las salidas, por ventas, roturas, etc (lo disminuye), las otras opciones del stock son stock minímos (para que te avise para nuevas compras/produciones) y stock máximo (para evitar saturación de una mercancía), de hay puedes sacar el diferencial del Stock.

Por otro lado compañero, te recuerdo que si estas programando para una empresa española, la obligatoriedad del control de trazabilidad y recursividad (realmente són los mismo), sobre todo para productos de industria alimentaria y empresas de producción, al cliente carecer de estos sistemas, el deparatmento oportuno del gobierno, puede proceder desde la sanción economica al cierre temporal de la empresa hasta que tenga el sistema en activo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 07-10-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
Cita:
Empezado por José Luis Garcí Ver Mensaje
Veamos como te comentan varios Compañeros, el Stock, se mantiene con la entrade de remesas (lo aumenta) y las salidas, por ventas, roturas, etc (lo disminuye), las otras opciones del stock son stock minímos (para que te avise para nuevas compras/produciones) y stock máximo (para evitar saturación de una mercancía), de hay puedes sacar el diferencial del Stock.

Por otro lado compañero, te recuerdo que si estas programando para una empresa española, la obligatoriedad del control de trazabilidad y recursividad (realmente són los mismo), sobre todo para productos de industria alimentaria y empresas de producción, al cliente carecer de estos sistemas, el deparatmento oportuno del gobierno, puede proceder desde la sanción economica al cierre temporal de la empresa hasta que tenga el sistema en activo.
No se puede explicar mejor en menos palabras.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Smile

Compañeros, este programa lo estoy haciendo para una empresa Chilena, y como mencionan por ahí efectivamente el stock al que hago referencia es la existencia de un determinado producto....voy a probar con la idea de Caral a ver como me va.....no sabia que se podía hacer eso directamente así.....gracias.... les cuento luego....
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #8  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Estimados, la sentencia que me facilito caral, efectivamente me devuelve el stock , solo que para un código, estoy intentando adaptar esto para que pueda obtener la existencia de todos los productos ....y va mas o menos asi... pero al hacerlo de esta manera pierdo siempre el valor anterior... que será mejor.... realizar una tabla temporal donde colocar los datos a medida que los calculo??......una ayudita, gracias.....

Código Delphi [-]
while not dm1.TBLEnvases.eof do 
Begin 
dm1.Qtemp.SQL.clear;  
cadena := 'Select (sum(Ingre.Cantidad)-Sum(Egresos.Cantidad)) as Stock,ingre.codenvases From Ingre, Egresos where ingre.codenvases=' +  dm1.TBLEnvases.FieldByName('codigo').AsString ;  
dm1.Qtemp.SQL.Text := cadena; 
dm1.Qtemp.open; 
vartext1  := dm1.Qtemp.FieldByName('Stock').AsString; end;
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #9  
Antiguo 07-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Quitale el where que es el que define y te dara la suma de todos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Hola Caral, buenos dias, mira lo que sucede es que al quitarle el where (que ya acabo de probar) me da efectivamente el total pero como total general, o sea un resultado, pero yo lo que necesito obtener es el resultado para cada producto .....o sea por ejemplo....

Cajas tipo 1 1500
Cajas tipo 2 8000
Bolsas tipo 1 2000
etc...

Por eso he intentado el While pero pierdo el dato anterior.....
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #11  
Antiguo 07-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Que Base de datos usas?
Lo comento por que necesitas un DISTINCT, pero en algunas BD funciona y en otras hay que recurrir a max o min.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Estoy trabajando con Interbase 6.5, he ocupado alguna vez el disctint.....saludos
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #13  
Antiguo 07-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Intenta asi:
Código Delphi [-]
while not dm1.TBLEnvases.eof do
Begin
dm1.Qtemp.SQL.clear;
dm1.Qtemp.SQL.Text := 'Select DISTINCT ingre.codenvases, (sum(Ingre.Cantidad)-Sum(Egresos.Cantidad)) as Stock, '+
                 ' From Ingre, Egresos where ingre.codenvases = Egresos.codenvases '+
                 ' and ingre.codenvases = ' +  dm1.TBLEnvases.FieldByName('codigo').AsString ;
dm1.Qtemp.open;
vartext1  := dm1.Qtemp.FieldByName('Stock').AsString; end;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #14  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Hola, disculpa la molestia nuevamente, he intentado con el ultimo codigo que has colocado y me arroja un error "INVALID COLUMN REFERENCE", he revisado los campos y son los adecuados y las tablas tambien....

Código Delphi [-]
procedure TFstock.FormShow(Sender: TObject); 
var cadena,vartext1 : string; 
begin 
while not dm1.TBLEnvases.eof do 
Begin dm1.Qtemp.SQL.clear; 
dm1.Qtemp.SQL.Text := 'Select DISTINCT ingre.codenvases, (sum(Ingre.Cantidad)-Sum(Egresos.Cantidad)) as Stock '+ 
      ' From Ingre, Egresos where ingre.codenvases = Egresos.codenvases '+ 
      ' and ingre.codenvases = ' +  dm1.TBLEnvases.FieldByName('codigo').AsString ; 
dm1.Qtemp.open; 
end; 
end;

gracias....
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #15  
Antiguo 07-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Es que como no tengo nada de lo que tu tienes a la mano solo puedo creer que dara resultado.
Prueba quitando cosas:
Código Delphi [-]
procedure TFstock.FormShow(Sender: TObject); 
var cadena,vartext1 : string; 
begin 
while not dm1.TBLEnvases.eof do 
Begin dm1.Qtemp.SQL.clear; 
dm1.Qtemp.SQL.Text := 'Select DISTINCT ingre.codenvases, (sum(Ingre.Cantidad)-Sum(Egresos.Cantidad)) as Stock '+ 
      ' From Ingre, Egresos where ingre.codenvases = ' +  dm1.TBLEnvases.FieldByName('codigo').AsString ; 
dm1.Qtemp.open; 
end; 
end;
o asi:
Código Delphi [-]
procedure TFstock.FormShow(Sender: TObject); 
var cadena,vartext1 : string; 
begin 
while not dm1.TBLEnvases.eof do 
Begin dm1.Qtemp.SQL.clear; 
dm1.Qtemp.SQL.Text := 'Select DISTINCT (sum(Ingre.Cantidad)-Sum(Egresos.Cantidad)) as Stock , ingre.codenvases '+ 
      ' From Ingre, Egresos where ingre.codenvases = ' +  dm1.TBLEnvases.FieldByName('codigo').AsString ; 
dm1.Qtemp.open; 
end; 
end;
Solo puedo imaginar lo que sucede.
Saludos
PD: Ademas no le puedes pedir mucho a este Novato, que esta para aprender.
__________________
Siempre Novato
Responder Con Cita
  #16  
Antiguo 07-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Hola, Caral.... voy a probar los cambios que tan amablemente has expuesto aquí.... oye y en lo referente a lo de novato.....guau....ya me gustaría ser un novato con tantos conocimientos.....muchísimos saludos y gracias.....ahí me conecto y cuento como va el tema.....
__________________
[Lo que a veces es tan facil, a veces parece imposible]

Última edición por ilichhernandez fecha: 07-10-2010 a las 22:56:37.
Responder Con Cita
  #17  
Antiguo 08-10-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
Espero que te oriente
Código SQL [-]
SELECT CODIGOARTICULO, SUM(CAMPO1)-SUM(CAMPO2) AS STOCK
WHERE
 [LAS CONDICIONES QUE TU QUIERAS]
GROUP BY CODIGOARTICULO
 [OPCIONAL]
HAVING SUM(CAMPO1)-SUM(CAMPO2) > 10

En el Group By siempre los campos que no aparezcan con una función de agregado SUM, AVERAGE, MIN, MAX, ...
En cualquier manual de SQL podrás encontrar ejemplos.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #18  
Antiguo 08-10-2010
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 20
ilichhernandez Va por buen camino
Hola, bueno gracias a todos por el tiempo y las dudas que han resuelto,les cuento que al final este tema no me ha funcionado tan bien como debía asi que opté por una solución distinta..... una tabla temporal que almacena los valores de existencias y esta la despliego en la grid que quiero mostrar.....

Saludos
__________________
[Lo que a veces es tan facil, a veces parece imposible]

Última edición por ilichhernandez fecha: 08-10-2010 a las 18:53:08.
Responder Con Cita
  #19  
Antiguo 08-10-2010
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: 23
José Luis Garcí Va camino a la fama
yo prácticamente soy nuevo con Sql y firebird, pero si pones la base de datos con unos cuantos datos, te podemos montar un ejemplo completo de como tendrías que hacerlo, o por lo menos la estructura de tu tabla, rendirse es muchas veces complicar, las cosas, para que te hagas una idea, en un apartado de control de trazabilidad, le doy al usuario la posibilidad de hacer una consulta, con los datos que necesita, y solo tiene que hacer unos clicks y rellenar un edit, si te interesa el miércoles cuando este en el trabajo te envió una imagen y el código para que se genera al pulsar en consulta.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
como puedo calcular un sueldo, que no sea mayor que x cantidad esimon OOP 3 27-10-2008 21:28:35
Como puedo Calcular el RFC ebreton31 Varios 1 04-11-2006 03:49:44
Actualizar Stock BlueSteel Firebird e Interbase 6 28-09-2006 01:14:56
Stock Limitante soloriv SQL 5 03-06-2006 21:59:50
stock general ELINK SQL 5 29-03-2005 18:58:00


La franja horaria es GMT +2. Ahora son las 20:01: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
Copyright 1996-2007 Club Delphi