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