Finalmente, la opción que va a funcionar en cualquier versión de Interbase o Firebird, por antigua que sea (ya que utilizamos la sintaxis más básica y común) es crear tres triggers, uno para cada operación que se puede hacer en la tabla:
Código SQL
[-]SET TERM ^ ;
CREATE TRIGGER RECALCULAR_STOCK_AI for DETALLE_P
active after insert position 0
AS
begin
UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
WHERE ID_ARTICULO = new.CODIGO, old.CODIGO;
end
^
CREATE TRIGGER RECALCULAR_STOCK_AU for DETALLE_P
active after update position 0
AS
begin
UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = new.CODIGO)
WHERE ID_ARTICULO = new.CODIGO;
UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
WHERE ID_ARTICULO = old.CODIGO;
end
^
CREATE TRIGGER RECALCULAR_STOCK_AD for DETALLE_P
active after delete position 0
AS
begin
UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = old.CODIGO)
WHERE ID_ARTICULO = old.CODIGO;
end
^
SET TERM ; ^
Saludos.