В общем написал такой скрипт.
Код:
DECLARE
out_file UTL_FILE.FILE_TYPE;
out_file_name VARCHAR2(20) := 'blablabla.txt'; -- имя файла
razd string(1):= chr(59); -- строка разделителя
mh number(8); -- место хранения
contract varchar2(50); -- контракт
dzak varchar2(50); -- дата заказа
vzak varchar2(50); -- время заказа
dbp varchar2(50); -- дата ближайшей поставки
dsp varchar2(50); -- дата следующей поставки
daynp number(8); -- дней до следующей поставки
articul varchar2(50); -- артикул
dday char(7); -- переменная для хранения дней доставки
dterm number(5); -- срок поставки в днях
type1 number(14,3); -- остаток в заказе
type2 number(14,3); -- остаток по документам
type3 number(14,3); -- остаток по актам
type4 number(14,3); -- остаток по чекам
sum_ost number(14,3); -- суммарный остаток
ssreal number(14,3); -- среднесуточная реализация
min_days number(14,3); -- минимальный запас в днях
min_days_nat number(14,3); -- минимальный запас в натуральном исчислении
facing number(14,3); -- фэйсинг
ost_bp number(14,3); -- остаток на дату ближайшей поставки
min_zap_nat_dsp number(14,3); -- минимальный запас в натуральном исчислении на дату след. поставки
kzakazu number(14,3); -- количество к заказу
pos number(8) := 1; -- позиция
CURSOR articuls is
with operg as
(select og.article art,
og.locid lid,
nvl(sum(og.salequantity), 0) - nvl(sum(og.returnquantity), 0) chk
from smopergoods og
group by og.article,og.locid) -- тут остатки по чекам
Select
doc.location,
cnt.id contract,
to_char(sysdate, 'dd.mm.yyyy') data_zakaza,
to_char(sysdate, 'HH24:MI:SS') vremya_zakaza,
sc.article articul,
cnt.deliverydays,
cnt.deliveryterm,
g.awaitedquantity ost_zak,
g.quantity ost_doc,
g.foundquantity ost_act,
operg.chk ost_check,
g.awaitedquantity + g.quantity + g.foundquantity + operg.chk summ_ost,
lv.salerate ssr,
lv.mindays min_zap_days,
lv.salerate * lv.mindays min_zap_nat,
lv.showlevel
from
smspec sc,
smdocuments doc,
smcard c,
sacardclass cc,
operg,
smgoods g,
smstocklevels lv,
smcontracts cnt
where doc.doctype = sc.doctype
and sc.docid = doc.id
and doc.docstate = '2'
and doc.doctype = 'CO'
and c.article = sc.article
and c.idclass = cc.id
and cc.tree like 'блабла%'
and operg.art = sc.article(+)
and operg.lid = doc.location(+)
and g.article = sc.article
and g.storeloc = doc.location
and lv.article = sc.article
and lv.storeloc = doc.location
and cnt.id = doc.id
and cnt.doctype = cnt.doctype
and cnt.endsat is null;
BEGIN
out_file := UTL_FILE.fopen('SM_DATA',out_file_name,'w');
utl_file.putf(out_file,'данные_автозаказ'||'\n');
OPEN articuls; --открываем курсор
LOOP --цикл
FETCH articuls INTO mh,contract,dzak,vzak,articul,dday,dterm,type1,type2,type3,type4,sum_ost,ssreal,min_days,min_days_nat,facing; -- выбор в переменные
EXIT WHEN articuls%NOTFOUND; -- условие выхода
IF(articuls%ROWCOUNT)>100 -- первые сто записей
THEN EXIT;
END IF;
IF (to_number(substr(dday,pos)) = -- проверка дат 1+mod(to_number(to_char(sysdate,'J')),7))
THEN
dbp:=to_char(sysdate,'dd.mm.yyyy')+1;
dsp:=to_char(sysdate,'dd.mm.yyyy')+dterm;
/*daynp:=to_number(to_date(sysdate,'J'),7)+dterm) - to_number(to_date(sysdate,'dd.mm.yyyy')));*/
ELSE
pos:=pos+1; UTL_FILE.PUTF(out_file,dzak||razd||vzak||razd||articul||razd||contract||razd||dbp||razd||dsp||razd||daynp||razd||type1||razd||type2||razd||type3||razd||type4||razd||sum_ost||razd||ssreal||razd||min_days||razd||min_days_nat||razd||facing||razd||ost_bp||razd||min_zap_nat_dsp||razd||kzakazu||'\n'); -- вывод в файл
UTL_FILE.FFLUSH(out_file);
END IF;
END LOOP;
UTL_FILE.FCLOSE(out_file); -- закрываем файл
CLOSE articuls; -- закрываем курсор
END;