Множественный выбор в 1с без закрытия формы

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

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

  • Обычный (одиночный) выбор позволяет пользователю выбрать только один элемент. Чаще всего используется в полях ввода с кнопкой выбора или выпадающих списках.

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

Реализация множественного выбора в 1С

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

&НаКлиенте
Процедура Подбор(Команда)
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
	ОткрытьФорму("Справочник.Сотрудники.ФормаСписка", ПараметрыФормы, Элементы.Сотрудники);
КонецПроцедуры

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

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

В обработчике СотрудникиОбработкаВыбора в цикле перебирается коллекция подобранных сотрудников, и в случае, если сотрудника еще нет в документе, он добавляется в табличную часть.

На стороне открываемой формы справочника Сотрудники нам теперь нужно особым образом работать со списком. При создании на сервере мы настроим возможность множественного выбора в списке, а дальше нам понадобится обработать все выделенные строки. 

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

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОповеститьОВыборе(Значение);
КонецПроцедуры

При создании на  сервере определяется поведение формы – для одиночного выбора ее использовать или для множественного выбора, в зависимости от параметров. Далее в обработчике СписокВыборЗначения массив выбранных строк передается обратно в вызывающую форму документа, и там уже обрабатывается (см. выше).

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

пять × пять =

К НАЧАЛУ