Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2014, 15:51
oscurogt
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Actualizar por medio de disparador (trigger)

Hola compañeros, tengo un par de disparadores que acualizar datos en una tabla, el cual funciona de la siguiente manera:

Al realizar una compra automaticamente carga la cantidad comprada con la cantidad existente (hasta aqui todo bien), pero al querer anular esa compra es decir revertir el proceso tengo problemas cuando el producto es el mismo es decir
COMPRA
Código MySQL:
Ver original
  1. CANT | IDARTICULO | PRECIO
  2. 3  |  55  | 55.55
  3. 1 |  55  | 55.55
  4. 2 |  55  | 55.55
Actualizar la existencia del producto agregandole los 6, pero al anular no sabe como operarlo porque me resulta restando 9 en lugar de los 6

El disparador para anular es el siguiente
Código MySQL:
Ver original
  1. if new.estado = 2 and old.estado <> 2 then
  2.         update sys_compra_detalle set estado = new.estado where no_compra = new.no_compra;
  3.         update sys_kardex set estado = new.estado where no_movimiento = new.no_compra;
  4.         update sys_articulo a, (select * from sys_compra_detalle where no_compra=new.no_compra) b set a.existencia=a.existencia-b.cantidadcompra where a.idarticulo=b.idarticulo;
  5.     end if;
Cabe mencionar que el detalle de la compra tiene un idcompra_detalle como clave primaria autonumerica

Por su ayuda gracias.

PD el proceso si funciona cuando hago el after update en la tabla detalle
Código MySQL:
Ver original
  1. AFTER UPDATE ON `sys_compra_detalle` FOR EACH ROW BEGIN
  2.     if new.estado = 2 and old.estado <> 2 then
  3.         update sys_articulo set existencia = existencia - new.cantidadcompra where idarticulo = new.idarticulo;
  4.     end if;
  5.   END
Porque obviamente me cuanta la llaves primarias. Pero en este caso debo hacer 2 disparadores uno para el maestro y otro para el detalle, y lo que quiero es controlarlo desde uno solo

Última edición por oscurogt; 28/11/2014 a las 16:00