При разработке интерфейсов на управляемых формах часто возникает задача предоставить пользователю возможность выбрать сразу несколько значений из выпадающего списка (например, подбор нескольких позиций номенклатуры, контрагентов или статусов). Рассмотрим, с какими ограничениями платформы 1С можно столкнуться при реализации этой задачи и какие технические варианты решения существуют.
Проанализируем работу стандартного поля ввода. В релизах платформы «1С:Предприятие 8.3» до версии 8.3.22 включительно стандартное поле ввода с типом СписокВыбора или при использовании метода ВыбратьИзСписка() не поддерживает режим выбора с галочками прямо в выпадающем меню. Клик по любому пункту списка приводит к закрытию меню и переходу к выбранному значению.
Начиная с релиза 8.3.23, разработчики платформы добавили штатную поддержку множественного выбора в элементы типа «Поле ввода». В современных релизах можно настраивать режим множественного выбора прямо в свойствах реквизита формы, после чего в выпадающем списке автоматически отображаются флажки, а выбранные элементы выводятся в самом поле ввода в виде компактных тегов или строки с разделителями.
Если разработка ведется на более ранних версиях платформы (например, 8.3.6 или 8.3.10), необходимо применять альтернативные способы и обходные решения.
Простейший способ предоставить пользователю возможность установить галочки напротив списка значений — вызов системных функций ОтметитьЭлементы() или ПоказатьОтметкуЭлементов().
Разберем алгоритм работы этого решения:
СписокЗначений.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Реквизит1.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
КонецПроцедуры
При нажатии на кнопку выбора или по событию поля ввода вызывается асинхронный метод ПоказатьОтметкуЭлементов(). Функция открывает диалог с галочками, где пользователь отмечает необходимые элементы, после чего результат передается в процедуру обработки оповещения.
Преимущество: простота реализации и использование встроенных механизмов 1С.
Недостаток: выбор происходит в отдельном диалоговом окне, а не строго внутри выпадающего списка под полем ввода.
Если заказчику требуется выбор именно под полем ввода без визуального перехода к новым окнам, разберем вариант создания динамической подформы:
Видимость.Такой approach имитирует поведение родного выпадающего списка и полностью удовлетворяет требованиям к компактности интерфейса.
Для создания кастомного выпадающего элемента с чекбоксами можно использовать элемент формы Поле HTML-документа:
<select multiple> или сторонним JavaScript-компонентом выпадающего списка.OnNavigationRequest или через вызов клиентских процедур.Этот вариант требует знаний HTML и JavaScript, однако позволяет полностью настроить внешнее оформление списка под любой дизайн.
Рассмотрим еще один интерфейсный подход, не требующий разработки сложной верстки:
ФорматированнаяСтрока.Таким образом, выбор подходящего метода зависит от версии платформы 1С:Предприятие и интерфейсных требований заказчика.