|
Как найти верхний элемент справочника Номенклатура | ☑ | ||
---|---|---|---|---|
0
pro3ri
21.08.15
✎
13:44
|
Добрый день!
Можно ли это сделать запросом? ВЫБРАТЬ РАЗЛИЧНЫЕ ПриходныйОрдерНаТоварыТовары.Номенклатура, ПриходныйОрдерНаТоварыТовары.Ссылка, ПриходныйОрдерНаТоварыТовары.Номенклатура.БазоваяЕдиницаИзмерения, ПриходныйОрдерНаТоварыТовары.Номенклатура.Родитель ИЗ Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары ГДЕ ПриходныйОрдерНаТоварыТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания И ПриходныйОрдерНаТоварыТовары.Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) так не выходит справочник многоуровневой, не все же риходныйОрдерНаТоварыТовары.Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) писать... Есть универсальное решение? |
|||
1
ДенисЧ
21.08.15
✎
13:45
|
Нет.
Транзитивное замыкание в рамках языка запросов неразрешимо |
|||
2
butterbean
21.08.15
✎
13:46
|
(0) можешь добавить реквизит родительВерхнегоУровня в справочник и поддерживать его в актуальном состоянии
|
|||
3
DCKiller
21.08.15
✎
13:51
|
Я знаю, как это сделать 2-мя запросами, с выгрузкой в ТЗ, а вот чтоб через 1... вряд ли.
|
|||
4
Enterprise
21.08.15
✎
13:54
|
А так не взлетит что ли?
ВЫБРАТЬ РАЗЛИЧНЫЕ ПриходныйОрдерНаТоварыТовары.Номенклатура, ПриходныйОрдерНаТоварыТовары.Ссылка, ПриходныйОрдерНаТоварыТовары.Номенклатура.БазоваяЕдиницаИзмерения, ПриходныйОрдерНаТоварыТовары.Номенклатура.Родитель ИЗ Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары ГДЕ ПриходныйОрдерНаТоварыТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ИТОГИ ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ |
|||
5
pro3ri
21.08.15
✎
14:05
|
(4) нет, в поле ПриходныйОрдерНаТоварыТовары.Номенклатура.Родитель показывает промежуточные папки иерархии
|
|||
6
За1СьЭтотМир
21.08.15
✎
14:08
|
(0) Сформируй предварительно соответствие
"Любая папка в группе " - "Самая верхняя папка" И запихни её в свой запрос. Самое простое ИМХО. |
|||
7
Enterprise
21.08.15
✎
14:08
|
(5) Родитель там не нужен, надо убрать.
|
|||
8
Enterprise
21.08.15
✎
14:13
|
(5) Если обходить результат запроса по группировкам, то получишь желаемое
|
|||
9
pro3ri
21.08.15
✎
14:36
|
написал ЗапросАгрегат = Новый Запрос;
ЗапросАгрегат.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура, | ПриходныйОрдерНаТоварыТовары.Ссылка, | ПриходныйОрдерНаТоварыТовары.Номенклатура.БазоваяЕдиницаИзмерения |ИЗ | Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары |ГДЕ | ПриходныйОрдерНаТоварыТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания |ИТОГИ ПО | Номенклатура ТОЛЬКО ИЕРАРХИЯ"; ЗапросАгрегат.УстановитьПараметр("ДатаНачала", НачПериода); ЗапросАгрегат.УстановитьПараметр("ДатаОкончания", КонецДня(КонПериода)); РезультатЗапроса = ЗапросАгрегат.Выполнить(); ВыборкаУровень1 = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаУровень1.Следующий() Цикл сообщить(ВыборкаУровень1); КонецЦикла; так работает. благодарю. |
|||
10
User_Agronom
21.08.15
✎
15:07
|
(0) Была подобная задача недавно.
Пришел к выводу, что запросом нельзя. Тестировал разные циклы. Самым оптимальным (по скорости работы) получился такой вариант: Функция НайтиВерхнийУровень(Элемент) Если Элемент.Родитель = Справочники.Номенклатура.ПустаяСсылка() тогда Возврат Элемент Иначе Возврат НайтиВерхнийУровень(Элемент.Родитель) КонецЕсли; КонецФункции Алгоритм был такой: получал список элементов (по условиям) запросом. Выгружал в ТЗ. Добавлял колонку "Верхний уровень". Циклом пробегал по ТЗ, заполнял колонку с помощью функции. Полученную ТЗ передавал в итоговый запрос параметром. (9) Но мне нужно было соответствие: элемент - верхний уровень. |
|||
11
Enterprise
21.08.15
✎
15:21
|
(10) "Но мне нужно было соответствие: элемент - верхний уровень".
В чем сложность после запроса сделать соответствие? |
|||
12
User_Agronom
21.08.15
✎
15:40
|
(11) Я после запроса и сделал. ТЗ из двух колонок.
И ТЗ передал в итоговый запрос параметром. |
|||
13
Enterprise
21.08.15
✎
16:01
|
(12) После запроса в (4) надо просто обойти результат запроса и заполнить соответствие, вот я про что)
|
|||
14
Sserj
21.08.15
✎
16:05
|
(10) Да ну. Когда это рекурсия стала быстрее обычного цикла?
Неужели это будет медленнее: Пока Истина Цикл Если Элемент.Родитель = Справочники.Номенклатура.ПустаяСсылка() тогда Прервать; Иначе Элемент = Элемент.Родитель; КонецЕсли; КонецЦикла |
|||
15
User_Agronom
21.08.15
✎
16:09
|
(13) Я не это имел ввиду. Мне для итогового запроса нужны были пары. Нужно было выстроить элементы по иерархии, но исключив промежуточные уровни.
И было именно так: Первый запрос возвращал список ссылок (без итогов и прочих вещей). Затем цикл и полученная ТЗ передавалась в итоговый запрос. (14) Сам был удивлён. Мы с коллегой несколько раз тестировали. Хотя может частный случай был. |
|||
16
Ildarovich
21.08.15
✎
16:10
|
Избитая тема. Решение есть. Вот статья раз:
http://catalog.mista.ru/public/158512/. Вот статья два: http://catalog.mista.ru/public/160707/. В ней пример 3 (прародители). Вот обсуждение с примером запроса: Как получить родителя верхней группы спр.подразделенияорганизаций зуп 2.5 . |
|||
17
pro3ri
22.08.15
✎
09:34
|
(16) ок благодарствую
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |