Отбор на управляемой форме из списка значений






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

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

В обработке весь код прокомментирован, ниже само описание создания отбора. 

Описание:

 

1. На форме создаем реквизит и на вкладке "Основные" выбираем тип "СписокЗначений".

2. На вкладке "Объект" тип значения, выбираем ссылку на необходимый справочник.

3. Создаем на форме еще один реквизит со строковым типом, и переносим его на форму. В свойствах реквизита перенесенного  на форму на вкладке "Использование" — КнопкаВыбора ставим "ДА", создаем событие НачалоВыбора

4. Для самой формы, в свойствах, устанавливаем на вкладке "Использование" — АвтоматическоеСохранениеДанныхВНастройках в значение Использовать и ставим галочки для созданных реквизитов, это для того чтобы при открытии обработки сохранялись предыдущие выбранные значения, а при открытии выбора пользователь видел галочки, которые устанавливал ранее.

При желании, можно в событии ПриОткрытии на клиенте описать установку нужного отбора с заранее выбранными значениями.

5. В модуле формы создаем функцию, которая возвращает СписокЗначений.

Описание возврата:

РезультатЗапроса = Запрос.Выполнить();
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"));

Возврат Список;

6. В обработчике ПриВыборе, который мы создали пишем следующее:

&НаКлиенте
Процедура НашРеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

//отключаем стандартную обработку события
СтандартнаяОбработка = Ложь;

//вернем наш СписокЗначений из созданной функции
НашСписокЗначений = ЗаполнитьСписок();

//Цикл для установки галочек ранее выбранных элементов пользователем, которые сохранились.
//Реквизит назвал СписокЗначений для примера
Для Каждого Элемент Из ЭтотОбъект.СписокЗначений Цикл
НайденныйЭл   = НашСписокЗначений.НайтиПоЗначению(Элемент.Значение);
НайденныйЭл.Пометка = Истина;
КонецЦикла;

//Обработка оповещение списка отбора, даем название форме отбора
ОповещениеПослеОтметкиЭлементов = Новый ОписаниеОповещения("ПослеОтметкиЭлементов", ЭтотОбъект);
НашСписокЗначений.ПоказатьОтметкуЭлементов(ОповещениеПослеОтметкиЭлементов, "Выбор номенклатуры");

КонецПроцедуры

Процедура оповещения:

//Обработка оповещения (не модальный вызов)
&НаКлиенте
Процедура ПослеОтметкиЭлементов(Элементы, Параметры) Экспорт

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

КонецПроцедуры

Как результат, мы получаем следующее:

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

Пользуйтесь!

Leave a Comment

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