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

06.08.21

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

 

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

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

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

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

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

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

 

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

См. также

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

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

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

13.03.2024    2567    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5925    dsdred    55    

83

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

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

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

24.01.2024    5878    YA_418728146    25    

68

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

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

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

11.12.2023    6979    dsdred    36    

113

1С-ная магия

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

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

06.10.2023    19077    SeiOkami    46    

118

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

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

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

14.09.2023    12781    human_new    27    

76

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

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

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

28.08.2023    9410    YA_418728146    6    

143

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

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

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

20.08.2023    6530    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kolya_tlt 86 15.11.20 16:28 Сейчас в теме
1. Спасибо за статью. Классно было бы если б показали пример на ERP без модификации типовых объектов и снятия с замка.
2. Гуляет нейминг процедур. В последнем случае ЗадатьПараметрыВыбораСотрудника, а УстановитьОграничениеСтатуса, хотя и там и там задаются (тоже звучит костляво, лучше что-то типа Определить) параметры выбора
3. Зачем-то "фонит" ЭтаФорма, кажется можно убрать
4. Добавляя "м" в 2020 вы выдаете себя, что пишете код 1С уже очень давно :) где-то есть этот префикс, где-то нет :(
2. Eugen-S 389 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 5409 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 389 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 389 03.12.21 14:31 Сейчас в теме
(10) AnryMc, а это не всегда и недостаток.
Оставьте свое сообщение