Для ограничения вывода элементов какого-нибудь справочника или перечисления при редактировании поля ввода можно воспользоваться программной установкой свойства элемента формы "ПараметрыВыбора", которое доступно, начиная с версии платформы 8.2.
Данное свойство представляет собой фиксированный массив элементов типа "ПараметрВыбора", позволяет организовать простую фильтрацию доступных для выбора элементов в поле ввода. При этом фильтрация будет работать как при автоподборе, так и при открытии формы выбора.
Рассмотрим пару типовых случаев применения этого свойства для установки отбора:
Отфильтруем ввод сотрудника по значению реквизита "Организация" на форме документа.
Фильтрация будет установлена у поля ввода "СписокСотрудниковСотрудник", в таблице документа.
Для выбора будут доступны только те сотрудники, у которых значения реквизита "Организация" совпадает со значением, установленным в реквизите "Организация" документа.
Вот так будет выглядеть процедура установки фильтра:
&НаКлиенте
Процедура ЗадатьПараметрыВыбораСотрудника()
Перем мПараметрыВыбора, Параметр;
мПараметрыВыбора = Новый Массив();
Если ЗначениеЗаполнено(ЭтаФорма.Объект.Организация) Тогда
Параметр = Новый ПараметрВыбора("Отбор.Организация", ЭтаФорма.Объект.Организация);
мПараметрыВыбора.Добавить(Параметр);
КонецЕсли;
ЭтаФорма.Элементы.СписокСотрудниковСотрудник.ПараметрыВыбора = Новый ФиксированныйМассив(мПараметрыВыбора);
КонецПроцедуры
Данная процедура вызывается в событии формы "ПриОткрытии" и в событии "ПриИзменении" поля ввода "Организация".
Не всегда достаточно одного значения сравнения, следующий случай продемонстрирует, как накладывать отбор по списку ссылок.
Фильтрация будет установлена у поля ввода "Статус".
Если у сохранённого документа установлен статус "Черновик", то список доступных элементов перечисления "Статусы" будет ограничен значениями "Черновик" и "НаРассмотрении".
&НаСервере
Процедура УстановитьОграничениеСтатуса()
Перем мПараметрыВыбора, Параметр, мДоступныеСтатусы;
мПараметрыВыбора = Новый Массив();
Если ЭтаФорма.Объект.Статус = Перечисления.Статусы.Черновик Тогда
мДоступныеСтатусы = Новый Массив();
мДоступныеСтатусы.Добавить(Перечисления.Статусы.Черновик);
мДоступныеСтатусы.Добавить(Перечисления.Статусы.НаРассмотрении);
Параметр = Новый ПараметрВыбора(
"Отбор.Ссылка",
Новый ФиксированныйМассив(мДоступныеСтатусы)
);
мПараметрыВыбора.Добавить(Параметр);
КонецЕсли;
ЭтаФорма.Элементы.Статус.ПараметрыВыбора = Новый ФиксированныйМассив(мПараметрыВыбора);
КонецПроцедуры
Данная процедура вызывается в событиях формы "ПриСозданииНаСервере" и "ПослеЗаписиНаСервере"
Кроме этого в параметрах выбора можно устанавливать свои нетиповые свойства:
&НаКлиенте
Процедура ЗадатьПараметрыВыбораСотрудника()
Перем мПараметрыВыбора, Параметр;
мПараметрыВыбора = Новый Массив();
Параметр = Новый ПараметрВыбора("ИспользоватьНетиповойОтбор", Истина);
мПараметрыВыбора.Добавить(Параметр);
ЭтаФорма.Элементы.СписокСотрудниковСотрудник.ПараметрыВыбора = Новый ФиксированныйМассив(мПараметрыВыбора);
КонецПроцедуры
Данный параметр потом можно будет извлечь из параметров формы выбора справочника "Сотрудники" (в событии "ПриСозданииНаСервере"), а также из параметров в обработчике "ОбработкаПолученияДанныхВыбора" в модуле менеджера справочника "Сотрудники".
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Перем ИспользоватьНетиповойОтбор;
Параметры.Свойство("ИспользоватьНетиповойОтбор", ИспользоватьНетиповойОтбор);
Если ИспользоватьНетиповойОтбор = Неопределено Тогда
Возврат;
КонецЕсли;
Если НЕ ИспользоватьНетиповойОтбор Тогда
Возврат;
КонецЕсли;
//Код нашего нетипового обработчика формирования данных для выбора, когда осуществляется ввод по строке
...
КонецПроцедуры