Каталог решений - Как скрыть "пустые группы" в списке выбора справочника при отборе

Как скрыть "пустые группы" в списке выбора справочника при отборе

Как скрыть "пустые группы" в списке выбора справочника при отборе

В наличии

Когда требуется открыть список справочника с отбором, например, по определённой группе, видны также все остальные группы с пустым содержимым. Мой способ избавления от ненужных групп ниже.

Категория:

Описание

Стоит задача — открыть форму выбора справочника по определённой группе.

Вроде, всё просто, делаем отбор по иерархии:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ГруппаКонструктора = Параметры.ГруппаКонструктора;
ПроверочныйЭлемент = Параметры.ПроверочныйЭлемент;

// установить отбор в форме выбора по иерархии
ОтборПоГруппе = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;

 

В форме выбора в настройке списка видим требуемый отбор по группе «Огурцы»:

 отбор по иерархии

 

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

Список справочника только с отбором

Если открывать группы, видим, что элементы присутствуют только в группе «Огурцы», остальные группы пусты. Отбор работает, но от лишних «пустых» групп хотелось бы избавиться. 

Есть решение от headMade в этой публикации //sale.itcity.ru/public/311136/ .

Я нашёл другой вариант условного оформления. Ниже вторая половина процедуры «ПриСозданииНаСервере» формы выбора справочника:

// установить видимость только в выбранной группе
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

УслОформГруппаНЕ = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
УслОформГруппаНЕ.Использование = Истина;
УслОформГруппаНЕ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе;
УслОформГруппаНЕ.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
УслОформПоГруппе = УслОформГруппаНЕ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УслОформПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
УслОформПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
УслОформПоГруппе.ПравоеЗначение = Параметры.ГруппаКонструктора;

Если ПроверочныйЭлемент.Пустая() Тогда
Элементы.Список.ТекущаяСтрока = ГруппаКонструктора;
Иначе
Элементы.Список.ТекущаяСтрока = ПроверочныйЭлемент;
КонецЕсли;

КонецПроцедуры

 

Данный код устанавливает параметр «Видимость» условного оформления динамического списка в значение «Нет» по следующему условию

Условие видимости групп справочника

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

 Результат

Видна только нужная группа, её подгруппы и их элементы. Что, собственно, и хотелось увидеть.

 

Upd:

shurik_shurik предложил лучшее, более понятное решение (комментарий № 5):

 

    ГруппаКонструктора = Справочники.Номенклатура.НайтиПоКоду("00-00000001");
    
    ОтборПоГруппе = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;

    ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
    
    ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина );
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать",Истина );
    
    ОтборПоГруппе = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;
Кстати, удаление отбора по группе совершенно не изменяет работу кода! Получается, строки 2-5 лишние.
has been added to your cart:
Оформление заказа