Заметка об использовании В ИЕРАРХИИ()

16.05.14

Разработка - Запросы

Очень специфическая задача, в которой мне захотелось использовать В ИЕРАРХИИ()


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

С ходу я написал примерно следующее:

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Ссылка
|ИЗ Справочник.Номенклатура КАК Номенклатура
|ГДЕ Ссылка = &Ссылка 
| И Ссылка В ИЕРАРХИИ(ВЫБРАТЬ
|                        Группа
|                     ИЗ РегистрСведений.Группы КАК Группы)
|;"

Далее происходит ветвление алгоритма в зависимости от того, пуст результат запроса или нет.
Естественно, при большом справочнике "Номенклатура" это будет работать медленно.

Гораздо эффективнее сделать так:

СписокРодителей = ПолучитьСписокРодителей(Ссылка);//Функция не является стандартной
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Группа
|ИЗ РегистрСведений.Группы КАК Группы
|ГДЕ Группа В (&СписокРодителей) 
|;"

Мораль: решение, кажущееся мне очевидным не всегда лучшее )

В ИЕРАРХИИ

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184667    1029    403    

967

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2198    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5731    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13135    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8215    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3191    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10797    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. davdykin 25 16.05.14 05:17 Сейчас в теме
Как мне кажется именно для этих целей есть Временные таблицы, и пакетные запросы.
arccos6pi; Артано; Re:аниматор; +3 Ответить
2. AgregatAvia 16.05.14 07:22 Сейчас в теме
и что же делает загадочная функция "ПолучитьСписокРодителей(Ссылка)"?
TrinitronOTV; BigB; kasper076; +3 Ответить
4. Поручик 4674 16.05.14 12:16 Сейчас в теме
(2) Я думаю, она получает список групп или родителей для переданной ссылки на что-то.
7. DrAku1a 1757 21.05.14 02:52 Сейчас в теме
(2)
Перем СЗ, Р;
СЗ = новый СписокЗначений();
Р = Ссылка.Родитель;
Пока не Р.Пустая() цикл
 СЗ.Добавить(Р);
 Р = Р.Родитель; 
КонецЦикла;
Возврат СЗ;
Показать
3. zqzq 25 16.05.14 08:41 Сейчас в теме
"В ИЕРАРХИИ" вообще медленное выражение, его даже для использования в РЛС запретили от греха подальше.

Надо бы посмотреть, в какой запрос SQL 1с-ка его разворачивает.

Вывод: "В ИЕРАРХИИ" кроме как в отчетах лучше нигде больше не использовать.
5. Re:аниматор 338 16.05.14 16:23 Сейчас в теме
Подскажите пжл как минус поставить за эту "полезную" статью?
artbear; itmind; cleaner_it; Puk2; arccos6pi; Makushimo; Артано; +7 Ответить
6. agrustny 19 16.05.14 16:51 Сейчас в теме
Зачем так позориться?
arccos6pi; +1 Ответить
8. Vit aka proger 107 21.05.14 08:59 Сейчас в теме
Т.е. в первом случае ты загружаешь в память ВСЮ номенклатуру и удивляешься, что этот запрос работает медленнее второго???
Я бы сделал как-то так:

"
|ВЫБРАТЬ
|&Ссылка КАК Номенклатура
|ПОМЕСТИТЬ ВТ;
|
|ВЫБРАТЬ
| ВТ.Номенклатура
|ИЗ ВТ КАК ВТ
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Группы КАК Группы
|ПО ВЫБОР
|когда ВТ.Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)тогда
|ЛОЖЬ
|когда Группы.Группа = ВТ.Номенклатура.Родитель тогда
|ИСТИНА
|когда ВТ.Номенклатура.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) тогда
|ЛОЖЬ
|когда Группы.Группа = ВТ.Номенклатура.Родитель.Родитель тогда
|ИСТИНА
.........
|ИНАЧЕ
|ЛОЖЬ
|КОНЕЦ
|;"
Оставьте свое сообщение