В процессе разработки на платформе 1С:Предприятие часто возникают задачи, связанные с работой со структурой подчиненности справочников. Рассмотрим, как правильно сформировать запрос для выборки элементов группы и всех её подгрупп, а также обсудим лучшие практики выполнения массовых изменений данных.
Для того чтобы получить все элементы, входящие в конкретную группу справочника, включая вложенные элементы на всех уровнях иерархии, наиболее эффективным инструментом является оператор В ИЕРАРХИИ. Этот механизм позволяет избавиться от сложных переборов и лишних условий в коде.
Рассмотрим пример запроса, который позволяет отобрать элементы, принадлежащие определенной группе:
ВЫБРАТЬ
Т1.Ссылка КАК Ссылка
ИЗ
Справочник.КонтактныеЛица КАК Т1
ГДЕ
Т1.Ссылка В ИЕРАРХИИ (&СсылкаГруппы)
Разберем важные детали этого решения:
Справочники.КонтактныеЛица.НайтиПоНаименованию("Не для СРМ").В ИЕРАРХИИ берет на себя всю логику поиска подчиненных объектов, что делает код лаконичным и быстрым.Дерево значений, добавление ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ позволит системе автоматически построить структуру дерева в итоговом объекте. Однако, если вам нужен простой список для последующей обработки (например, для удаления тегов), использовать итоги не обязательно — это может быть избыточно.Когда возникает задача изменить большое количество элементов (например, очистить «Тег» у всех контактов в определенной группе), важно подойти к вопросу профессионально. Часто начинающие разработчики пытаются реализовать это в событии ПриСозданииНаСервере или через формы списков, что является плохой практикой.
Рассмотрим, почему это опасно и как сделать лучше:
Регламентное задание. Это позволит выполнять очистку или изменение данных в фоновом режиме по расписанию (например, ночью), не мешая работе пользователей.Если вам необходимо произвести очистку данных, следуйте этому алгоритму:
В ИЕРАРХИИ) и в цикле устанавливает нужные значения или очищает поля.ЖурналРегистрации. Это поможет быстро понять, сколько элементов было обработано и не возникло ли ошибок.Подводя итог: работа с иерархией должна опираться на возможности языка запросов, а массовые изменения данных — на асинхронные механизмы (регламентные задания или фоновые задачи), чтобы система оставалась отзывчивой и стабильной.