Получение элемента верхнего уровня в запросе.

1. PoZiTiFFF 925 26.11.13 21:06 Сейчас в теме
Здравствуйте. Задача довольно примитивная. Необходимо получить корневое подразделение (подразделение верхнего уровня). Вопрос поднимался уже не раз, но решения так наиболее оптимальное и красивое не удалось найти. Сам использовал работающий, но не совсем универсальный способ, зависящий от уровня вложенности иерархии:
ВЫБОР
	КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
		ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор
	ИНАЧЕ ВЫБОР
			КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
				ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель
			ИНАЧЕ ВЫБОР
					КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
						ТОГДА ДвижениеТМЦ.Ссылка.Инициатор.Родитель.Родитель
					ИНАЧЕ ВЫБОР
							КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
								ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель
							ИНАЧЕ ВЫБОР
									КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
										ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель
								КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
КОНЕЦ
Показать


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

Но если нас эта информация интересует внутри какого то сложного запроса, то использовать данный метод мы не можем. Отсюда вопрос к гуру 1С, кто всё-таки какой способ применяет, если необходимо получить элемент верхнего уровня.
MariusUrsus; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DoctorRoza 26.11.13 21:14 Сейчас в теме
(1) PoZiTiFFF,
Но если нас эта информация интересует внутри какого то сложного запроса, то использовать данный метод мы не можем.


Это еще почему? Любую ТЗ всегда можно запихнуть в любое место запроса!
deniseek77; Bukaska; +2 Ответить
3. deniseek77 86 26.11.13 23:56 Сейчас в теме
(2) DoctorRoza, Тз можно использовать в запросе, есть ограничение-типы колонок должны быть обязательно типизированными и обязателен менеджер временных таблиц!
5. PoZiTiFFF 925 27.11.13 06:36 Сейчас в теме
(2)(3)(4) Нет, мы не говорим об использовании Таблицы значений или внешнего кода (вне запроса), интересует именно получение элемента верхнего уровня внутри запроса!!! То есть никакого универсального метода, способа не существует?
6. ZergKRSK 130 27.11.13 06:40 Сейчас в теме
(5) PoZiTiFFF, обсасывалась тема стопицот раз. Если нужно часто получать корневого родителя то необходимо создать соответствующий реквизит. Для существующих элементов заполнить реквизит обработкой, для внось создаваемых/изменяемых сделать автоматическое заполнение данного реквизита.
7. PoZiTiFFF 925 27.11.13 07:01 Сейчас в теме
(6) ZergKRSK, я же и указал, что тема поднималась не раз и я это видел, но ответа на свой вопрос не встретил, создавать доп реквизит и прочее - здорово, конечно, но меня как будто все не слышат или не хотят слышать, поэтому еще раз: получить внутри запроса родителя верхнего уровня нельзя???
4. PRO100_NigGaZ 119 27.11.13 00:26 Сейчас в теме
Функция НайтиКорень(Элем)
	Если НЕ ЗначениеЗаполнено(Элем.Родитель) Тогда
		Возврат Элем;
	Иначе
		Возврат НайтиКорень(Элем.Родитель);
	КонецЕсли;
КонецФункции

Показать

так не пойдет?
Andreyyy; HIVvich; mie24; Shoostrik; PoZiTiFFF; +5 Ответить
8. ZergKRSK 130 27.11.13 07:23 Сейчас в теме
Чукча явно не читатель...
9. PoZiTiFFF 925 27.11.13 07:35 Сейчас в теме
(8) ZergKRSK, когда не можешь дать полноценный ответ или уходишь от темы, проще всего перейти на оскорбления, ибо доводы про чукчу я могу и направить в твою сторону, Ты понимаешь, какая цель была? Я просто хочу получить ответ на вопрос, можно или нельзя сделать это в запросе? С использованием доп реквизита нет никаких проблем, но хотелось сделать это именно внутри запроса без дополнительных реквизитов или строк кода по созданию Таблицы значений...
VladC#; Merkalov; Ya1Cko; Quasar; +4 Ответить
10. ZergKRSK 130 27.11.13 08:02 Сейчас в теме
(9) PoZiTiFFF, полноценный ответ был дан. И Вы наверняка встречали его ранее в других темах, посвященных данному вопросу.
11. Megaiff 20.12.23 02:17 Сейчас в теме
"https://its.1c.ru/db/metod8dev/content/2659/hdoc"
Получение всех родителей элемента

В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример:
Forest_Owl; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот