0. YPermitin 4041 16.07.19 12:18 Сейчас в теме

Что делает "В ИЕРАРХИИ" в запросе?

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. insurgut 197 16.07.19 13:26 Сейчас в теме
А в чем мораль? В ИЕРАРХИИ работает ровно так, как задумано, и любые попытки оптимизации обычно только снижают производительность.

Ну а то, что может сделать пользователь прямого отношения к этому оператору не имеет никакого. Хуже или лучше сам оператор "В ИЕРАРХИИ" в зависимости от действий пользователя не становится.
3. YPermitin 4041 16.07.19 13:36 Сейчас в теме
(1) морали в моих статьях нет :)

Оператор все же может влиять на производительность. Посмотрите ссылки из статьи. Наверное, самый наглядный пример - это его появление в отчете на СКД. Пример на сайте gilev.ru.
6. kolya_tlt 11 16.07.19 13:47 Сейчас в теме
(3) мораль такова что данную конструкцию лучше запретить и выпилить из платформы. от неё одни не счастья.
8. insurgut 197 16.07.19 14:59 Сейчас в теме
(6) точно так же как и иерархию в справочниках/счетах учета. Дерево значений - тоже грохнуть. :)
12. for_sale 772 16.07.19 16:52 Сейчас в теме
(6)
Да-да, и ножи кухонные запретить - по новостям говорили, что одна женщина мужа таким ножом зарезала! И телеграм тоже запретить - там одни террористы! И вообще - давайте всё запретим!!! Тогда ничего не будет происходить и не будет никаких несчастий))
w.r.; korppinen; +2 Ответить
9. insurgut 197 16.07.19 15:03 Сейчас в теме
(3) но это же очевидно, как и то, что альтернативы ей для иерархических справочников нет.
2. VmvLer 16.07.19 13:27 Сейчас в теме
4. YPermitin 4041 16.07.19 13:36 Сейчас в теме
5. ellavs 622 16.07.19 13:40 Сейчас в теме
Спасибо. Приятно смотреть, когда скриншоты с такими хорошими пояснениями.
taiwanchik; kuzyara; YPermitin; +3 Ответить
7. ids79 3802 16.07.19 14:35 Сейчас в теме
Спасибо.
Как всегда все понятно и доходчиво.
Я как раз в процессе написания статьи про иерархию в СКД.
YPermitin; +1 Ответить
17. YPermitin 4041 16.07.19 20:37 Сейчас в теме
(7) ждем с нетерпением!

Спасибо!
10. Dach 275 16.07.19 15:15 Сейчас в теме
Просто оставлю это здесь:

Теорию, которую нужно знать, чтобы понять логику работы любого дерева, хранящегося в плоской таблице:

https://infostart.ru/public/158512/

"В ИЕРАРХИИ" и "УПОРЯДОЧИТЬ ПО ИЕРАРХИЯ" / "ИТОГИ ПО ИЕРАРХИЯ"

https://infostart.ru/public/417128/
YPermitin; +1 Ответить
28. ildarovich 6678 26.08.19 11:28 Сейчас в теме
В (10) уже давали ссылку на идею, позволяющую обойтись без конструкции "В ИЕРАРХИИ" при решении многих задач на иерархию. Теперь нашел возможность несколько усовершенствовать тот подход и написал новую статью, связанную с затронутой темой. Статья называется "Иерархия без "В ИЕРАРХИИ".
YPermitin; +1 Ответить
29. YPermitin 4041 26.08.19 18:45 Сейчас в теме
(28) спасибо Вам огромное!

Плюсы уже доставлены :)
11. s22 19 16.07.19 15:56 Сейчас в теме
Лучше бы сделали в конфе теневую таблицу

Родитель | подчинены(любого уровня вложенности)

тогда все сведется к внутреннему соединению.
В запросах будет использоваться прозрачно.
FAMыч; SlavaKron; YPermitin; +3 Ответить
14. kote 499 16.07.19 17:38 Сейчас в теме
(11) не вариант, т.к. будет нужна будет еще одна промежуточная таблица подчиненности.. и сложности с выводом одного уровня подчиненности, не?
18. s22 19 16.07.19 20:39 Сейчас в теме
(14)
) не вариант, т.к. будет нужна будет еще одна промежуточная таблица подчиненности.. и сложности с выводом одного уровня подчиненности, не?

какие сложности?
"промежуточная таблица подчиненности"? зачем Есть справочник. Есть эта таблица.
22. kote 499 17.07.19 16:48 Сейчас в теме
(18) Как это реализуется в таблицах: одна запись (потомок) ссылается на одну запись (родитель)

Теперь, Вы пишите

Родитель | подчинены(любого уровня вложенности)


