Как скрыть "пустые группы" в списке выбора справочника при отборе
Когда требуется открыть список справочника с отбором, например, по определённой группе, видны также все остальные группы с пустым содержимым. Мой способ избавления от ненужных групп ниже.
- Описание
- Подробнее
Описание
Стоит задача — открыть форму выбора справочника по определённой группе.
Вроде, всё просто, делаем отбор по иерархии:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ГруппаКонструктора = Параметры.ГруппаКонструктора;
ПроверочныйЭлемент = Параметры.ПроверочныйЭлемент;
// установить отбор в форме выбора по иерархии
ОтборПоГруппе = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;
В форме выбора в настройке списка видим требуемый отбор по группе «Огурцы»:

Однако сам список справочника выглядит неожиданно:

Если открывать группы, видим, что элементы присутствуют только в группе «Огурцы», остальные группы пусты. Отбор работает, но от лишних «пустых» групп хотелось бы избавиться.
Есть решение от headMade в этой публикации //sale.itcity.ru/public/311136/ .
Я нашёл другой вариант условного оформления. Ниже вторая половина процедуры «ПриСозданииНаСервере» формы выбора справочника:
// установить видимость только в выбранной группе
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
УслОформГруппаНЕ = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
УслОформГруппаНЕ.Использование = Истина;
УслОформГруппаНЕ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе;
УслОформГруппаНЕ.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
УслОформПоГруппе = УслОформГруппаНЕ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УслОформПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
УслОформПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
УслОформПоГруппе.ПравоеЗначение = Параметры.ГруппаКонструктора;
Если ПроверочныйЭлемент.Пустая() Тогда
Элементы.Список.ТекущаяСтрока = ГруппаКонструктора;
Иначе
Элементы.Список.ТекущаяСтрока = ПроверочныйЭлемент;
КонецЕсли;
КонецПроцедуры
Данный код устанавливает параметр «Видимость» условного оформления динамического списка в значение «Нет» по следующему условию

Результат такого оформления ниже:

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