|   |   | 
| 
 | Как найти верхний элемент справочника Номенклатура | ☑ | ||
|---|---|---|---|---|
| 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) ок благодарствую     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |