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