Как открыть форму выбора с множественным выбором в управляемом приложении 1С

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

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

Передача параметров при открытии формы

Для того чтобы стандартная или пользовательская форма выбора открылась с поддержкой выделения нескольких строк, необходимо передать в нее специальный параметр системного расширения — МножественныйВыбор со значением Истина.

Разберем простой пример открытия формы подбора элементов:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.СписокНоменклатуры);

В приведенном примере третьим параметром функции ОткрытьФорму передается элемент-владелец (в данном случае Элементы.СписокНоменклатуры). После выбора значений платформа автоматически вызовет событие ОбработкаВыбора у владельца или самой формы.

Режим многократного подбора без закрытия формы

Если требуется организовать режим подбора, при котором форма выбора не должна закрываться после нажатия кнопки «Выбрать», к параметрам следует добавить ЗакрыватьПриВыборе = Ложь. Это позволит пользователю порциями выбирать нужные позиции и отправлять их в документ или список.

Посмотрим на пример настройки такого вызова:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("ПараметрВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);

ФормаПодбора = ОткрытьФорму("Документ.М_Отгрузка.ФормаВыбора", ПараметрыФормы, Элементы.СписокДокументовДляПечати);

Обработка результата на стороне вызывающей формы

Проанализируем особенности получения результатов выбора. Когда параметр МножественныйВыбор установлен в значение Истина, открытая форма возвращает выбранные данные не в виде одиночной ссылки, а в виде объекта типа Массив.

В обработчике события ОбработкаВыбора обязательно проверяйте тип полученного значения:


&НаКлиенте
Процедура ОбработкаВыбора(ЗначениеВыбора, ИсточникВыбора)
    Если ТипЗнч(ЗначениеВыбора) = Тип("Массив") Тогда
        Для Каждого ЭлементИзСписка Из ЗначениеВыбора Цикл
            // Логика обработки каждого выбранного элемента
        КонецЦикла;
    ИначеЕсли ЗначенияЗаполнены(ЗначениеВыбора) Тогда
        // Обработка одиночной ссылки
    КонецЕсли;
КонецПроцедуры

Важные настройки в открываемой форме

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

  1. Режим выделения в таблице: У элемента таблицы динамического списка свойство РежимВыделения должно быть установлено в значение РежимВыделенияТаблицы.Множественный. Если установлено значение Одиночный, выделить несколько строк клавишами Shift или Ctrl не удастся.
  2. Параметр «РежимВыбора»: При открытии произвольной формы списка (вместо стандартной формы выбора) убедитесь, что передаете параметр РежимВыбора = Истина, иначе форма откроется в режиме обычного просмотра без кнопки выбора.
  3. Асинхронный вызов: Избегайте использования устаревших модальных методов (таких как ОткрытьФормуМодально()). Используйте немодальный метод ОткрытьФорму() с обработкой результата через события формы или объект ОписаниеОповещения.
← На главную