Получение первого уровня иерархии справочника (департамента/верхней группы)

05.01.16

Разработка - Универсальные функции

Получение первого уровня иерархии справочника (департамента/верхней группы) одним запросом. Произвольный справочник / произвольное значение / произвольная конфигурация. Обработка опирается только на метаданные.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ОпределитьПервыйУровеньИерархии
.epf 6,75Kb ver:1.0
1 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Как-то задался целью получить первый уровень иерархии справочника (департамента/верхней группы) одним запросом, без обхода в цикле и без получения родителя, пока не получим пустую ссылку.

В результате написал эту обработку. Со временем она обросла "плюшками" и стала годной для публикации ) .

Возможна работа под произвольной конфигурацией (типы элементов формы: строка и произвольная ссылка).
Сообщение о верхнем элементе содержит ссылку объекта. (Клик-клик для открытия) 

Обработка опирается только на метаданные. При открытии получает список справочников.

&НаСервере
Функция ПолучитьСписокСправочников()
	
	МассивВозврата = Новый Массив;
	
	Для Каждого МетаданныеСправочник Из Метаданные.Справочники Цикл
		МассивВозврата.Добавить(МетаданныеСправочник.Имя);
	КонецЦикла;
	
	Возврат МассивВозврата;
	
КонецФункции

При выборе справочника - предлагает выбрать значение для обработки.

&НаКлиенте
Процедура ИмяСправочникаПриИзменении(Элемент)
	
	Если ИмяСправочника <> "" Тогда
		ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка."+ИмяСправочника); 
		Элементы.ПроверяемоеЗначение.ОграничениеТипа = ОписаниеТипа; 
		ПроверяемоеЗначение = ОписаниеТипа.ПривестиЗначение(); 
	Иначе
		ПроверяемоеЗначение = Неопределено;
	КонецЕсли;

КонецПроцедуры

Результат - получение врхней иерархии и сообщение с ссылкой на группу.

&НаСервере
Функция ВернутьВерхнийУровеньИерархииНаСервере()
	
	ЗапросПоИерархии = Новый Запрос;
	ЗапросПоИерархии.Текст = "ВЫБРАТЬ
	                         |	Справочник.Ссылка КАК Ссылка
	                         |ИЗ
	                         |	Справочник."+ИмяСправочника+" КАК Справочник
	                         |ГДЕ
	                         |	Справочник.Ссылка В ИЕРАРХИИ(&ПроверяемоеЗначение)
	                         |ИТОГИ ПО
	                         |	Ссылка ТОЛЬКО ИЕРАРХИЯ";
	ЗапросПоИерархии.УстановитьПараметр("ПроверяемоеЗначение",ПроверяемоеЗначение);
	
	Выборка = ЗапросПоИерархии.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	Иначе 
		Возврат Справочники[ИмяСправочника].ПустаяСсылка();
	КонецЕсли;
	
КонецФункции

 Обработка переделана под платформу 8.3.7.1759. Но сам код работает и на платформе 8.2

Вступайте в нашу телеграмм-группу Инфостарт

Иерархия первый элемент справочник справочника департамент папка верхняя первая

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4827    Abysswalker    11    

47

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    9027    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    57918    dimanich70    85    

175

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8138    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    72665    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    10113    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 216 06.01.16 18:07 Сейчас в теме
А что, условие

ГДЕ
     Родитель = ЗНАЧЕНИЕ(Справочники.МойСправочник.ПустаяСсылка)


уже не работает?
3. Alexander.Shvets 224 11.01.16 16:00 Сейчас в теме
(1) WKBAPKA, А если уровней иерархии 15? И у разных элементах их может быть как 3 так и 8... Данное выражение уместно лишь при одинаковой глубине иерархии у всех элементах.

В случае тех же департаментов структура древовидная, с разными уровнями иерархии.
2. hibico 268 11.01.16 12:23 Сейчас в теме
Думаю, так корректнее будет:
ЗапросПоИерархии.Текст = "ВЫБРАТЬ
                             |    Справочник.Ссылка КАК Ссылка
                             |ИЗ
                             |    Справочник."+ИмяСправочника+" КАК Справочник
                             |ГДЕ
                             |    Справочник.Ссылка = &ПроверяемоеЗначение
                             |ИТОГИ ПО
                             |    Ссылка ТОЛЬКО ИЕРАРХИЯ";
kabantus; +1 Ответить
4. Alexander.Shvets 224 11.01.16 16:08 Сейчас в теме
(2) hibico, Да, если мы решили идти только вверх. В случае необходимости получения нижних элементов (подчиненных), то можно оставить "В ИЕРАРХИИ"(если в запросе мы дальше будем работать со всей структурой).

Например нам нужно нарисовать блок-схему одного подразделения. "В ИЕРАРХИИ" Вернет все значения, относящиеся к нему. Сравнение с ссылкой вернет только все, что "сверху". Вот и все отличие.

В любом случае предоставил механизм, а как его крутить - решать вам =)))
kabantus; +1 Ответить
5. Дон Кихот 01.12.21 09:21 Сейчас в теме
Искал решение подобной задачи, в итоге сделал так:

ВЫБРАТЬ
	Справочник.Ссылка КАК Ссылка
ИЗ
	Справочник.Прайс КАК Справочник
ГДЕ
	Справочник.ЭтоГруппа
	И Справочник.Родитель = ЗНАЧЕНИЕ(Справочник.Прайс.ПустаяСсылка)


Запрос получает все верхние элементы со значением это группа, может кому пригодится.
6. lhfrjy 17.06.22 15:57 Сейчас в теме
(5)
ГДЕ
Справочник.ЭтоГруппа

Что за чушь?
Для отправки сообщения требуется регистрация/авторизация