Вот наднях написал триггер который при смене статуса приходной накладной сверяет цены в спецификации с ценами из таблицы smprices, вроде работает, но думаю его можно улучшить, а я незнаю как. Может кто что посоветует?
Вот сам триггер:
Код:
TRIGGER supermag.smspec_ok
before insert or update
ON supermag.smdocuments
for each row
WHEN (new.doctype='WI' and new.docstate>1)
declare
fPrice_raz number(20,4);
ART VARCHAR2(50);
CENA NUMBER (20,4);
I NUMBER(20);
I_MAX NUMBER(20);
S NUMBER(20);
begin
SELECT MAX(DISPLAYITEM) INTO I_MAX
FROM SMSPEC
WHERE DOCID=:NEW.ID;
FOR I IN 1..I_MAX LOOP
S:=I;
BEGIN
SELECT (PR.PRICE-SP.ITEMPRICE) raz, SP.ARTICLE, PR.PRICE
INTO fPrice_raz,ART, CENA
FROM SMPRICES PR,
SMSPEC SP
WHERE PR.ARTICLE=SP.ARTICLE
AND :new.DOCTYPE='WI'
AND PR.PRICETYPE=1
AND SP.DOCID=:new.ID
AND SP.DOCTYPE=:new.DOCTYPE
AND PR.STORELOC=:NEW.LOCATIONTO
AND SP.DISPLAYITEM=S;
EXCEPTION
when NO_DATA_FOUND then
/*Core.Fail((-20000-56));
RETURN;*/
raise_application_error (-20000,'В документе присутствует новый товар (товар ранее не поставлялся) или неупорядочены строки в накладной (Упорядочить №№');
end;
IF fPRICE_RAZ <> 0
THEN
raise_application_error (-20000,'Неправильная цена у артикула ' || ART || ' она должна быть равна ' || cena);
END IF;
END LOOP;
END smspec_ok;