SQL Server - Stored Procedure no devuelve datos correctos al calcular stock

 
Vista:
sin imagen de perfil

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Alan (5 intervenciones) el 26/06/2014 04:39:22
Hola, me encuentro aprendiendo Visual Basic.Net y SQL Server y estoy teniendo problemas para realizar un cálculo en un procedimiento almacenado.

En DetalleInventario ingresan cantidades enteras (por ejemplo, 1 lata de 5 litros de pintura)

Tengo las siguientes tablas:
DetalleInventario de la siguiente forma:


Y mediante un formulario, le agregué 2 guías con el mismo producto (para que realice la suma)


Luego tengo la tabla DetalleSalidaInventario a la cual mediante otro formulario, le agregué el consumo del mismo producto con decimales. (El consumo puede ser en mililitros)


Aquí como queda el registro del consumo en mililitros (0.500 ml)



Aquí mi procedimiento almacenado:


Y este es el resultado de la consulta. No sé por qué calcula mal.


Agradezco sus respuestas.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 26/06/2014 20:14:38
Que no te das cuenta que estás sumando peso y restando unidades de entrada?, por allí debe estar tu problema

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Alan (5 intervenciones) el 26/06/2014 20:19:38
Hola, lo que sucede, es que trabajo con "Peso_Especifico_GR" (obviando el GR de gramos).

Como aquí se consume a granel, se ingresa el total de litros o gramos (dependiendo del producto) en unidades y en peso_especifico_gr se agrega el total.

Por ejemplo, un envase de 5 litros, ingresa 1 envase = 5 litros (Peso_Especifico_GR)
El consumo es 0.350 ml

Deseo calcular esa resta...y como comento, cuando es 1 documento, sale sin problemas, la cosa es cuando son 2 documentos...

No sé si se entendió.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Alan (5 intervenciones) el 26/06/2014 23:39:01
Por si alguien necesita, me ayudaron con el código. Tuve que crear una tabla "Resultados". Sale sin el campo "Descripción" (del producto)...pero funciona :)

ALTER PROC SP_CONSULTAR_STOCK_POR_ALMACEN
@IDALMACEN NCHAR(2)
AS
BEGIN
TRUNCATE TABLE Resultados
--- Se Declare el Cursor
DECLARE C1 CURSOR FOR
SELECT idProducto,SUM(peso_especifico_gr) FROM DetalleInventario WHERE idAlmacen=@IDALMACEN GROUP BY idProducto

--- Select con los campos que necesitas
OPEN C1 --- se abre el cursor

--- Variables para recibir los valores del select
DECLARE @IdProducto varchar(10)
DECLARE @CantEntrante decimal(9, 3)
DECLARE @CantSaliente decimal(9, 3)

--- Se cargan los valores del cursor en las variables
FETCH NEXT FROM C1 INTO @IdProducto,@CantEntrante
WHILE(@@FETCH_STATUS=0)
BEGIN
SET @CantSaliente = (SELECT SUM(Consumo) FROM DetalleSalidaInventario WHERE idProducto=@IdProducto)
INSERT INTO Resultados(idalmacen,idproducto,Stock) VALUES (@IDALMACEN,@IdProducto,@CantEntrante - ISNULL(@CantSaliente,0))
FETCH NEXT FROM C1 INTO @IdProducto,@CantEntrante
--- se pasa al siguiente record del cursor
END
CLOSE C1
DEALLOCATE C1
SELECT * FROM Resultados
END
GO

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 27/06/2014 08:30:33
La peor solución que puede adoptar es la de un cursor, para algo tan simple, si alguien te dio el código y te funciona pues ya saliste del apuro, pero sabes realmente las consecuencias y el costo de un cursor?. Pregunta a quien quieras si es que sabe de SQL Server porsupuesto haber si la mejor solución es un cursor.

Tu store no le veo nada complicado mas que una linea que hace un select sum eso es todo y para eso necesitas un cursor?.

Replantea tu solución

SAludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Alan (5 intervenciones) el 27/06/2014 15:00:59
Sí pues, según me dicen, es como matar una mosca con una bazuka. Que consume recursos en extremo.
Así que estoy viendo cómo hacerla de otra forma más simple sin tanta complicidad.

Igualmente que a un futuro traería problemas.

En fin, se aprende algo todos los días.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 27/06/2014 20:58:05
Mira

Si fueras mas específico en tu consulta, podrás enviarme tu BD zipeada indicando que es lo que quieres exactamente te podría ayudar, pero así estamos adivinando y haciendo conjeturas fuera de lugar.

Sería diferente si dijeras Señores necesito lo siguiente: Obtener el Stock actual que se obtiene de sumar las entradas menos las salidas, pues es simple, no se porque te haces problemas.

Cuando uno no sabe lo que quiere, entonces no sabe que cosa pedir, y si no sabes lo que estás haciendo tampoco sabrás como pedir ayuda porque no sabes realmente lo que estás haciendo y lo que necesitas.

Tu problema se resuelve con una simple suma y resta.

Si te ingresan 100 litros de aceite entonces tienes en stock 100 litros
Luego tienes una salida de 360 ml tenemos que 100 litros menos 0.360ml= 99.640 litros

Donde está lo complicado del asunto?.

Y eso lo puedes hacer con un sum(entradas)- sum(salidas)

Hay varias maneras de atacar un problema de ese tipo.

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por Alan (5 intervenciones) el 03/07/2014 22:47:07
Por si a alguien le sirve, lo hice de la forma "normal".

ALTER PROC SP_CONSULTAR_STOCK_POR_ALMACEN
@IDALMACEN NCHAR(2)
AS
BEGIN
SELECT PRODUCTO.IDPRODUCTO AS 'COD. DEL PRODUCTO', PRODUCTO.DESCRIPCION AS 'DESCR. PRODUCTO',
STOCK=(SELECT CASE WHEN SUM(PESO_ESPECIFICO_GR)<>0 THEN SUM(PESO_ESPECIFICO_GR)
END FROM DETALLEINVENTARIO WHERE IDALMACEN=@IDALMACEN AND DETALLEINVENTARIO.IDPRODUCTO = PRODUCTO.IDPRODUCTO)
-(SELECT CASE WHEN SUM(CONSUMO)<>0 THEN SUM(CONSUMO) END FROM DETALLESALIDAINVENTARIO
WHERE IDALMACEN=@IDALMACEN AND DETALLESALIDAINVENTARIO.IDPRODUCTO = PRODUCTO.IDPRODUCTO), PRODUCTO.UNIDAD
FROM PRODUCTO, DETALLEINVENTARIO
WHERE PRODUCTO.IDPRODUCTO = DETALLEINVENTARIO.IDPRODUCTO AND DETALLEINVENTARIO.IDALMACEN=@IDALMACEN
GROUP BY PRODUCTO.IDPRODUCTO, PRODUCTO.DESCRIPCION, PRODUCTO.UNIDAD
END
GO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 63
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Stored Procedure no devuelve datos correctos al calcular stock

Publicado por xve (102 intervenciones) el 04/07/2014 07:55:48
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar