elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  como realizar un trigger para el control de stock
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como realizar un trigger para el control de stock  (Leído 7,470 veces)
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
como realizar un trigger para el control de stock
« en: 7 Abril 2016, 22:32 pm »

Como descontar cantidad de stock en tabla de product desde  sale_detail


tabla product
id
product
cantidad

tabla sale_detail
id
id_sale
id_product
cantidad


En línea

crisoof

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: como realizar un trigger para el control de stock
« Respuesta #1 en: 13 Abril 2016, 20:11 pm »

que llevas hecho?, alguna duda sobre el codigo para tu trigger? o solo esperas que te den el codigo ya listo? :laugh: :laugh: :laugh: :laugh: :laugh:


En línea

Hadess_inf
Desesperado
Colaborador
***
Desconectado Desconectado

Mensajes: 2.048


Nueva Vida


Ver Perfil WWW
Re: como realizar un trigger para el control de stock
« Respuesta #2 en: 14 Abril 2016, 21:44 pm »

Hola, pues bien .. la idea es esta:

- tb_articulo ( id INT PK)
- tb_almacen (id INT PK)
- tb_stock (id INT PK, idarticulo INT FK, idalmacen INT FK, cantidad INT)

Y este es el Trigger:

Código
  1. CREATE OR REPLACE FUNCTION tr_stock_articulo_almacen()
  2.  RETURNS TRIGGER AS
  3. $BODY$
  4. DECLARE i_existe INTEGER;
  5. i_tipo INTEGER;
  6. BEGIN
  7. -- Calcula valores
  8. i_tipo   := (CASE WHEN TG_TABLE_NAME = 'tb_venta_detalle' THEN -1 ELSE 1 END);
  9. i_existe := (SELECT COUNT(id) FROM tb_stock WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo);
  10.  
  11. -- Inserta almacen y producto en tabla stock
  12. IF i_existe = 0 THEN
  13. INSERT INTO tb_stock (idalmacen, idarticulo, cantidad) VALUES (NEW.idalmacen, NEW.idarticulo, 0);
  14. END IF;
  15.  
  16. -- Opera trigger
  17. IF TG_OP = 'INSERT' THEN
  18. UPDATE tb_stock SET cantidad = cantidad + (NEW.cantidad * i_tipo) WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo;
  19.  
  20. ELSEIF TG_OP = 'UPDATE' THEN
  21. UPDATE tb_stock SET cantidad = cantidad - (OLD.cantidad * i_tipo) WHERE idalmacen = OLD.idalmacen AND idarticulo = OLD.idarticulo;
  22. UPDATE tb_stock SET cantidad = cantidad + (NEW.cantidad * i_tipo) WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo;
  23.  
  24. ELSEIF TG_OP = 'DELETE' THEN
  25. UPDATE tb_stock SET cantidad = cantidad - (OLD.cantidad * OLD.tipo) WHERE idalmacen = OLD.idalmacen AND idarticulo = OLD.idarticulo;
  26. END IF;
  27.  
  28. RETURN NULL;
  29. END;
  30. $BODY$
  31.  LANGUAGE plpgsql VOLATILE;

Asi asignas el trigger a la tabla:

Código
  1. -- Para la tabla de detalle de compra
  2. CREATE TRIGGER tb_compra_detalle_trigger
  3.  AFTER INSERT OR UPDATE OR DELETE
  4.  ON tb_compra_detalle
  5.  FOR EACH ROW
  6.  EXECUTE PROCEDURE tr_stock_articulo_almacen();
  7.  
  8. -- Para la tabla de detalle de venta
  9. CREATE TRIGGER tb_venta_detalle_trigger
  10.  AFTER INSERT OR UPDATE OR DELETE
  11.  ON tb_venta_detalle
  12.  FOR EACH ROW
  13.  EXECUTE PROCEDURE tr_stock_articulo_almacen();
  14.  

Saludos.

 ::) ::)
En línea

jdannycastilla

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: como realizar un trigger para el control de stock
« Respuesta #3 en: 8 Agosto 2019, 07:38 am »

Me sirvió de mucho, en mi caso utilizo una sola tabla para todo, compras, ventas, traslados,etc al cual dependiendo si es ingreso o salida lo multiplico *1 (positivo) o *1 (negativo), el cual ya no tengo que utilizar la variable i_tipo, ojala les sirva.
En línea

Hadess_inf
Desesperado
Colaborador
***
Desconectado Desconectado

Mensajes: 2.048


Nueva Vida


Ver Perfil WWW
Re: como realizar un trigger para el control de stock
« Respuesta #4 en: 15 Agosto 2019, 01:24 am »

Aunque sea funcional yo no estoy de acuerdo en meter todo a una tabla (por el tema de consultas -> tu tabla crecerá mucho por la cantidad de datos que iras metiendo).

Saludos ¡¡¡
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
realizar una encuesta PHP con control IP
PHP
nyarko32 2 4,877 Último mensaje 11 Septiembre 2006, 18:27 pm
por nyarko32
¿Cómo realizar un framework para Java?
Java
Tlecoatl 4 7,792 Último mensaje 29 Enero 2011, 13:10 pm
por kasiko
Duda sobre realizar o no realizar overclocking en mi processador.
Hardware
MonzterKuki. 4 6,390 Último mensaje 3 Octubre 2011, 22:19 pm
por sagrat
Como se hace para que en el Panel de control salga esto:
Dudas Generales
iShutdown 5 5,935 Último mensaje 19 Febrero 2012, 01:03 am
por Eleкtro
Como puedo motivarme para realizar un trabajo « 1 2 3 »
Foro Libre
:ohk<any> 29 13,243 Último mensaje 28 Mayo 2012, 21:09 pm
por tremolero
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines