Как установить список элементов справочника, доступных для выбора в управляемой форме?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в 1С:Управление торговлей 11 часто возникает задача ограничить выбор значений в поле ввода. Например, нам нужно, чтобы в документе СчетФактураВыданный при заполнении поля Руководитель пользователь видел не весь список сотрудников, а только тех, кто имеет соответствующие полномочия. Рассмотрим, как реализовать подобную логику, используя стандартные механизмы платформы.

Способ 1: Использование отборов в свойствах реквизита объекта

Чаще всего в типовых конфигурациях фильтрация осуществляется не в коде формы, а на уровне метаданных объекта. Это наиболее правильный подход, так как он обеспечивает консистентность данных во всей системе.

  1. Откройте конфигуратор и найдите в дереве метаданных нужный документ, например СчетФактураВыданный.
  2. Перейдите на вкладку Данные и откройте свойства реквизита, для которого требуется ограничение (в нашем случае — Руководитель).
  3. В окне свойств найдите раздел Параметры выбора.
  4. В этом поле вы можете задать жесткие условия отбора, например:

    Отбор.ОтветственноеЛицо = Руководитель

    Отбор.Владелец = Организация

Почему это эффективно? Когда мы устанавливаем отбор на уровне реквизита объекта, это правило начинает действовать везде, где используется данный реквизит. Вам не нужно дублировать код в каждой форме документа или отчете — система автоматически применит фильтр при открытии формы выбора справочника ОтветственныеЛицаОрганизаций.

Способ 2: Использование связей параметров выбора

Если список доступных значений должен динамически меняться в зависимости от другого поля на форме (например, при смене организации должен меняться список доступных руководителей), используйте Связи параметров выбора.

Для настройки выполните следующие действия:

  1. Откройте форму документа в конфигураторе.
  2. Выберите элемент формы, соответствующий вашему реквизиту.
  3. В палитре свойств найдите свойство Связи параметров выбора.
  4. В открывшемся окне добавьте новую связь:
    • Параметр: укажите параметр отбора справочника (например, Отбор.Владелец).
    • Путь к данным: выберите реквизит формы, значение которого будет передаваться в отбор (например, Объект.Организация).

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

Способ 3: Программное управление выбором

Если стандартных средств недостаточно для реализации сложного алгоритма (например, когда условие выбора невозможно выразить простым сравнением), используйте обработчик события НачалоВыбора.

Разберем пример программной реализации фильтрации:


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

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

В этом примере мы отключаем СтандартнаяОбработка, что позволяет нам полностью контролировать процесс открытия формы выбора. Мы формируем структуру ПараметрыОткрытия, куда передаем необходимые критерии фильтрации, и вызываем ОткрытьФорму с нашими настройками.

Заключение и советы

При выборе метода всегда отдавайте предпочтение способам в порядке возрастания сложности:

  1. Параметры выбора в свойствах реквизита — если отбор статический.
  2. Связи параметров выбора — если отбор зависит от других полей формы.
  3. Программный код в НачалоВыбора — если требуется сложная бизнес-логика, не поддерживаемая стандартными настройками УФ.

Помните, что использование типовых механизмов (связей и параметров) упрощает дальнейшую поддержку конфигурации и делает ее более предсказуемой при обновлениях.

← На главную