Имя: Пароль:
1C
1С v8
Выбрать запросом номенклатуру по уровню
,
0 Торин
 
29.08.12
13:43
Уважаемые коллеги. Собссно сабж -- возможно или нет? И ежели возможно, то как?
Задачка такая -- УТ 10.3, немного доработанная. Продажники устанавливают скидки для дистрибьюторов для групп номенклатуры, причем группы могут быть вложенными. Необходимо чтобы в случае нескольких скидок действовала та, которая установлена на группу "самого нижнего" уровня. Задачку я решил, но путем "доработки" результата запроса. Вопрос - можно ли это было сделать в самом запросе?
1 Ахиллес
 
29.08.12
13:45
Группа самого нижнего уровня это просто Родитель. Или вопрос в чём?
2 andrewks
 
29.08.12
13:45
в общем случае, в рамках одного статического запроса - нет.
3 Торин
 
29.08.12
13:46
Не самого нижнего для этой номенклатуры, а самого нижнего из тех, для которого установлена скидка...
4 Ursus maritimus
 
29.08.12
13:46
Если известна максимально возможная вложенность то можно, если нет, то надо думать
5 Торин
 
29.08.12
13:47
(2) а если например известно максимальное количество уровней иерархии?
6 Торин
 
29.08.12
13:47
(4) известна...
7 andrewks
 
29.08.12
13:47
8 andrewks
 
29.08.12
13:47
(5) тогда можно
9 Ursus maritimus
 
29.08.12
13:47
(4)+Подумал. Можно если и не известно
10 Торин
 
29.08.12
13:47
максимальная вложенность - 4 уровня
11 andrewks
 
29.08.12
13:48
(9) кот в студию
12 Торин
 
29.08.12
13:48
(9) да, очень бы хотелось...
13 olegves
 
29.08.12
13:49
(0) возможно при ограничении уровней вложенности справочника
ВЫБОР Когда Родитель.Скидка>0 Тогда Родитель.Скидка
 ИНАЧЕ ВЫБОР КОГДА ЕСТЬNull(Родитель.Родитель.Скидка,0)>0 ТОГДА Родитель.Родитель.Скидка
...

и так далее
14 Ursus maritimus
 
29.08.12
13:49
(11,12) Даром за амбаром
15 andrewks
 
29.08.12
13:50
(14) не сделаешь
16 vmv
 
29.08.12
13:50
(0) счас тебе напишут 100500 вариантов, приведут архивные темы с дикими вложениями и неоптимальнымы соединениями и т.д., но все это чепуха, которая нагибает систему на больших таблицах.

Когда стоит такая задача, я просто заводу реквизит число "Уровень" в таблице БД. Затем в модуле объекта безусловно и всегда его определяю и устанавливаю в ПередЗаписью.

Далее в любом запросе(СКД не в счет - она умеет вычислять уровень) я просто и легко получаю уровень без бубна.
17 olegves
 
29.08.12
13:50
(13) + только для последнего иначе надо какое-то значение указать
18 Торин
 
29.08.12
13:52
(16) наверное, это правильнее, но... я не один прог в компании и любое изменение структуры метаданных надо согласовыватьс Ит-директором...
(17) это-то понятно...
хорошо, буду пробовать
19 vmv
 
29.08.12
13:53
+(16) если реквизит префиксовать например Адд_Уровень и его инициализацию вынести в подписчик, то типовой справочник "Номеклатура" фактически не модифицирован и его можно спокойно обовлять типовыми релизами
20 andrewks
 
29.08.12
13:54
(18) 1. шчтобы не нагибать структуру имеющихся метаданных, можно завести отдельный регистр сведений, заполнять его регламентом, и уже потом с ним соединять
21 vmv
 
29.08.12
13:58
(20) тогда контроль достоверности данных об уровне будет крайне мал. Ибо то что в объекте - это в объекте, а то что в регистре - хз.

Числовой реквизит Число(3, 0) позволит иметь 999 уровней, хотя хватит и Число(2, 0) - для 99% таблиц и Число(1,0) для 98% таблиц.

Это адкое наращивание веса таблицы? не смешите мои яйца
22 andrewks
 
29.08.12
13:59
(21) я не говорил ничего про вес таблицы, окстись. я предложил это на случай, если ТС наткнётся на полное непонимание со стороны ИТ-дира необходимости добавления такого реквизита в сам справочник
23 vmv
 
29.08.12
14:01
(22) адекватные логичные люди всегда поймут и взвесят доводы от различных варинатов решения проблемы и примут правильное решение, а ежели они упираються рогом в ограниченное понимание системы и взаимосвязей в ней, то таким людям место в горах - с козлами
24 andrewks
 
29.08.12
14:04
(23) золотые слова. только не всегда все начальники абсолютно адекватны и хорошо разбираются в предмете одновременно
25 Serg_1960
 
29.08.12
15:01
(24) +1 "Я начальник, ты - дурак. Ты начальник, я - дурак" :( народная примета :)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.