[ТЕМА ЗАКРЫТА]
13.08.2015 08:07
xray84
 
Всем доброго дня! Прошу хелпа!
Имеется в СМ отчет такой: Документооборот - Реестр складских требований. Мы запросили в С+ исходик его (он на Oracle Reports). Хочу переделать его так чтобы были только артикулы, название, и кол-во этого артикула которое во всех складских перечисляются (сумму). Форму поправил а как сделать чтобы артикулы только с количеством выходили не пойму...ценники освоил нормально, а в отчетах еще плаваю. Как бы освоить их? Где мануал поподробнее найти?
13.08.2015 09:31
vdm
 
Ценники у вас тоже в reports?
Тогда в чем разница. Ценник - тот-же отчет с мелкой печатной формой и минимумом вычислений.
Не получится - выложи исходник, без него не могу внятно сказать куда что нужно добавить.
Пара простых "уроков" по reports на русском гуглятся, а по внутренним частностям ничего лучше встроенной англ. справки не видел.
14.08.2015 07:33
xray84
 
все получилось )) Теперь нужно убрать повторяющиеся артикулы.. Какая фунция может есть применимо к полю Repeating Frame? В запросе distinct пробовал результата 0
14.08.2015 07:49
OlegON
 
Исходник или хотя бы запрос где? "Я что-то сделал и у меня не получилось?", как узнать?
14.08.2015 07:54
xray84
 
Вот он:
Хранилище

В нем все артикулы вылазят в заданном числе Складского требования. Артикулы и кол-во берутся из smspec.
14.08.2015 15:04
vdm
 
C компиляцией у меня проблемы.
На первый взгляд - в группе G_article убрать разбивку с quantity и itemprice, добавить столбец групповой обработки (сумма) по полю quantity и его печатать.
Возможно нужно еще удалить фактически неиспользуемые группы G_docid, G_GROUP_TREE.
Миниатюры
Нажмите на изображение для увеличения
Название: qty_sum.JPEG
Просмотров: 313
Размер:	35.2 Кб
ID:	4887  
17.08.2015 07:08
xray84
 
все лишнее убрал, все равно тоже самое..в запросе тоже убрал не нужные столбцы..
17.08.2015 12:43
xray84
 
В общем, доделал! свой запрос в пример пользовательского отчета вставил..Проще мне показалось так.
20.08.2015 12:45
xray84
 
образовалась еще одна задача: нужно чтобы в стандартном диалоге ввода параметров работал раздел "Группы товаров (классификатор,ассортимент)". В разделе repport builder , User Parameters я так понял значения P_GROUP_ALL и P_GROUP_TREE берутся из классификатора..как вот их связать теперь с отчетом? Чтобы фильтровалось на основе классификатора карточек...

вот запрос:
Цитата:
select c.article, c.name, sum (s.quantity), d.createdat
from supermag.smspec s, supermag.smdocuments d, supermag.smcard c
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' group by c.article, c.name, d.createdat order by 2;
вот исходник: Хранилище
21.08.2015 12:16
xray84
 
supermag.RepTools.ClassName(:group_tree) - вот эта функция что означает? и где ее в каком месте отчета применить?
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.'
24.08.2015 10:41
akonev
 
Цитата:
xray84 вот так решил задачу:
в целом, это неверное и "опасное" условие.
Код:
where tree like ''%''||:P_GROUP_TREE||''%''
1) отчет будет работать, только если в него передали ОДНУ группу.
2) процентик перед параметром может сыграть злую шутку:
мы передали '63.'
отобралась группа '63.' со всеми подгруппами.
И!!!!!
отобрались все вложенные группы с кодом '63.' на любом уровне классификатора. например, '35.63.', '2.45.63.', '65.23.63.',...
24.08.2015 12:53
xray84
 
Да верно (( что же остается? весь запрос переписывать ? или может вместо :P_GROUP_TREE другое условие брать? Что то ум за разум уже заходит.....
24.08.2015 13:03
akonev
 
Цитата:
xray84 Да верно (( что же остается? весь запрос переписывать ? или может вместо :P_GROUP_TREE другое условие брать? Что то ум за разум уже заходит.....
Вот это, объективно, самый правильный путь.

Цитата:
vdm Насчет фильтра по карточкам - посмотри запрос исходного отчета по складским требованиям и вставь в свой запрос в соответствующие места supermag.RepTools.ClassString(). С учетом того, что в ф-ии supermag.RepTools.ClassString(3,'c') строка 'c' - это алиас таблицы smcard, у тебя будет 'crd'.
Либо писать свою процедуру, передавать ей все параметры, в ней разбирать строку со списком групп и формировать отдельные запросы по каждой группе из списка. Результат писать во временную таблицу, в отчете выбирать из неё.
25.08.2015 05:53
xray84
 
спс!!!!! вот рабочий вариант:
Цитата:
supermag.RepTools.LoadClass(:P_Group_All, :P_BGroup, :P_Group_Tree);
if :P_FLAG1 = '0' then
:P_SQL := 'select distinct c.article, c.name, sum (s.quantity)
from supermag.smspec s, supermag.smdocuments d, supermag.smcard c, supermag.sacardclass sp
where 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 s.article = c.article ' ||
supermag.RepTools.ClassString(3,'c') ||
' group by c.article, c.name
order by 2;';
end if;
25.08.2015 06:09
xray84
 
почему то правда только на моем компе запускается..на других такая ошибка:
ORA-00904: ''T_CLASS".ARTICLE": invalid identifier and s.article = c.article ==> =t_class.article....

как ее побороть? Появилась после добавления supermag.RepTools.ClassString(3,'c')
25.08.2015 15:09
xray84
 
раздать гранты я так думаю нужно?....
25.08.2015 15:28
vdm
 
Скорее у тебя разные параметры передаются в отчет на своей машине и на других.
Посмотри конечный запрос который формируется у тебя и не у тебя.
В AfterPForm
Код:
srw.message(999,  :P_SQL);
return (TRUE);
25.08.2015 16:07
xray84
 
на моем выдает:
Цитата:
in (select article from supermag.ttidgroup)
на всех остальных:
Цитата:
=t_class.article
25.08.2015 17:33
xray84
 
а в чем причина передачи разных параметров? Звонил сегодня в С+, там посоветовали установить билдер..но это не помогло...запрос в техподдержку отправлял, там ответили что "В Супермаге нет API-функций. Мы не рекомендуем использовать встроенные функции Супермага"
26.08.2015 09:50
vdm
 
Уверен, что в диалоге запуска отчета одинаковые товарные группы и параметры группировки?
t_class подставляет RepTools.ClassString при каких-то условиях товарных групп. Чего-то во from у тебя не хватает.
Техподдержка в принципе имеет право не отвечать по использованию встроенных функций - они недокументированы.


Опции темы


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

 

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