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