Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Estas en el tema de Procedimiento Almacenado con Cursor para Actualizar Stock de Productos en el foro de SQL Server en Foros del Web. Saludos terrícolas! Les comento mi inquietud, estoy por montar un pequeño negocio POS (Point Of Sales - Punto de Venta). Tengo una tabla en donde ...
  #1 (permalink)  
Antiguo 11/07/2012, 10:54
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Saludos terrícolas!

Les comento mi inquietud, estoy por montar un pequeño negocio POS (Point Of Sales - Punto de Venta). Tengo una tabla en donde están almacenados los productos que quiero expender (vender) y otra en donde se guardarán los que se vendan. Para el departamento de Bodega desarrolle un programa que ingresa los productos en la primera tabla.

Lo que deseo es armar una operación (posiblemente un Stored Procedure) que me permita, al final de la jornada, actualizar el Stock de los productos que se vendieron durante el día. Por ejemplo que obtenga de la tabla de productos vendidos la cantidad vendida de 'X' producto y, ese valor, lo reste en el campo 'Stock' de la tabla de Productos.

Mi primera opción es realizar un SP que recorra la tabla de items vendidos con un CURSOR y que la iteración obtenga el valor a restar en la tabla de Productos.

Creen que sería factible realizarlo así? Existiría una manera diferente? Cómo podria aplicarlo?

Gracias desde ya!
  #2 (permalink)  
Antiguo 11/07/2012, 11:56
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

¿Y porque con un CURSOR?, seria el camino menos indicado, yo lo haria de 2 formas:

1.- Al momento de vender (registrar la venta), hago el descuento
2.- Registro las ventas y al final del dia, aplico la resta de lo vendido.

Código SQL:
Ver original
  1. UPDATE STOCK SET CANTIDAD = CANTIDAD - VENDIDO
  2. FROM
  3. STOCK st
  4. INNER JOIN (SELECT PRODUCTO, SUM(CANTIDAD) FROM VENTA WHERE Fecha = CONVERT(CHAR(6), GETDATE(), 112) GROUP BY PRODUCTO) AS vta
  5. ON st.PRODUCTO = vta.PRODUCTO

Mi recomendacion, claro esta, la primera opcion.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 11/07/2012, 15:06
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Gracias por tu respuesta!

Te comento que el código es bastante parecido al que tengo, la única diferencia es el INNER JOIN, pues la subconsulta la tenia como condición de tipo 'WHERE condición IN (subconsulta)'

Mi necesidad del CURSOR radica justamente en el cómo obtener la cantidad vendida para enviarla a la instrucción UPDATE. Es lo único que requiero para poder terminar el procedimiento.

Imagino que la recomendación es una actualización en línea para evitar el uso del Cursos, o me equivoco?
  #4 (permalink)  
Antiguo 11/07/2012, 15:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

pues en un update puedes meter una consulta de tipo

update tabla
set campo=t1.campo
from
(
select * from tabla
) as t1


y si el punto es que evites el uso de cursores :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 11/07/2012, 15:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Yo lo recomiendo en linea, por que de esa forma tendrias tu stock al momento, de lo contrario, necesitarias esperarte hasta el proceso (supongo nocturno) para actualizar tu stock.
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 11/07/2012, 16:03
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Precisamente, mi intención era realizar un proceso de actualización nocturno. Aunque la idea de mantener los resultados de stock en linea, me parece muchísimo más.

He podido realizar el UPDATE sin necesidad de CURSOR gracias a ambos. Sólo que la resta no me ha resultado como esperaba, les muestro mi código:

Código SQL:
Ver original
  1. UPDATE Productos SET Stock=Stock-venta.vendido FROM (SELECT SUM(CANTIDAD) AS vendido FROM Ventas WHERE FECHA>='04-07-2012' AND FECHA<='05-07-2012' GROUP BY ID_PROD) AS venta
  2. WHERE Productos.Codigo_producto IN
  3. (SELECT Ventas.Codigo_producto FROM Ventas
  4. WHERE FECHA >='04-07-2012' AND FECHA<='05-07-2012')

En este día tengo 3 artículos vendidos, con cantidad de 4, 6 y 18, respectivamente. El primero si es restado 4, pero los demás restan valores que no son. No sé que estaré haciendo mal.


Edito:

Ya pude solucionar el problema, había olvidado utilizar el INNER JOIN que en principio me había recomendado iislas, después de modificar y probar el nuevo UPDATE la resta se generó exitosamente, dejo aquí el código


Código SQL:
Ver original
  1. UPDATE Productos
  2. SET Stock=Stock-venta.vendido
  3. FROM Productos prod
  4. INNER JOIN (SELECT Codigo_producto, SUM(CANTIDAD) AS vendido FROM Ventas WHERE FECHA>='04-07-2012' AND FECHA<='05-07-2012' GROUP BY Codigo_producto) AS venta
  5. ON prod.Codigo_producto = ventas.Codigo_producto

Muchísmas gracias tanto a iislas como a Libras

Saludos cordiales

Última edición por Erick_Lucas; 11/07/2012 a las 16:21
  #7 (permalink)  
Antiguo 11/07/2012, 19:49
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Procedimiento Almacenado con Cursor para Actualizar Stock de Productos

Exacto !!!, ya que el IN(), es sumamente lento, felicidades
__________________
MCTS Isaias Islas

Etiquetas: cursor, procedimiento, productos, stock, tabla, almacenar, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:31.