Т.е. тут либо родитель должен содержать все ссылки на потомков, либо потомки - на всех родителей

Теперь вопрос: как можно реализовать то, что Вы предлагаете без промежуточных таблиц?
Для каждого уровня вложенности создать еще одно поле? Тогда иерархические запросы будут совсем неудобны для использования..

Или есть еще какой-то способ?

Расскажите, если не сложно - как это должно выглядеть, пожалуйста.
23. s22 19 17.07.19 16:56 Сейчас в теме
(22)
Т.е. тут либо родитель должен содержать все ссылки на потомков, либо потомки - на всех родителей

2 поля.
Родитель и все его потомки
таблица теневая, т.е. делается на уровне платформы.

Запрос будет сводиться к внутреннему соединению.
13. Froloid 66 16.07.19 16:57 Сейчас в теме
Когда то крутилась в голове мысль "Как СУБД отрабатывает конструкцию "В иерархии"" (а ещё и конструкцию "Количество (Различные ..)". Но в условиях ненадобности интерес не довёл дело до трассировки запросов на стороне СУБД.

Однако гипотетически как получить иерархию было понятно и самым сложным нюансом казался "Как определить максимальную глубину справочника".

И вот в данном разборе я не вижу ответа на главный вопрос конструкции "В иерархии". В описании формулировка:
Поскольку на третьем уровне иерархии не присутствует ни одна группа справочника, то данный запрос более не выполняется


Чтобы выяснить это "Поскольку", на ум приходит только рекурсивные запросы начиная с корня для каждого последующего уровня, до тех пор, пока не получим пустой результат. То есть конструкция, которая не может быть отработана за одно обращение к СУБД (точнее одним запросом со стороны 1С).

Хорошо бы раскрыть этот ключевой нюанс данной конструкции.
RickyTickyTok; ogoneksergei; YPermitin; +3 Ответить
15. Dach 275 16.07.19 18:01 Сейчас в теме
(13)

Платформа при трансляции текста запроса задает глубину вложенности исходя из настроек справочника

на ум приходит только рекурсивные запросы начиная с корня


посмотрите (10), в первой публикации как раз этот вопрос наиболее полно и раскрыт
YPermitin; +1 Ответить
20. Froloid 66 17.07.19 11:25 Сейчас в теме
(15) То есть в указанном примере в конфигурации установлено ограничение по максимальной глубине в 3 уровня? С трудом верится.
21. Dach 275 17.07.19 12:47 Сейчас в теме
(20) а Вы и не верьте)) возьмите профайлер и потрассируйте запросы, меняя уровень иерархии
16. Dorosh 134 16.07.19 18:47 Сейчас в теме
Принято ругать конструкцию В ИЕРАРХИИ за тормознутость, но родной для скуля CTE работает еще медленнее. Как-то движимый любопытством написал и протестировал скульный запрос с CTE и 1с с иерархией. Оба запроса возвращали одинаковый набор данных из спр Контрагенты. Иерархия победила, за счет параллелизма. Рекурсивный запрос принципиально выполняется в 1 поток.
YPermitin; +1 Ответить
19. logarifm 1046 17.07.19 08:41 Сейчас в теме
Наглядные примеры того как не стоит обращаться из избыточными операторами. Но иногда без этого не обойтись. Ведь пользователю глубоко пофигу на производительность системы. Это наши проблемы. По этому еще интересней, когда В ИЕРАРХИИ и список групп они указывают.

Вообще автор молодец уже много статей написано по производительности и моменты работы Движка SQL. Ждем последующих статей...

ЗЫ. От себя еще хочу добавить СКД серьезно теряет производительность при группировке колонок (ведь за кулиссами там происходит нечто таинственное)
24. FreeArcher 85 18.07.19 06:53 Сейчас в теме
А если мы используем конструкцию В ИЕРАРХИИ (&П), но в параметр подставляется не группа, а элемент. Запросы будут усложнятся или платформа поймет, что эта запись равнозначна =&П?
25. SlavaKron 18.07.19 09:31 Сейчас в теме
(24) Есть ведь справочники с иерархией элементов, то есть родителем одного элемента является другой элемент.
26. FreeArcher 85 18.07.19 10:20 Сейчас в теме
(25) Есть. Но у меня вопрос когда элемент не имеет подчиненных.
Я хочу понять делая универсальным вызовы в запросе используя В или В ИЕРАРХИИ предполагая, что параметры могут принять массив значений или группу утяжеляем ли мы план запросов или 1С "умная" и она поймет данную ситуацию?
27. Evil Beaver 6247 18.07.19 11:24 Сейчас в теме
(44) Смотришь на автора, сначала плюсуешь, потом читаешь.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Екатеринбург
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день


Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день