Иногда нужно получить дерево групп справочника запросом.
Для этого удобно использовать итоги по иерархии.
Допустим у нас есть дерево:
А
--Б
--В
----Г
----Д
Е
--Ж
--З
----И
------Ю
--------Ф
------Я
--------Х
----К
----Л
М
--Н
Пусть мы выполнили какой-то запрос и получили, что нам походят элементы из некоторого списка &Список, например Д и И.
Варианты отображения иерархии
Существуют два варианта отображения иерархии, в которую попадают элементы из списка Список:
1. Без подчиненных. А
--В
Е
--З
2. С подчиненными. А
--В
Е
--З
----И
------Ю
Иерархия с подчиненными
Для отображения иерархии в случае с подчиненными, нам достаточно получить родителей всех элементов, расположенных на нижнем уровне иерархии и сгруппировать их по иерархии:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т1.Ссылка.Родитель КАК Ссылка
ИЗ
Справочник.Задача КАК Т1
ГДЕ
Т1.Ссылка В ИЕРАРХИИ(&Ссылки) И 0 В (ВЫБРАТЬ Количество(*) ИЗ Справочник.Задача КАК Т2 ГДЕ Т1.Ссылка=Т2.Родитель)
ИТОГИ ПО
Ссылка ТОЛЬКО ИЕРАРХИЯ
Для иерархии групп и элементов:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т1.Ссылка.Родитель КАК Ссылка
ИЗ
Справочник.Задача КАК Т1
ГДЕ
Т1.Ссылка В ИЕРАРХИИ(&Ссылки) И Т1.ЭтоГруппа=ложь
ИТОГИ ПО
Ссылка ТОЛЬКО ИЕРАРХИЯ
Иерархия без подчиненных
В данном случае сложнее. 1С неправильно группирует по иерархии, она плодит дубли.
Код запроса будет таким:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т1.Ссылка.Родитель КАК Ссылка
ИЗ
Справочник.Задача КАК Т1
ГДЕ
Т1.Ссылка В (&Ссылки)
ИТОГИ ПО
Ссылка ТОЛЬКО ИЕРАРХИЯ
Полученное дерево нужно будет обработать функцией для удаления лишних дублей:
Функция обУбратьОшибкиИтоговПоИерархии(Строки, Поле="Ссылка", Родитель=Неопределено) Экспорт//Убираем все элементы, равные текущему
Всего=Строки.Количество();
Для Инд=1По Всего Цикл
Стр=Строки[Всего-Инд];
Зн=Стр[Поле];
Если Родитель<>Неопределено И Зн=Родитель Тогда
Строки.Удалить(Стр);
Иначе
обУбратьОшибкиИтоговПоИерархии(Стр.Строки, Поле, Зн);
КонецЕсли;
КонецЦикла;
КонецФункции
...
ВычСправочникДерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
обУбратьОшибкиИтоговПоИерархии(ВычСправочникДерево.Строки);
12 мая в 11:00
компания «1-й Архитектор бизнеса» открывает все секреты
3 офиса в Москве, более 400 сотрудников, более 30 отделов,
более 700 профессиональных сертификатов от фирмы «1С»
1АБ имеет статусы 1С:Франчайзи, Сервисный центр, Центр компетенции по производству,
Центр компетенции по бюджетному учету, Центр сертифицированного обучения, является
участником совместного проекта фирмы «1С» «1С:Консалтинг». С 2002 года успешно проходит
аудиты на соответствие системе качества ISO 9001:2000.
Вы хотите заниматься крупными проектами по автоматизации на 8.0?
- тогда вы - 1С-программист для проектов, з/п. 2500 - 3000 у. е.
У вас есть знания, но практики не так много, как хотелось бы? Вы хотите научиться сходу решать разнообразные задачи любой сложности?
- тогда вы - программист 1С в отдел внедрения, з/п от 1000 до 2000 у.е.
Вас привлекает розничная торговля? Вы хотите автоматизировать супермаркеты, и не только с помощью ПО, но и применяя торговое оборудование? Вы хотите воочию видеть результаты своего труда?
- тогда вы - программист 1С в отдел внедрения торговых систем, з/п от 500 до 2000 у.е.