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

05.01.16

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
ОпределитьПервыйУровеньИерархии
.epf 6,75Kb ver:1.0
1
1 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    23031    dimanich70    81    

147

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    4336    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    22223    atdonya    25    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    5828    ke.92@mail.ru    17    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15821    YA_418728146    8    

170

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3883    62    progmaster    9    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18878    174    sapervodichka    112    

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

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


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

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

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

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

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


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

Что за чушь?
Оставьте свое сообщение