Возвращаемся к теме. Заголовок неправильно я написал, т.к. предполагал совсем другое решение проблемы. Но тем не менее, для тех, у кого по разным причинам вдруг везде пропали цены (аж стыдно самому признаваться в этом), можно попробовать использовать следующий скрипт:
Код:
DECLARE
-- выборка последних ненулевых цен из истории
-- выборка цен из истории
-- выбираются с сортировкой по артикулу и по времени записи (в обратном
-- порядке - сначала самые поздние, исключая сегдняшние); только ненулевые
-- с отборкой по месту хранения и виду цен
cursor smph is
select t.pricetype, t.storeloc, t.article, t.price, t.eventtime
from smpricehistory t
where t.pricetype=9
and t.storeloc=17
and t.price<>0
and t.eventtime<to_date('06/01/2009','DD/MM/YYYY')
order by t.article, t.eventtime desc;
t_pt number(5);
t_sl number(10);
t_art varchar2(50);
t_pr number(19,4);
t_et date;
dn varchar2(50) := 'Название акта переоценки';
af number(16);
pos number(8):=1;
BEGIN
OPEN smph; -- открываем выборку
LOOP
-- считываем записи
FETCH smph INTO t_pt, t_sl, t_art, t_pr, t_et;
EXIT WHEN smph%NOTFOUND; -- пока не кончится выборка
-- проверяем, нет ли уже этого артикула в акте переоценки
select count(*) into af
from smspec s
where s.doctype='AC' and s.docid=dn and s.article=t_art;
-- если артикула в акте еще нет - вставляем
if af=0 then
begin
insert into smspec (doctype, docid, specitem, displayitem, article, quantity, expquantity, itemprice, totalprice, totalpricecur)
values ('AC', dn, pos, pos, t_art, 1, 1, t_pr, t_pr, t_pr );
commit;
pos := pos+1;
end;
end if;
END LOOP;
CLOSE smph; -- закрываем выборку
END;
/
-- exit;
Акт должен быть создан заранее. После отработки скрипта спецификация акта будет заполнена автикулами и ценами. Этот акт проводить не нужно! Требуется зделать экспорт из него в новый акт и уже его проводить.
З.Ы. Кстати, автор сего произведения Андрей Конев, если будете пинать, то пинайте его
Хотя мне скрипт помог, спасибо Андрею.