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