Стоит задача - открыть форму выбора справочника по определённой группе.
Вроде, всё просто, делаем отбор по иерархии:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ГруппаКонструктора = Параметры.ГруппаКонструктора;
ПроверочныйЭлемент = Параметры.ПроверочныйЭлемент;
// установить отбор в форме выбора по иерархии
ОтборПоГруппе = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;
В форме выбора в настройке списка видим требуемый отбор по группе "Огурцы":
Однако сам список справочника выглядит неожиданно:
Если открывать группы, видим, что элементы присутствуют только в группе "Огурцы", остальные группы пусты. Отбор работает, но от лишних "пустых" групп хотелось бы избавиться.
Есть решение от headMade в этой публикации //infostart.ru/public/311136/ .
Я нашёл другой вариант условного оформления. Ниже вторая половина процедуры "ПриСозданииНаСервере" формы выбора справочника:
// установить видимость только в выбранной группе
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
УслОформГруппаНЕ = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
УслОформГруппаНЕ.Использование = Истина;
УслОформГруппаНЕ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе;
УслОформГруппаНЕ.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
УслОформПоГруппе = УслОформГруппаНЕ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УслОформПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
УслОформПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
УслОформПоГруппе.ПравоеЗначение = Параметры.ГруппаКонструктора;
Если ПроверочныйЭлемент.Пустая() Тогда
Элементы.Список.ТекущаяСтрока = ГруппаКонструктора;
Иначе
Элементы.Список.ТекущаяСтрока = ПроверочныйЭлемент;
КонецЕсли;
КонецПроцедуры
Данный код устанавливает параметр "Видимость" условного оформления динамического списка в значение "Нет" по следующему условию
Результат такого оформления ниже:
Видна только нужная группа, её подгруппы и их элементы. Что, собственно, и хотелось увидеть.
Upd:
shurik_shurik предложил лучшее, более понятное решение (комментарий № 5):
ГруппаКонструктора = Справочники.Номенклатура.НайтиПоКоду("00-00000001"); ОтборПоГруппе = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии; ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора; ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить(); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина ); ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать",Истина ); ОтборПоГруппе = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии; ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;
Кстати, удаление отбора по группе совершенно не изменяет работу кода! Получается, строки 2-5 лишние.