Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий "НачалоВыбора", "Автоподбор")

06.08.21

Разработка - Механизмы платформы 1С

Зачастую возникает необходимость ограничить вывод элементов какого-нибудь справочника или перечисления при редактировании поля ввода (отфильтровать доступные для выбора элементы) эта публикация показывает простой и эффективный способ реализации этого.

Для ограничения вывода элементов какого-нибудь справочника или перечисления при редактировании поля ввода можно воспользоваться программной установкой свойства элемента формы "ПараметрыВыбора", которое доступно, начиная с версии платформы 8.2.

Данное свойство представляет собой фиксированный массив элементов типа "ПараметрВыбора", позволяет организовать простую фильтрацию доступных для выбора элементов в поле ввода. При этом фильтрация будет работать как при автоподборе, так и при открытии формы выбора.

Рассмотрим пару типовых случаев применения этого свойства для установки отбора:

Отфильтруем ввод сотрудника по значению реквизита "Организация" на форме документа.

Фильтрация будет установлена у поля ввода "СписокСотрудниковСотрудник", в таблице документа.
Для выбора будут доступны только те сотрудники, у которых значения реквизита "Организация" совпадает со значением, установленным в реквизите "Организация" документа.

Вот так будет выглядеть процедура установки фильтра:

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

Данная процедура вызывается в событии  формы "ПриОткрытии" и в событии "ПриИзменении" поля ввода "Организация".


Не всегда достаточно одного значения сравнения, следующий случай продемонстрирует, как накладывать отбор по списку ссылок.

Фильтрация будет установлена у поля ввода "Статус".

Если у сохранённого документа установлен статус "Черновик", то  список доступных элементов перечисления "Статусы" будет ограничен значениями "Черновик" и "НаРассмотрении".

&НаСервере
Процедура УстановитьОграничениеСтатуса()
	
	Перем мПараметрыВыбора, Параметр, мДоступныеСтатусы;
	
	мПараметрыВыбора = Новый Массив();
	
	Если ЭтаФорма.Объект.Статус = Перечисления.Статусы.Черновик Тогда
		
		мДоступныеСтатусы = Новый Массив();
		мДоступныеСтатусы.Добавить(Перечисления.Статусы.Черновик);
		мДоступныеСтатусы.Добавить(Перечисления.Статусы.НаРассмотрении);
		
		Параметр = Новый ПараметрВыбора(
				"Отбор.Ссылка",
		    	    	Новый ФиксированныйМассив(мДоступныеСтатусы)
			);
			
		мПараметрыВыбора.Добавить(Параметр);
	КонецЕсли;
	
	ЭтаФорма.Элементы.Статус.ПараметрыВыбора = Новый ФиксированныйМассив(мПараметрыВыбора);
	
КонецПроцедуры

Данная процедура вызывается в событиях  формы "ПриСозданииНаСервере" и "ПослеЗаписиНаСервере"

 

Кроме этого в параметрах выбора можно устанавливать свои нетиповые свойства:

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

Данный параметр потом можно будет извлечь из параметров формы выбора справочника "Сотрудники" (в событии "ПриСозданииНаСервере"), а также из параметров в обработчике "ОбработкаПолученияДанныхВыбора" в модуле менеджера справочника "Сотрудники".

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	Перем ИспользоватьНетиповойОтбор;
	
	Параметры.Свойство("ИспользоватьНетиповойОтбор", ИспользоватьНетиповойОтбор);
	
	Если ИспользоватьНетиповойОтбор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если НЕ ИспользоватьНетиповойОтбор Тогда
		Возврат;
	КонецЕсли;

//Код нашего нетипового обработчика формирования данных для выбора, когда осуществляется ввод по строке
...

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

 

Отбор Фильтр ПараметрыВыбора НачалоВыбора Автоподбор

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7441    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5942    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    17661    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11221    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23755    SeiOkami    48    

