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