Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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)
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
http://dosmasynosvamos.blogspot.com/2011/12/stock-crear-un-trigger-...
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
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)
/*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
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)
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
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
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