скрипт который проставит цены последних приходов, которые были с даты создания складского требования по текущий момент - строка
AND A2.CREATEDAT>=(select h.createdat from supermag.smdocuments h where h.id='0000000001' and h.doctype='SO')
Если ты её уберешь цена последних приходов будет искаться вообще за вес период.
В этих скриптах подменяешь только '0000000001' - это номер складского требования.
Код:
UPDATE SUPERMAG.SMSPEC F SET F.ITEMPRICE=NVL(
(
SELECT LP.ITEMPRICE
FROM (SELECT B2.ARTICLE,B2.ITEMPRICE, ROW_NUMBER() OVER(PARTITION BY B2.ARTICLE ORDER BY A2.CREATEDAT DESC) RN
FROM SUPERMAG.SMDOCUMENTS A2, SUPERMAG.SMSPEC B2
WHERE A2.DOCTYPE = B2.DOCTYPE
AND A2.ID = B2.DOCID
AND A2.DOCSTATE IN (2, 3)
AND A2.OPCODE=0
AND A2.LOCATIONTO = (select h.location from supermag.smdocuments h where h.id='0000000001' and h.doctype='SO')
AND A2.DOCTYPE in ('WI')
AND B2.ARTICLE in (select r.article from supermag.smspec r where r.docid='0000000001' and r.doctype='SO')
AND A2.CREATEDAT>=(select h.createdat from supermag.smdocuments h where h.id='0000000001' and h.doctype='SO')
) LP
WHERE LP.RN = 1
AND LP.ARTICLE=F.ARTICLE
),F.ITEMPRICE)
WHERE F.DOCTYPE='SO' AND F.DOCID='0000000001'
;
COMMIT;
теперь надо изменить суммы в спецификации этого документа
Код:
UPDATE SUPERMAG.SMSPEC F SET F.TOTALPRICE=F.QUANTITY*F.ITEMPRICE WHERE F.DOCTYPE='SO' AND F.DOCID='0000000001';
COMMIT;
остается только изменить сумму по документу
Код:
UPDATE SUPERMAG.SMDOCUMENTS D
SET
D.TOTALSUM=(SELECT SUM(F.TOTALPRICE) FROM SUPERMAG.SMSPEC F WHERE F.DOCTYPE=D.DOCTYPE AND F.DOCID=D.ID),
D.TOTALSUMCUR=(SELECT SUM(F.TOTALPRICE) FROM SUPERMAG.SMSPEC F WHERE F.DOCTYPE=D.DOCTYPE AND F.DOCID=D.ID)
WHERE D.DOCTYPE='SO' AND D.ID='0000000001';
COMMIT;
вот как то так, у меня складских требований нет, я создал одно, написал цену от балды, потом глянул таблицы, скрипт написал и попробовал, все нормально отработало - цены последних приходов встали в требование, сумма по документу изменилась правильно.