[ТЕМА ЗАКРЫТА]
Опции темы
21.08.2015 15:03  
akonev
P_GROUP_ALL
это про группировку результатов, не про отбор карточек.
 
"Спасибо" akonev от:
21.08.2015 15:03  
akonev
supermag.RepTools.ClassName(:group_tree)
принимает путь до группы классификатора
возвращает путь до группы классификатора и наименование группы
например:
вызов: supermag.RepTools.ClassName('99.9.2.')
результат: 99.9.2. Хлеб черный
 
"Спасибо" akonev от:
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
 
"Спасибо" akonev от:
21.08.2015 15:20  
vdm
Насчет фильтра по карточкам - посмотри запрос исходного отчета по складским требованиям и вставь в свой запрос в соответствующие места supermag.RepTools.ClassString(). С учетом того, что в ф-ии supermag.RepTools.ClassString(3,'c') строка 'c' - это алиас таблицы smcard, у тебя будет 'crd'.
 
"Спасибо" vdm от:
21.08.2015 15:34  
akonev
Цитата:
Сообщение от vdm
Насчет фильтра по карточкам - посмотри запрос исходного отчета по складским требованиям и вставь в свой запрос в соответствующие места supermag.RepTools.ClassString(). С учетом того, что в ф-ии supermag.RepTools.ClassString(3,'c') строка 'c' - это алиас таблицы smcard, у тебя будет 'crd'.
перед ClassString надо же сначала кого-то из LoadClass вызвать?
 
21.08.2015 15:35  
vdm
А у него есть.
 
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.'
 
"Спасибо" akonev от:
 


Опции темы



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

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