Как в запросе получить всех родителей

1 способ

ВЫБРАТЬ
	СпрНоменклатура.Ссылка КАК Ссылка
ИЗ
	Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
	СпрНоменклатура.Ссылка = &Ссылка
ИТОГИ ПО
	Ссылка ТОЛЬКО ИЕРАРХИЯ

Результат:

2 способ (более оптимальный по производительности)

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

Результат:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: