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

06.08.21

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

 

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

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

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

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

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

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

 

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

См. также

Сервисы интеграции без Шины и интеграции

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

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

13.03.2024    3285    dsdred    16    

65

Как готовить и есть массивы

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

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

24.01.2024    7673    YA_418728146    25    

69

Планы обмена VS История данных

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

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

11.12.2023    7895    dsdred    43    

116

1С-ная магия

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

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

06.10.2023    20221    SeiOkami    46    

125

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

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

14.09.2023    14159    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    10523    YA_418728146    7    

149

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    7065    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kolya_tlt 86 15.11.20 16:28 Сейчас в теме
1. Спасибо за статью. Классно было бы если б показали пример на ERP без модификации типовых объектов и снятия с замка.
2. Гуляет нейминг процедур. В последнем случае ЗадатьПараметрыВыбораСотрудника, а УстановитьОграничениеСтатуса, хотя и там и там задаются (тоже звучит костляво, лучше что-то типа Определить) параметры выбора
3. Зачем-то "фонит" ЭтаФорма, кажется можно убрать
4. Добавляя "м" в 2020 вы выдаете себя, что пишете код 1С уже очень давно :) где-то есть этот префикс, где-то нет :(
2. Eugen-S 395 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 295 17.11.20 12:38 Сейчас в теме
(2) Сколько уже раз учили... Венгерская нотация неприменима в 1С. Почерк тоже рекомендую поправить под стандарты разработки от 1С. Пригодится на новом месте работы.
Соглашения при написании кода
5. John_d 5516 16.11.20 10:49 Сейчас в теме
(1)
по п.1 посмотрите тут https://infostart.ru/1c/articles/1152528/
там в качестве примера КА2, но думаю в ERP тоже самое
3. kolya_tlt 86 15.11.20 20:29 Сейчас в теме
(2) п.3 скорее вы не понимаете и перестраховываетесь
п.4 это моветон или с какого префикса у вас переменна с типом "Макет"?
4. Eugen-S 395 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 849 03.12.21 14:30 Сейчас в теме
(12) Очень хороший механизм иногда сильно "упрощающий жизнь",
но имеет один недостаток - пользователь не имеет возможности отключить отбор (в форме выбора)...
11. Eugen-S 395 03.12.21 14:31 Сейчас в теме
(10) AnryMc, а это не всегда и недостаток.
Оставьте свое сообщение