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