Hello,
I have coded the following trigger for an ACCPAC ERP 5.4a database based on a Persvasive SQL 9.5 back-end:
CREATE TRIGGER UPDATE_STDCOST_FOR_ALL_ITEMS
AFTER UPDATE ON ICILOC
FOR EACH ROW
IF OLD.STDCOST <> NEW.STDCOST
AND ITEMS_USING_COMPONENT(NEW.ITEMNO) > 0 THEN
CALL CASCADE_STDCOST_FIELD_UPDATE (NEW.ITEMNO,
OLD.STDCOST, NEW.STDCOST);
END IF;
The stored procedure referenced in the trigger is as follows:
CREATE TRIGGER UPDATE_STDCOST_FOR_ALL_ITEMS
AFTER UPDATE ON ICILOC
FOR EACH ROW
IF OLD.STDCOST <> NEW.STDCOST
AND ITEMS_USING_COMPONENT(NEW.ITEMNO) > 0 THEN
CALL CASCADE_STDCOST_FIELD_UPDATE (NEW.ITEMNO,
OLD.STDCOST, NEW.STDCOST);
END IF;
The user-defined function referenced above goes like:
CREATE FUNCTION ITEMS_USING_COMPONENT(:COMPONENT_ITEM_NO char(24))
RETURNS integer AS
BEGIN
DECLARE :END_RESULT integer;
SELECT COUNT(*) INTO :END_RESULT FROM ICBOMD
WHERE COMPONENT = :COMPONENT_ITEM_NO AND RTrim(LTrim(BOMNO)) = '1';
RETURN :END_RESULT;
END;
And finally, here's the code for the FETCH_QTY function:
CREATE FUNCTION FETCH_QTY(:ITEM_NO char(24),
:COMPONENT_ITEM_NO char(24))
RETURNS decimal(19,4) AS
BEGIN
DECLARE :QTY_REQUIRED decimal(19,4);
SELECT QTY INTO :QTY_REQUIRED FROM ICBOMD WHERE ITEMNO = :ITEM_NO
AND COMPONENT = :COMPONENT_ITEM_NO
AND RTrim(LTrim(BOMNO)) = '1';
RETURN :QTY_REQUIRED;
END;
The trigger does produce the right results when I update the STDCOST field directly from the control center. But it does not get fired when I update the standard cost through the ACCPAC ERP 5.4a interface. If you have any ideas why this happens or can happen, please share them. Thank you.