Você está na página 1de 4

2+ y nos vamos...: STOCK - Crear un trigger en MysqlNoticias, Futbol,...

http://dosmasynosvamos.blogspot.com/2011/12/stock-crear-un-trigger-...

cosas que te pueden gustar... noticias, espectculos, ciencia, humor, deportes, ftbol en vivo, burradas y cosas por el estilo.
Control de Inventarios
www.rgis.com RGIS Especilistas en Inventarios Reportes, soporte, control PGINA PRINCIPAL FTBOL EN VIVO CONTACTENOS BUSCADOR TWITTER FULL RSS

sbado, 3 de diciembre de 2011

STOCK - Crear un trigger en Mysql


desde MYSQL.

TRIGGERS: Como hacer un Trigger que actualice nuestro stock

Estudia Psicologa Online


www.uniacc.cl Estudia 100% Online en Uniacc Ahora es posible Postula Hoy!

Autor: Beto Chvez Rodrguez Lugar: Lima Per. Este es un pequeo aporte de mi persona para todos ustedes que estn buscando algo parecido a esto. Probablemente ustedes estn buscando algo ms elaborado pero creo que esto les dar luces de cmo hacer sus Triggers para actualizar el stock. Sin ms nos ponemos manos a la obra. Creamos una tabla a la cual nombraremos movi . Esta tabla contendr nuestra informacin de movimientos de inventarios, tanto entradas como salidas. /*Creando nuestra tabla de movimientos de inventario*/ CREATE TABLE `movi` ( `Almacen` char(2) NOT NULL, `Clase` char(1) NOT NULL, `Nro_Voucher` int(11) NOT NULL, `Codigo` char(10) NOT NULL, `Cantidad` decimal(20,5) NOT NULL DEFAULT 0.00000, PRIMARY KEY (`Almacen`,`Codigo`,`Clase`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 diciembre (27) diciembre (68) noviembre (1) Visual Basic .Net

otros
Manuales MySQL Noticias QRibbon Sistemas Operativos

archivo
agosto (2) julio (15) junio (9) abril (4) marzo (15)

Tecnologia febrero (19) enero (52)

Ahora creamos nuestra tabla a la que nombraremos auditoriainventarios. Esta tabla guardara toda la informacin de los UPDATE y DELETE que se realicen sobre nuestra tabla de movimientos de inventario, la misma que nombramos como movi.
/*Creando nuestra tabla para auditorias*/ /* sobre las actualizaciones que se hagan*/ /*sobre nuestra tabla de movimientos de inventario*/ CREATE TABLE `auditoriainventarios` ( `Almacen` char(2) DEFAULT NULL, `Clase` char(1) DEFAULT NULL, `Nro_Voucher` int(11) DEFAULT NULL, `Codigo` char(10) DEFAULT NULL, `Cantidad_Anterior` decimal(20,5) DEFAULT 0.00000, `Cantidad_Nueva` decimal(20,5) DEFAULT 0.00000, `Usuario` char(30) DEFAULT NULL,

1 de 4

23/06/2013 21:11

2+ y nos vamos...: STOCK - Crear un trigger en MysqlNoticias, Futbol,...

http://dosmasynosvamos.blogspot.com/2011/12/stock-crear-un-trigger-...

`Fecha_Hora` char(20) DEFAULT NULL, `Accion` tinytext ) ENGINE=MyISAM DEFAULT CHARSET=latin1

Y por ultimo creamos nuestra tabla stock. Esta tabla contendr los stock de cada producto o articulo de por almacn o ubicacin fsica.
/*Tabla que almacenara la informacion con los stock de nuestros almacenes*/ CREATE TABLE `stock` ( `Almacen` char(2) NOT NULL, `Codigo` char(10) NOT NULL, `StockActual` decimal(20,0) NOT NULL DEFAULT 0, PRIMARY KEY (`Almacen`,`Codigo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1

Como ya tenemos nuestras tablas necesarias para almacenar nuestra informacin, procedemos a crear nuestros 3 TRIGGERS, responsables de llevar nuestro stock actualizado. TRIGGER: Stock_Insert. Servir para actualizar el stock al momento en que se inserta un nuevo movimiento de inventario. Tambin verificara si es un producto nuevo, registrndolo en nuestra tabla de stock para poder llevar el control de sus movimientos. TRIGGER: Stock_Update. Servir para actualizar el stock al momento en que se Modifica un movimiento de inventario. Registrara tambin en nuestra tabla de auditoras, la cantidad que estuvo antes de ser modificado, como tambin la nueva cantidad, junto con el usuario que hizo la modificacin y desde que maquina lo hizo. Tambin registrara la fecha y hora de la operacin. TRIGGER: Stock_Delete. Servir para actualizar el stock al momento en que se Elimina un movimiento de inventario. Registrara tambin en nuestra tabla de auditoras, los datos que estuvieron antes de ser eliminado. Aqu el cdigo de nuestros tres TRIGGERS:
/*Creamos nuestro primer TRIGGER*/ DELIMITER $$ CREATE /*Ejemplo realizado por Beto Chvez. Lima - Peru. */ TRIGGER Stock_Insert BEFORE INSERT ON movi FOR EACH ROW BEGIN /*Evaluamos la clase de movimiento que se esta realizando*/ /*I=Para cuando ingresa Mercadera*/ /*S=Para cuando Sale Mercadera*/ IF New.Clase='I THEN /*Ingresos de Mercaderia*/

/*Verificamos si el registro existe en nuestra tabla de Stock*/ /*Si esiste, sera igual a 1 sino sera 0 */ IF (SELECT COUNT(codigo) FROM test.stock WHERE Almacen=new.Almacen AND Codigo=new.Codigo)=0 THEN /*Insertamos el registro si no existe en nuestra tabla de stock*/ INSERT INTO test.stock (Almacen,Codigo,StockActual) VALUES (NEW.Almacen,NEW.Codigo,NEW.Cantidad); ELSE /*Si el registro ya existe, solo actualizamos el stock sumando la nueva cantidad*/ UPDATE test.stock SET StockActual=StockActual+New.Cantidad WHERE Almacen=NEW.Almacen AND Codigo=NEW.Codigo; END IF; ELSEIF New.Clase='S THEN /*Salidas de Mercaderia*/ /*Si es una salida, necesariamente el registro debe existir en nuestra tabla de stock*/

2 de 4

23/06/2013 21:11

2+ y nos vamos...: STOCK - Crear un trigger en MysqlNoticias, Futbol,...

http://dosmasynosvamos.blogspot.com/2011/12/stock-crear-un-trigger-...

/*y solo actualizamos descontando del stock, la cantidad saliente*/ UPDATE test.stock SET StockActual=StockActual-New.Cantidad WHERE Almacen=NEW.Almacen AND Codigo=NEW.Codigo; END IF; END; $$ DELIMITER ;

/*Creamos nuestro segundo TRIGGER*/ DROP TRIGGER Stock_Update; DELIMITER $$ CREATE /*Ejemplo realizado por Beto Chvez. Lima - Peru. */ TRIGGER Stock_Update BEFORE UPDATE ON movi FOR EACH ROW BEGIN /*Evaluamos la clase de movimiento que se esta realizando*/ /*I=Para cuando ingresa Mercadera*/ /*S=Para cuando Sale Mercadera*/ IF New.Clase='I THEN /*Ingresos de Mercaderia*/

/*Solo actualizamos el stock descontando la cantidad anterior y sumando la nueva cantidad*/ UPDATE test.stock SET StockActual=(StockActualOLD.Cantidad)+New.Cantidad WHERE Almacen=NEW.Almacen AND Codigo=NEW.Codigo; ELSEIF New.Clase='S THEN /*Salidas de Mercaderia*/ /*Solo actualizamos el stock sumando la cantidad anterior y restando la nueva cantidad*/ UPDATE test.stock SET StockActual= (StockActual+OLD.Cantidad)-New.Cantidad WHERE Almacen=NEW.Almacen AND Codigo=NEW.Codigo; END IF; /*Auditamos esta modificacin. Claro esto es para atrapar a quienes hacen travesuras, a veces mal intencionadas*/ INSERT INTO test.auditoriainventarios (Almacen,Clase,Nro_Voucher,Codigo,Cantidad_Anterior,Cantidad_Nueva,Usuario,Fe cha_Hora,Accion)

VALUES(OLD.Almacen,OLD.Clase,OLD.Nro_Voucher,OLD.Codigo,OLD.Cantidad,NEW.Cant idad,SESSION_USER(),CONCAT(CURRENT_DATE,' ,CURRENT_TIME),'Modificacin); END; $$ DELIMITER ;

/*Creamos nuestro tercer TRIGGER*/ DELIMITER $$ CREATE /*Ejemplo realizado por Beto Chvez. Lima - Peru. */ TRIGGER Stock_Delete BEFORE DELETE ON movi FOR EACH ROW BEGIN /*Evaluamos la clase de movimiento que se esta realizando*/ /*I=Para cuando ingresa Mercadera*/ /*S=Para cuando Sale Mercadera*/ IF OLD.Clase='I THEN /*Ingresos de Mercaderia*/

/*Solo actualizamos el stock descontando la cantidad anterior */ UPDATE test.stock SET StockActual=StockActual-OLD.Cantidad WHERE Almacen=OLD.Almacen AND Codigo=OLD.Codigo; ELSEIF OLD.Clase='S THEN /*Salidas de Mercaderia*/ /*Solo actualizamos el stock sumando la cantidad anterior */ UPDATE test.stock SET StockActual=StockActual+OLD.Cantidad WHERE

3 de 4

23/06/2013 21:11

2+ y nos vamos...: STOCK - Crear un trigger en MysqlNoticias, Futbol,...

http://dosmasynosvamos.blogspot.com/2011/12/stock-crear-un-trigger-...

Almacen=OLD.Almacen AND Codigo=OLD.Codigo; END IF; /*Auditamos esta modificacin. Claro esto es para atrapar a quienes hacen travesuras, a veces mal intencionadas*/ INSERT INTO test.auditoriainventarios (Almacen,Clase,Nro_Voucher,Codigo,Cantidad_Anterior,Cantidad_Nueva,Usuario,Fe cha_Hora,Accion)

VALUES(OLD.Almacen,OLD.Clase,OLD.Nro_Voucher,OLD.Codigo,OLD.Cantidad,0,SESSIO N_USER(),CONCAT(CURRENT_DATE,' ,CURRENT_TIME),'Eliminacin); END; $$ DELIMITER ;

Ahora, solamente nos queda probar nuestro trigger.


E N 0 6: 51 RE A CCIO NE S : E TIQ UE TA S : M Y S Q L, P RO GRA M A DORE S , TRIGG E RS

2 comentarios:

Salomon dijo...

Y QUE SUCEDE CUANDO DOS O MAS USUARIOS VENDEN UN MISMO PRODUCTO AL MISMO TIEMPO Y UNO O MAS SE QUEDAN SIN STOCK OJO CADA FACTURA PUEDE CONTENER MUCHOS PRODUCTOS A VENDERSE
23 de enero de 2012 10:41

Adalberto Chavez dijo...

Lo que podras hacer es una consulta de verificacin de stock antes de insertar un tem que descargue stock. Cuando 2 usuarios intentan descargar un ultimo producto (al mismo tiempo como indicas) necesariamente uno de los 2 debe llegar primero con su peticin, y este ser el que tome el ultimo producto.
31 de enero de 2012 05:25

Publicar un comentario en la entrada

Comentar como:

ENTRADA MS RECIENTE

PGINA PRINCIPAL

ENTRADA ANTIGUA

2010 2010 ALL ALL RIGHTS RIGHTS RESERVED. RESERVED. 2+ 2+ Y NOS VAMOS... VAMOS... POWERED POWERED BY BY BLOGGER BLOGGER BLOGGER TEMPLATES TEMPLATES CREATED CREATED BY BY DELUXE DELUXE TEMPLATES TEMPLATES WP BY BY ALEXANDRU COSMIN COSMIN

4 de 4

23/06/2013 21:11

Você também pode gostar