Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Функция для получения остатка на дату : Супермаг Плюс (Супермаг 2000)

25.04.2024 7:32


26.07.2013 15:54
svtl
 
Цитата:
Explosion Задумался...
А кто-нибудь знает как можно эти остатки получить обходным путем?))
Ну к примеру через FastReport и оракл в связке
так а в чем проблема, если в отчете?
использовать процедуру, чтоб в ttremains занести остатки на дату, а потом
из нее брать информацию.
пишите отчет в FastReport и получайте все, что нужно
26.07.2013 15:59
Explosion
 
Ну тут все гораздо веселее
Это маленькая часть большого отчета Товар без движения
26.07.2013 17:05
svtl
 
опять-таки не вижу проблемы. я эту процедуру использую в самых разных отчетах и для самых разных целей.
получите входные параметры (товары, места хранения, период работы отчета), сформируйте фильтры, с помощью процедуры сформируйте остатки на начало периода, например, и далее используйте таблицу в отчете.
на первых страницах была вся информация - как запустить, как передать параметры...
29.07.2013 13:10
Explosion
 
В общем накалякал что-то такое страшное и медленное
Код:
Select l.name Магазин,
       rep_getcardclasspath(cc.tree, 1, 1) as Группа_товара,
       c.article as Артикул_товара,
       replace(c.name,CHR(9), ' ') as Наименование_товара,
       nvl(get_goods_ondate2(c.article, l.id, '&Начало_периода'),0) as Колво_На_остатках,
       nvl(cusf_last_wiprice(c.article,
                             l.id,
                             '&Начало_периода'),0) as Цена_закупа,
       p.price as Цена_продажи,
       nvl(get_goods_ondate2(c.article, l.id, '&Начало_периода') *
           cusf_last_wiprice(c.article,
                             l.id,
                             '&Начало_периода'),0) as Сумма_в_закупе,
       nvl(get_goods_ondate2(c.article, l.id, '&Начало_периода') * p.price,
           0) as Сумма_в_продажах,
       nvl(cusf_last_wiquant(c.article,
                             l.id,
                             '&Начало_периода'),0) as  Колво_посл_прихода,
       nvl(cusf_last_widate(c.article, l.id, '&Начало_периода'),null) as Дата_посл_прихода
  From smstorelocations l,
       sacardclass      cc,
       smcard           c,
       smprices         p,
       smpricetypes     pt,
       (Select ssc.article,dsc.createdat
          from smdocuments dsc, smspec ssc, smstorelocations lsc
         where dsc.id = ssc.docid
           and dsc.doctype = ssc.doctype
           and dsc.createdat >= to_date('&Начало_периода','dd.mm.yyyy')
           and dsc.createdat <= to_date('&Конец_периода','dd.mm.yyyy')
           and dsc.doctype in ('CS','WO')
           and lsc.id = dsc.locationfrom
           and  upper(lsc.name) like upper('%&Mecmo_Хранения%')
           and lsc.id not in (-1,1,2,10,13,14,22,34,35,40,45,48,51,52,54,55,56,57,58,59,60)
           group by ssc.article,dsc.createdat) prod
 Where cc.id = c.idclass
   and c.article not in
       (Select swi.article
          from smdocuments dwi, smspec swi, smstorelocations lwi
         where dwi.id = swi.docid
           and dwi.doctype = swi.doctype
           and dwi.createdat >= to_date('&Начало_периода','dd.mm.yyyy')
           and dwi.createdat <= to_date('&Конец_периода','dd.mm.yyyy')
           and dwi.doctype in ('WI')
           and lwi.id = dwi.locationfrom
           and  upper(lwi.name) like upper('%&Mecmo_Хранения%')
           and lwi.id not in (-1,1,2,10,13,14,22,34,35,40,45,48,51,52,54,55,56,57,58,59,60)
           group by swi.article)
   and c.article not in (prod.article)             
   and p.pricetype = pt.id
   and p.article = c.article
   and p.storeloc = l.id
   and l.id in
       (select loc.id
          from smstorelocations loc
         where upper(loc.name) like upper('%&Mecmo_Хранения%'))
   and l.id not in (-1,1,2,10,13,14,22,34,35,40,45,48,51,52,54,55,56,57,58,59,60)
   and prod.createdat  >= to_date('&Начало_периода','dd.mm.yyyy') and prod.createdat  <= to_date('&Конец_периода','dd.mm.yyyy')
   group by l.name,cc.tree,c.article,l.id,p.price,c.name
Что касается функции, установка фильтра мало чем помогла...

Код:
create or replace function get_goods_ondate2(art in string,
                                             mh  in number,
                                             dat in date) return number is
  Res number(14, 3);
  pragma autonomous_transaction;
begin
    Supermag.Sql_Filter.Clear_Allfilters();
    Supermag.Sql_Filter.Add_Location(mh);
    Supermag.Sql_Filter.Add_Article(art);
    Supermag.Remains.Calcfromsqlplus(to_date(dat, 'dd.mm.yyyy'));
    commit;
    Select ost_dat
      into Res
      from (Select ttr.quantity as ost_dat,
                   ttr.article,
                   ttr.remdate,
                   ttr.storeloc
              from supermag.ttremains ttr
             where ttr.remdate = to_date(dat, 'dd.mm.yyyy')
               and ttr.article = art
               and ttr.storeloc = mh);
  return(Res);
  exception when no_data_found then
  return 0;
end get_goods_ondate2;
29.07.2013 13:27
Mtirt
 
Ну зачем 4 раза табличку заполнять то?

Нельзя ПЕРЕД запуском выборки данных ОДИН раз вызвать функцию get_goods_ondate2, а потом уже выбирать данные нужные из ttremains?
29.07.2013 13:36
Explosion
 
Честно сказать, не думал что так можно делать.
Спс за совет, попробую
30.07.2013 07:03
Explosion
 
Я конечно извиняюсь за нубский вопрос,
А как мне вызвать ее перед выборкой но при этом параметр передать?
01.08.2013 10:32
svtl
 
зависит от языка, на котором вы пишете, думаю

Выше было несколько примеров, как передать параметры и запустить процедуру.
Не надо такой расчет всталять вовнутрь своей выборки как функцию.

Сформируйте предварительно штатной процедурой таблицу ttremains с остатками на нужную дату (с нужными параметрами, но не для одного артикула, а для всех либо для отобранных - группы классификатора, например),
а у себя в выборке используйте эту таблицу. Либр функцию - но тогда в своей функиции не расчитывайте заново все, а выбирайте данные из уже заполненной ttremains
Часовой пояс GMT +3, время: 07:32.

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