[ОТВЕТИТЬ]
Опции темы
25.07.2013 16:14  
svtl
1. В инете предлагается решение с помощью автономных транзакций

Вот варинат, который у меня корректно отрабатывает:
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.Remains.Calc(to_date(dat, 'dd.mm.yyyy'), false, 23, 1, false);
commit;
.....
<далее по тексту функции>
end get_goods_ondate2;

select get_goods_ondate2('100172',2,to_date('25.07.2013', 'dd.mm.yyyy'))
from dual;

Но такая функция будет работать крайне медленно.
Вы не установили фильтры для этой процедуры (Обычно в отчетах CM используют для этого Supermag.SQL_Filter).
В результате в вашем варианте в ttremains попадают каждый раз
ВСЕ карточки с ненулевыми остатками по ВСЕМ местам хранения (можете после первого обращения к функции посмотреть содержимое ttremains).

Это процедура сделано для того, чтобы за один прием заполнить таблицу для всего набора условий - выбранных артикулов, мест хранения и пр.
 
"Спасибо" svtl от:
25.07.2013 16:22  
Starter
Вот вариант, автора не знаю. Но внутри Select также работать не будет. По поводу автономных транзакций - можно попробовать модифицировать ее.

create or replace
function supermag.GetOstToDate(AStoreLoc in supermag.smstorelocations.id%type, AArticle in supermag.smcard.article%type, OnDate in Date) return number
is
res number := 0;
begin
supermag.sql_filter.clear_allfilters;
supermag.sql_filter.add_location(AStoreLoc);
supermag.sql_filter.add_article(AArticle);
supermag.remains.calc(OnDate, False, 23, 0, True);
begin
select quantity
into res
from supermag.ttremains r
where r.article = AArticle;
return res;
exception when no_data_found then
return 0;
end;
end;
/
 
25.07.2013 16:28  
whitewizard
Как оно всё замудрёно.
Проще ночью собирать таблицу с остатками на конец дня за нужный период.
Быстрее днём будут отчёты крутиться.
 
25.07.2013 16:40  
svtl
можно и не ночью, а внутри отчета. но сначала посчитать 1 раз остатки а потом делать выборки из ttremains. Период у каждого исполнителя отчета свой может быть
 
25.07.2013 16:43  
whitewizard
да все равно таблица копеешная будет
 
25.07.2013 21:39  
svtl
угу.... если у меня сеть 50 магазинов + 300 000 карточек + дата любая - что я получу в результате?
кмк, эта процедура тем и хороша, что опирается на уже рассчитанные остатки на конец периода (в расчете статистики) и оптимальным по быстродействию образом расчитывает уже то, что мне надо.
т.е. велосипед уже изобретен :)
 
26.07.2013 03:36  
whitewizard
Тогда быстрее будет уже рассчитанная таблица, в которую будут добавляться данные каждый день.
Разумеется, кроме случая, когда нужны остатки на единичные товары.
 
26.07.2013 15:46  
Explosion
Задумался...
А кто-нибудь знает как можно эти остатки получить обходным путем?))
Ну к примеру через FastReport и оракл в связке
 
26.07.2013 15:47  
Explosion
Или какой-нить прикладной программой дергать данные из отчета?
 
26.07.2013 15:49  
Mtirt
Для каких целей это требуется? И какие именно остатки?
Может тебе текущих достаточно. Из smgoods выбрать и вся недолга...
 
 


Опции темы



Часовой пояс GMT +3, время: 01:25.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.