Noticias:

¿Deseas poder tener acceso a contenido exclusivo? ¿Tu propia zona? entonces mira esto: Platinum [Leer]

Menú principal

Triggers para acualizar la taba current_stock de productos

Publicado por pabje, 25 Noviembre de 2022, 15:48

Tema anterior - Siguiente tema

0 Usuarios y 2 Visitantes están viendo este tema.

pabje


Sea el siguiente enunciado:

https://drive.google.com/file/d/1-OcsagKHPeiSyptQ2dRVbPEmdIVe-rUV/view?usp=share_link

Mi pregunta especifica es para el tercer punto que es la operacion de Update. Como obtengo la cantidad anterior si estoy usando un triger After con la tabla factura_det(faturas detalles)?

Cuando ocurre una acutalizacion del campo cantidad de un registro de factura_det, se ejecutará despues(after)y no antes la sentencia Sql que esta dentro del trigger, por lo que el campo cantidad de facturas_det va a estar ya cambiado, y lo mismo la tabla insertad que contiene datos ya actualizados(ambas no van a tener la cantidad anterior).

Como puedo recuperar esa cantidad anterior para actualizar correctamente la tabla Current_Stock y asi hacer bien el tercer punto del Update del enunciado.

Paso lo que he hecho hasta ahora de código. Hice los dos puntos la operacion Insert y Delete, pero me falta el tercer punto Update en donde tengo la duda. Si me pueden ayudar. Desde ya gracias.

CREATE TABLE CURRENT_STOCK (
PRODUCTO_COD INT PRIMARY KEY,
CANTIDAD_ACTUAL INT,
CREATEDUPDATE DATETIME NOT NULL)

CREATE TRIGGER InsersUpDele ON facturasDet 
	AFTER INSERT, UPDATE, DELETE AS 


IF SELECT (COUNT (1) FROM DELETED) > 0
	BEGIN 
		SET @ACCION = 'DELETED'
	END
IF SELECT (COUNT (1) FROM INSERTED) > 0
	BEGIN 
		SET @ACCION = 'INSERTED'
	END


BEGIN
	--INSERCION
	IF @ACCION = 'INSERTED'
		BEGIN
		IF NOT exists (select * from inserted A  inner join CURRENT_STOCK B ON B.PRODUCTO_COD = @PRODUCTO_COD  )		

			INSERT INTO CURRENT_STOCK(PRODUCTO_COD,CANTIDAD_ACTUAL, FECHA) VALUE(SELECT PRODUCTO_ COD , "0" + CANTIDAD, FECHA_EMISION FROM INSERTED I INNER JOIN FACTURAS F  ON I.FACTURA_NUM = F.FACTURA_NUM)
 		ELSE
			UPDATE CURRENT_STOCK SET  C.CANTIDAD_ACUAL = C.CANTIDAD_ACUAL- I.CANTIDAD, C.FECHA= F.FECHA_EMISION FROM CURRENT_STOCK C INNER JOIN 
                        INSERTED I ON C.PRODUCTO_COD = I.PRODUCTO_COD INNER JOIN FACTURAS F ON I.FACTURA_NUM = F.FACTURA_NUM)
                        WHERRE C. PRODUCTO_COD = I.PRODUCTO_COD
	--DELETE 
	ELSE
	       BEGIN
	       UPDATE CURRENT_STOCK SET C.CANTIDAD_ACTUAL =  C.ANTIDAD_ACTUAL + I.CANTIDAD, CREATEDUPDATE = F.FECHA EMISION FROM  CURRENT_STOCK C INNER JOIN
               INSERTED I ON C.PRODUCTO_COD = I.PRODUCTO_COD INNER JOIN FACTURAS F ON I.FACTURA_NUM = F.FACTURA_NUM)
               WHERE C.PRODUCTO_COD = I.PRODUCTO_COD
	       END
	END
 
	--UPDATE

Rock Lee

No estoy seguro que lenguaje usas o que puntos debes cumplir exactamente pero una forma hacerlo es insetar un control con una tabla temporal (no es la mejor practica pero funciona) o donde poder guardar el valor, y que en la siguente lectura vuelta a 0. Sino generar una tabla de control (si no molesta) donde vas metiendo los valores de referencia aparte te sirve para comprobar realmente el stock a modo de control interno...


Saludos Familia!

Temas Similares (5)