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

Отчет по складским требованиям oracle reports : Супермаг Плюс (Супермаг 2000)

28.03.2024 21:01


21.08.2015 15:03
akonev
 
P_GROUP_ALL
это про группировку результатов, не про отбор карточек.
21.08.2015 15:03
akonev
 
supermag.RepTools.ClassName(:group_tree)
принимает путь до группы классификатора
возвращает путь до группы классификатора и наименование группы
например:
вызов: supermag.RepTools.ClassName('99.9.2.')
результат: 99.9.2. Хлеб черный
21.08.2015 15:16
akonev
 
в P_GROUP_TREE из формы задания параметров прилетает список отобранных групп товаров через запятую. например:
99.9.7.,99.10.13.,99.10.1.2.,40.

В базе путь до группы лежит в supermag.sacardclass.tree
Можно (и чаще всего удобнее) пользоваться вьюшкой supermag.svcardtreesplit

связь между карточками и группами
supermag.smcard.idclass = supermag.svcardtreesplit.id
21.08.2015 15:20
vdm
 
Насчет фильтра по карточкам - посмотри запрос исходного отчета по складским требованиям и вставь в свой запрос в соответствующие места supermag.RepTools.ClassString(). С учетом того, что в ф-ии supermag.RepTools.ClassString(3,'c') строка 'c' - это алиас таблицы smcard, у тебя будет 'crd'.
21.08.2015 15:34
akonev
 
Цитата:
vdm Насчет фильтра по карточкам - посмотри запрос исходного отчета по складским требованиям и вставь в свой запрос в соответствующие места supermag.RepTools.ClassString(). С учетом того, что в ф-ии supermag.RepTools.ClassString(3,'c') строка 'c' - это алиас таблицы smcard, у тебя будет 'crd'.
перед ClassString надо же сначала кого-то из LoadClass вызвать?
23.08.2015 09:30
xray84
 
вставил строки supermag.RepTools.ClassString() так же как в оригинальном отчете складские требования...
но при запуске в СМ просто долго очень работает а ничего не выводит.. что не так?
это у меня в триггере AFTER PARAMETER FORM:
Цитата:
supermag.RepTools.LoadClass(:P_Group_All, :P_BGroup, :P_Group_Tree);

if :P_FLAG1 = '0' then
:P_SQL := 'select' || supermag.RepTools.ClassString(0) || ' GROUP_TREE, ' ||
'c.article, c.name, sum (s.quantity), d.createdat
from supermag.sacardclass cl,supermag.smspec s, supermag.smdocuments d,
supermag.smcard c' ||
supermag.RepTools.ClassString(2) ||
'where c.article = s.article and d.id = s.docid and d.docstate = 2 and
(d.createdat between :P_FIRSTDATE and :P_LASTDATE)
and s.doctype= d.doctype and s.doctype= ''SO'''
|| supermag.RepTools.ClassString(3,'c') ||
'group by c.article, c.name, d.createdat,cl.Tree
order by 2;';
end if;
24.08.2015 05:35
xray84
 
насчет вьюхи supermag.svcardtreesplit: используя ее не все карточки выходят..только некоторые! например у меня группа FOOD имеет TREE= '63.', результат простой выборки пустая таблица (select c.article, c.name, sp.tree from supermag.smcard c , supermag.svcardtreesplit sp where c.idclass = sp.id and sp.tree = '63.'). Где то может еще есть вьюшка где все все есть разделы карточек?
24.08.2015 09:25
xray84
 
вот так решил задачу:
Цитата:
if :P_FLAG1 = '0' then
:P_SQL := 'select c.article, c.name, sum (s.quantity), d.createdat from supermag.smspec s, supermag.smdocuments d, supermag.smcard c, supermag.sacardclass sp
where c.article = s.article and d.id = s.docid and d.docstate = 2 and
(d.createdat between :P_FIRSTDATE and :P_LASTDATE) and s.doctype= d.doctype and s.doctype= ''SO''
and c.idclass = sp.id and sp.tree IN (select tree from supermag.sacardclass where tree like ''%''||:P_GROUP_TREE||''%'')
group by c.article, c.name, d.createdat
order by 2;';
end if;
24.08.2015 10:33
akonev
 
Цитата:
xray84 насчет вьюхи supermag.svcardtreesplit: используя ее не все карточки выходят..только некоторые! например у меня группа FOOD имеет TREE= '63.', результат простой выборки пустая таблица (select c.article, c.name, sp.tree from supermag.smcard c , supermag.svcardtreesplit sp where c.idclass = sp.id and sp.tree = '63.'). Где то может еще есть вьюшка где все все есть разделы карточек?
условие неверное. так выходят только карточки, которые лежат в самой группе FOOD, но не в её подгруппах. строго говоря, в группе с подгруппами карточек вообще не надо бы иметь. на них можно иногда извилины узлом заявязать, пока поймешь, почему количество карточек в группе не совпадает с суммарным количеством карточек в подгруппах. правильнее всего считать такое размещение карточек в группе ошибкой.

варианты правильных условий:
Код:
-- дерево начинается с подходящей группы первого уровня. 
-- точку в группе считайте для такого условия ОБЯЗАТЕЛЬНОЙ. 
-- иначе по запросу типа sp.tree like '1%' отберутся и группа '1.' и группы '11.', '12.', '13.',... , '145.',... - всё, что начинается с единицы.
select c.article, c.name, sp.tree
  from supermag.smcard c, supermag.svcardtreesplit sp
 where c.idclass = sp.id
   and sp.tree like '63.%'
Код:
-- svcardtreesplit удобен тем, что разбирает классификатор по уровням.
-- в данном случае указываем, что группа первого уровня именно 63., 
-- а дальше может быть (или не быть) что угодно. 
-- мы проверяем только первый уровень классификатора.
select c.article, c.name, sp.tree
  from supermag.smcard c, supermag.svcardtreesplit sp
 where c.idclass = sp.id
   and sp.Item1 = '63.'
Часовой пояс GMT +3, время: 21:01.

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