Как правильно установить отбор в списке выбора на обычных формах 1С?

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

При разработке в конфигурациях 1С, использующих обычные формы (например, в УТП), часто возникает задача ограничить выбор элементов пользователем в списке. Типичный пример — выбор договора контрагента только с определенным видом или только по конкретной организации. Рассмотрим, почему стандартные механизмы могут не срабатывать и как реализовать это правильно.

Основные причины отсутствия отбора

Если вы привыкли работать с управляемыми формами, подход к обычным формам может показаться непривычным. Основные сложности заключаются в следующем:

  1. Использование неподходящих методов открытия формы.
  2. Нарушение порядка действий при получении формы и установке свойств Отбор.
  3. Отсутствие настроек видимости или доступности отборов в метаданных самой формы справочника.
  4. Игнорирование подчинения справочников (например, необходимости указания Владельца для справочника ДоговорыКонтрагентов).

Шаг 1: Правильный программный подход к настройке формы

Чтобы успешно ограничить выбор, нам необходимо перехватить процесс открытия формы и вмешаться в настройку параметров до того, как пользователь увидит список. Для этого мы используем событие НачалоВыбора поля ввода. В первую очередь необходимо отключить стандартную логику 1С, установив свойство СтандартнаяОбработка в значение Ложь.

Затем мы получаем форму выбора через метод ПолучитьФормуВыбора, что дает нам прямой доступ к её объектам. Разберем пример реализации:


// Отключаем стандартный механизм открытия
СтандартнаяОбработка = Ложь;

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

// Настраиваем отбор по Виду договора
ФормаВыбора.Отбор.ВидДоговора.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.ВидДоговора.Значение = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
ФормаВыбора.Отбор.ВидДоговора.Использование = Истина;

// Устанавливаем отбор по Владельцу (Контрагенту)
ФормаВыбора.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.Владелец.Значение = Контрагент;
ФормаВыбора.Отбор.Владелец.Использование = Истина;

// Устанавливаем отбор по Организации
ФормаВыбора.Отбор.Организация.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.Организация.Значение = ВашаОрганизация;
ФормаВыбора.Отбор.Организация.Использование = Истина;

// Открываем настроенную форму
ФормаВыбора.Открыть();

Шаг 2: Анализ архитектуры данных и метаданных

Если после применения кода отбор не сработал или список пуст, проанализируем структуру справочника ДоговорыКонтрагентов. Поскольку данный справочник является подчиненным, поле Владелец является ключевым фильтром. Если владелец не определен в контексте формы, 1С может просто не найти данные для отображения.

Также важно убедиться, что в конфигураторе для формы выбора разрешено использование отбора по нужным реквизитам. Если реквизит Организация не добавлен в список доступных для отбора полей в свойствах формы, программная установка свойства Использование может не дать эффекта. Проверьте настройки таблицы формы: все поля, по которым планируется фильтрация, должны быть доступны для манипуляций через объект Отбор.

Шаг 3: Проверка типов данных

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

Рекомендации по отладке

  1. Используйте точку остановки (отладчик) непосредственно перед вызовом ФормаВыбора.Открыть().
  2. Проверьте значения, которые вы присваиваете объектам отбора, просмотрев их содержимое в «Табло» или через вычисление выражений.
  3. Убедитесь, что форма выбора, которую вы получаете через ПолучитьФормуВыбора, является именно той формой, в которой вы настроили доступные отборы.
  4. Если вы используете специфические условия, можно также проверить, не мешает ли работе программного отбора штатный механизм «Настройка списка» самого пользователя.

Следование этим шагам позволит вам гарантированно управлять выбором данных в обычных формах 1С и избежать типичных ошибок при программном наложении фильтров.

← На главную