19.03.2013 16:22
В общем написал такой скрипт.
Косяк в получении дат поэтому прошу помощи
Код:
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;
19.03.2013 16:39
В чем косяк-то? Что не получается?
19.03.2013 16:49
И, главное, а зачем это всё нужно?
19.03.2013 20:45
Засада в том, что я хочу получить в итоге - дату ближайшей поставки,следующей поставки, чтобы потом подставить эти данные в формулы расчета

Условие IF по всей видимости работает криво т.к вместо дат в итоговом файле пусто
20.03.2013 07:05
Зачем тебе нужны эти даты? И в какие именно формулы ты собрался их подставлять?
Чем стандартный автозаказ не устраивает?
20.03.2013 09:26
Тем что надо сделать свой).
С супермагом я знаком сравнительно недавно, поэтому стараюсь разобраться в нем всевозможными способами.
Что же касается формул:
Данные необходимы для расчета таких параметров как количество к заказу и количество на дату ближайшей поставки
20.03.2013 09:41
одна из основных задач формирования заказа в СМ - цепочка - контракт - заказ - приходная накладная...
т.е. один человек - заключает контракты на поставку - и отражает это в СМ в виде документа - контракт с поставщиком
второй человек - формирует заказа поставщику
третий - на основании заказа - создает приходную накладную...
в дальнейшем с помощью отчетов можно контролировать - закупочные цены, полноту поставки и т.п.
смысл вашего механизма - непонятен.
20.03.2013 11:25
Цель в автоматическом формировании заказа поставщику.Впоследствии данные (выбранные/рассчитанные) будут отображаться в GUI чтобы можно было их редактировать и формировать xml -вкратце как-то так
20.03.2013 13:49
Второй раз спрашиваем, чем автозаказ не устраивает?
Зачем вам нужны свои новые "грабли"?
22.03.2013 12:35
Мне сказали надо сделать чтобы автоматом все считалось.
Цель всего этого
обеспечить наличие достаточных для бесперебойной торговли запасов товара
исключить затоваривание складов неходовым товаром
Часовой пояс GMT +3, время: 06:09.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.