Получение первого уровня иерархии справочника (департамента/верхней группы)
Разработка - Универсальные функции
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Как-то задался целью получить первый уровень иерархии справочника (департамента/верхней группы) одним запросом, без обхода в цикле и без получения родителя, пока не получим пустую ссылку.
В результате написал эту обработку. Со временем она обросла "плюшками" и стала годной для публикации ) .
Возможна работа под произвольной конфигурацией (типы элементов формы: строка и произвольная ссылка).
Сообщение о верхнем элементе содержит ссылку объекта. (Клик-клик для открытия)
Обработка опирается только на метаданные. При открытии получает список справочников.
&НаСервере
Функция ПолучитьСписокСправочников()
МассивВозврата = Новый Массив;
Для Каждого МетаданныеСправочник Из Метаданные.Справочники Цикл
МассивВозврата.Добавить(МетаданныеСправочник.Имя);
КонецЦикла;
Возврат МассивВозврата;
КонецФункции
При выборе справочника - предлагает выбрать значение для обработки.
&НаКлиенте
Процедура ИмяСправочникаПриИзменении(Элемент)
Если ИмяСправочника <> "" Тогда
ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка."+ИмяСправочника);
Элементы.ПроверяемоеЗначение.ОграничениеТипа = ОписаниеТипа;
ПроверяемоеЗначение = ОписаниеТипа.ПривестиЗначение();
Иначе
ПроверяемоеЗначение = Неопределено;
КонецЕсли;
КонецПроцедуры
Результат - получение врхней иерархии и сообщение с ссылкой на группу.
&НаСервере
Функция ВернутьВерхнийУровеньИерархииНаСервере()
ЗапросПоИерархии = Новый Запрос;
ЗапросПоИерархии.Текст = "ВЫБРАТЬ
| Справочник.Ссылка КАК Ссылка
|ИЗ
| Справочник."+ИмяСправочника+" КАК Справочник
|ГДЕ
| Справочник.Ссылка В ИЕРАРХИИ(&ПроверяемоеЗначение)
|ИТОГИ ПО
| Ссылка ТОЛЬКО ИЕРАРХИЯ";
ЗапросПоИерархии.УстановитьПараметр("ПроверяемоеЗначение",ПроверяемоеЗначение);
Выборка = ЗапросПоИерархии.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
Иначе
Возврат Справочники[ИмяСправочника].ПустаяСсылка();
КонецЕсли;
КонецФункции
Обработка переделана под платформу 8.3.7.1759. Но сам код работает и на платформе 8.2
Вступайте в нашу телеграмм-группу Инфостарт