135

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18828    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14729    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kolya_tlt 88 15.11.20 16:28 Сейчас в теме
1. Спасибо за статью. Классно было бы если б показали пример на ERP без модификации типовых объектов и снятия с замка.
2. Гуляет нейминг процедур. В последнем случае ЗадатьПараметрыВыбораСотрудника, а УстановитьОграничениеСтатуса, хотя и там и там задаются (тоже звучит костляво, лучше что-то типа Определить) параметры выбора
3. Зачем-то "фонит" ЭтаФорма, кажется можно убрать
4. Добавляя "м" в 2020 вы выдаете себя, что пишете код 1С уже очень давно :) где-то есть этот префикс, где-то нет :(
2. Eugen-S 406 15.11.20 17:13 Сейчас в теме
(1)
kolya_tlt, на ERP, как и на любой другой типовой конфигурации, имеется механизм расширений. Добавляете нужную форму в расширение и делаете обработчики необходимых Вам событий в расширении (для этого как раз не нужно снимать с замка типовые объекты).

По п.3 считайте, что это особенности моего "почерка", всегда применяю конструкцию "ЭтаФорма" или "ЭтотОбъект" для обращения к реквизитам форм/объектов. Чтобы понимать, что я работаю с реквизитом формы/объекта, а не локальной переменной.

По п.4 префикс "м" я применяю для массивов. Есть такая тема, называется "Венгерская нотация", её суть использовать сокращения в начале имени переменной, которые обозначают её тип.
dva1c; Dnki; Prometeus2011; IgorS; +4 1 Ответить
7. TimurD 6 17.11.20 11:35 Сейчас в теме
(2) как-то давно назвал поля в таблице по Венгерской нотации (таблицы DBF), лет 6 назад. Сразу прилетело от начальства... Больше та кне делаю)))
8. PLAstic 296 17.11.20 12:38 Сейчас в теме
(2) Сколько уже раз учили... Венгерская нотация неприменима в 1С. Почерк тоже рекомендую поправить под стандарты разработки от 1С. Пригодится на новом месте работы.
Соглашения при написании кода
5. John_d 5891 16.11.20 10:49 Сейчас в теме
(1)
по п.1 посмотрите тут https://infostart.ru/1c/articles/1152528/
там в качестве примера КА2, но думаю в ERP тоже самое
3. kolya_tlt 88 15.11.20 20:29 Сейчас в теме
(2) п.3 скорее вы не понимаете и перестраховываетесь
п.4 это моветон или с какого префикса у вас переменна с типом "Макет"?
4. Eugen-S 406 15.11.20 21:08 Сейчас в теме
(3)
п.3 скорее вы не понимаете и перестраховываетесь
п.4 это моветон или с какого префикса у вас переменна с типом "Макет"?

kolya_tlt, как Ваши вопросы коррелируют с темой данной публикации?
Объясняю, данный код выложен не для того, чтобы кто-то упражнялся в процедуре Code Review.
Redempty; Anna_arbuz; dva1c; asupsam; JohnyDeath; Алексей Воробьев; Alfn; dnikolaev; tormozit; IgorS; duhh; +11 Ответить
6. fedorovd81 17.11.20 10:15 Сейчас в теме
Первый пример можно было через связь параметров выбора сделать.
asupsam; JesteR; +2 Ответить
9. avega67 22.11.20 22:46 Сейчас в теме
Так Eugen-S и не претендует на однозначность реализации, а демонстрирует один из способов решения. По-моему для общего развития очень полезно и интересно. Спасибо.
10. AnryMc 848 03.12.21 14:30 Сейчас в теме
(12) Очень хороший механизм иногда сильно "упрощающий жизнь",
но имеет один недостаток - пользователь не имеет возможности отключить отбор (в форме выбора)...
11. Eugen-S 406 03.12.21 14:31 Сейчас в теме
(10) AnryMc, а это не всегда и недостаток.
Оставьте свое сообщение