Как правильно установить отбор по владельцу в форме выбора для обычного приложения?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Разбор типичной ошибки

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

Решение с использованием свойства ПараметрОтборПоВладельцу

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

Давайте разберем по шагам, как правильно написать этот код:

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

Посмотрим на пример реализации данного кода:


ФормаВыбора = Справочники.Договоры.ПолучитьФормуВыбора();
// Устанавливаем отбор по владельцу через свойство расширения списка
ФормаВыбора.ЭлементыФормы.СправочникСписок.ПараметрОтборПоВладельцу = Контрагент;

// Опционально: запрещаем пользователю изменять установленный отбор
ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь;

// Открываем форму для модального выбора
Результат = ФормаВыбора.ОткрытьМодально();

Альтернативные способы настройки отбора

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

Разберем подробнее работу с НастройкаОтбора:


ФормаВыбора = Справочники.Договоры.ПолучитьФормуВыбора();
Список = ФормаВыбора.ЭлементыФормы.СправочникСписок;

// Устанавливаем значение фильтра
Список.НастройкаОтбора.Владелец.Значение = Контрагент;
// Включаем использование отбора
Список.НастройкаОтбора.Владелец.Использование = Истина;
// Запрещаем пользователю менять значение, чтобы отбор оставался жестким
Список.НастройкаОтбора.Владелец.Доступность = Ложь;

ФормаВыбора.ОткрытьМодально();

Важные замечания

При работе с обычными формами учитывайте следующие рекомендации:

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

← На главную