Как реализовать множественный выбор в выпадающем списке на управляемой форме 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на управляемых формах часто возникает задача предоставить пользователю возможность выбрать сразу несколько значений из выпадающего списка (например, подбор нескольких позиций номенклатуры, контрагентов или статусов). Рассмотрим, с какими ограничениями платформы 1С можно столкнуться при реализации этой задачи и какие технические варианты решения существуют.

Ограничения платформы и штатный механизм множественного выбора

Проанализируем работу стандартного поля ввода. В релизах платформы «1С:Предприятие 8.3» до версии 8.3.22 включительно стандартное поле ввода с типом СписокВыбора или при использовании метода ВыбратьИзСписка() не поддерживает режим выбора с галочками прямо в выпадающем меню. Клик по любому пункту списка приводит к закрытию меню и переходу к выбранному значению.

Начиная с релиза 8.3.23, разработчики платформы добавили штатную поддержку множественного выбора в элементы типа «Поле ввода». В современных релизах можно настраивать режим множественного выбора прямо в свойствах реквизита формы, после чего в выпадающем списке автоматически отображаются флажки, а выбранные элементы выводятся в самом поле ввода в виде компактных тегов или строки с разделителями.

Если разработка ведется на более ранних версиях платформы (например, 8.3.6 или 8.3.10), необходимо применять альтернативные способы и обходные решения.

Вариант 1. Использование модальных и асинхронных диалогов отметок

Простейший способ предоставить пользователю возможность установить галочки напротив списка значений — вызов системных функций ОтметитьЭлементы() или ПоказатьОтметкуЭлементов().

Разберем алгоритм работы этого решения:

  1. На форме создается реквизит с типом СписокЗначений.
  2. При создании формы на сервере для данного списка устанавливается состав типов элементов:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.Реквизит1.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
КонецПроцедуры

При нажатии на кнопку выбора или по событию поля ввода вызывается асинхронный метод ПоказатьОтметкуЭлементов(). Функция открывает диалог с галочками, где пользователь отмечает необходимые элементы, после чего результат передается в процедуру обработки оповещения.

Преимущество: простота реализации и использование встроенных механизмов 1С.

Недостаток: выбор происходит в отдельном диалоговом окне, а не строго внутри выпадающего списка под полем ввода.

Вариант 2. Использование всплывающей группы или таблицы значений

Если заказчику требуется выбор именно под полем ввода без визуального перехода к новым окнам, разберем вариант создания динамической подформы:

  1. Разместим под полем ввода группу элементов формы (или таблицу значений без заголовка и подвала).
  2. Установим отображение группы в виде всплывающего окна (Pop-up) или настроим управление свойством Видимость.
  3. При событии начала выбора или изменения поля ввода показываем данную таблицу со списком значений и флажками.
  4. После завершения отметки пользователем считываем выбранные строки, обновляем текстовое представление поля и скрываем таблицу.

Такой approach имитирует поведение родного выпадающего списка и полностью удовлетворяет требованиям к компактности интерфейса.

Вариант 3. Использование элемента «Поле HTML-документа»

Для создания кастомного выпадающего элемента с чекбоксами можно использовать элемент формы Поле HTML-документа:

  1. В элемент загружается HTML/JS-код с тегом <select multiple> или сторонним JavaScript-компонентом выпадающего списка.
  2. Передача данных из HTML-формы обратно в контекст 1С реализуется через обработку перехода по навигационной ссылке в событии OnNavigationRequest или через вызов клиентских процедур.

Этот вариант требует знаний HTML и JavaScript, однако позволяет полностью настроить внешнее оформление списка под любой дизайн.

Вариант 4. Паттерн «Теги» и последовательный ввод

Рассмотрим еще один интерфейсный подход, не требующий разработки сложной верстки:

  1. Пользователь вводит наименование элемента в обычное поле ввода с поиском по строке.
  2. При выборе значения оно добавляется в коллекцию (список или таблицу), а само поле ввода очищается и сохраняет фокус.
  3. Выбранные элементы отображаются рядом с полем в виде гиперссылок (тегов) в поле типа ФорматированнаяСтрока.
  4. Удаление элементов выполняется кликом по соответствующему тегу-гиперссылке.

Таким образом, выбор подходящего метода зависит от версии платформы 1С:Предприятие и интерфейсных требований заказчика.

← На главную