Disparar 2 triggers
Publicado por Luz Facundo E. (6 intervenciones) el 21/01/2012 23:35:10
Hola.

Por favor cuando guardo mi factura dispara el 1er trigger que inserta datos en la tabla kardex, bueno hasta alli no tengo error.
Pero cuando se dispara el 2do trigger de la tabla kardex hacia la tabla STOCK para actualizar la cantidad sale error.
Nota: Mediante mi sistema solo guardo en la ventana factura y los 2 triggers se deben de disparar en cadena, 1er trigger se dispara de la ventana Factura hacia la tabla KARDEX y despues el 2do trigger de la tabla Kardex hacia la tabla STOCK.
PRIMER TRIGGER
DELIMITER //
CREATE TRIGGER t_I_f_detall_kardex AFTER INSERT ON det_fact_venta
FOR EACH ROW
BEGIN
INSERT INTO t_kardex SET
t_kardex.in_id_almacen = NEW.in_id_almacen,
t_kardex.in_id_producto = NEW.in_id_product,
t_kardex.dt_fecha_reg = NEW.dt_fec_insert,
t_kardex.ch_tipo_docum = 'FA',
t_kardex.vc_nro_docum = NEW.ch_id_num_fact,
t_kardex.in_id_clie_prov = NEW.in_id_cliente,
t_kardex.ch_clie_prov = 'C',
t_kardex.ch_tipo_ing_sal = 'S',
t_kardex.nm_q_ingreso = 0,
t_kardex.nm_q_salida = NEW.dc_cantid_prod,
t_kardex.nm_saldo = (select t_stockalm.nm_stockr from t_stockalm where new.in_id_product = t_stockalm.in_id_producto and new.in_id_almacen = t_stockalm.in_id_almacen) - (NEW.dc_cantid_prod ),
t_kardex.in_id_estado = NEW.in_id_estado,
t_kardex.ch_moned_costo = (select t_productos.ch_mone_cost from t_productos where new.in_id_almacen = t_productos.in_id_genero and new.in_id_product = t_productos.in_id_product),
t_kardex.nm_cost_unit = (select t_productos.nm_costo from t_productos where new.in_id_almacen = t_productos.in_id_genero and new.in_id_product = t_productos.in_id_product);
END;//
DELIMITER ;
SEGUNDO TRIGGER
DELIMITER //
CREATE TRIGGER t_U_kardex_a_stock AFTER INSERT ON bd_system.t_kardex
FOR EACH ROW
BEGIN
IF NEW.nm_q_salida > 0 THEN
UPDATE t_stockalm SET
t_stockalm.nm_stockr = t_stockalm.nm_stockr - NEW.nm_q_salida
where t_stockalm.in_id_almacen = NEW.in_id_almacen and
t_stockalm.in_id_producto = NEW.in_id_producto ;
END IF;
IF NEW.nm_q_ingreso > 0 THEN
UPDATE t_stockalm SET
t_stockalm.nm_stockr = t_stockalm.nm_stockr + NEW.nm_q_ingreso
where t_stockalm.in_id_almacen = NEW.in_id_almacen and
t_stockalm.in_id_producto = NEW.in_id_producto ;
END IF;
END;//
DELIMITER ;
Gracias por la ayuda.
Saludos.

Por favor cuando guardo mi factura dispara el 1er trigger que inserta datos en la tabla kardex, bueno hasta alli no tengo error.
Pero cuando se dispara el 2do trigger de la tabla kardex hacia la tabla STOCK para actualizar la cantidad sale error.
Nota: Mediante mi sistema solo guardo en la ventana factura y los 2 triggers se deben de disparar en cadena, 1er trigger se dispara de la ventana Factura hacia la tabla KARDEX y despues el 2do trigger de la tabla Kardex hacia la tabla STOCK.
PRIMER TRIGGER
DELIMITER //
CREATE TRIGGER t_I_f_detall_kardex AFTER INSERT ON det_fact_venta
FOR EACH ROW
BEGIN
INSERT INTO t_kardex SET
t_kardex.in_id_almacen = NEW.in_id_almacen,
t_kardex.in_id_producto = NEW.in_id_product,
t_kardex.dt_fecha_reg = NEW.dt_fec_insert,
t_kardex.ch_tipo_docum = 'FA',
t_kardex.vc_nro_docum = NEW.ch_id_num_fact,
t_kardex.in_id_clie_prov = NEW.in_id_cliente,
t_kardex.ch_clie_prov = 'C',
t_kardex.ch_tipo_ing_sal = 'S',
t_kardex.nm_q_ingreso = 0,
t_kardex.nm_q_salida = NEW.dc_cantid_prod,
t_kardex.nm_saldo = (select t_stockalm.nm_stockr from t_stockalm where new.in_id_product = t_stockalm.in_id_producto and new.in_id_almacen = t_stockalm.in_id_almacen) - (NEW.dc_cantid_prod ),
t_kardex.in_id_estado = NEW.in_id_estado,
t_kardex.ch_moned_costo = (select t_productos.ch_mone_cost from t_productos where new.in_id_almacen = t_productos.in_id_genero and new.in_id_product = t_productos.in_id_product),
t_kardex.nm_cost_unit = (select t_productos.nm_costo from t_productos where new.in_id_almacen = t_productos.in_id_genero and new.in_id_product = t_productos.in_id_product);
END;//
DELIMITER ;
SEGUNDO TRIGGER
DELIMITER //
CREATE TRIGGER t_U_kardex_a_stock AFTER INSERT ON bd_system.t_kardex
FOR EACH ROW
BEGIN
IF NEW.nm_q_salida > 0 THEN
UPDATE t_stockalm SET
t_stockalm.nm_stockr = t_stockalm.nm_stockr - NEW.nm_q_salida
where t_stockalm.in_id_almacen = NEW.in_id_almacen and
t_stockalm.in_id_producto = NEW.in_id_producto ;
END IF;
IF NEW.nm_q_ingreso > 0 THEN
UPDATE t_stockalm SET
t_stockalm.nm_stockr = t_stockalm.nm_stockr + NEW.nm_q_ingreso
where t_stockalm.in_id_almacen = NEW.in_id_almacen and
t_stockalm.in_id_producto = NEW.in_id_producto ;
END IF;
END;//
DELIMITER ;
Gracias por la ayuda.
Saludos.
Valora esta pregunta


0