Почему у управляемой формы 1С нет свойства РежимВыбора и откуда оно появляется?

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

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

Причина отсутствия свойства у корневого объекта формы

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

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

Где физически располагается РежимВыбора

Разберем две точки, в которых в управляемом приложении живет понятие режима выбора:

  1. Элемент управления «Таблица формы»: Свойство РежимВыбора принадлежит конкретному визуальному элементу — таблице, связанной с динамическим списком (объект ТаблицаФормы). В конфигураторе его можно найти, если выделить таблицу списка в дереве элементов формы. В программном коде к нему обращаются через коллекцию элементов: Элементы.Список.РежимВыбора.
  2. Системные параметры формы: Свойство РежимВыбора с типом Булево существует как предопределенный стандартный параметр, который предоставляется расширением формы динамического списка. Внутри модуля формы к нему можно обратиться через коллекцию параметров: Параметры.РежимВыбора.

Как параметр передается и появляется в форме

Проанализируем механизмы передачи данного параметра в форму:

  1. Автоматический вызов платформой: Когда пользователь нажимает кнопку выбора (троеточие) в поле ввода ссылки или в строке табличной части, платформа самостоятельно определяет форму выбора объекта и неявно передает структуру параметров, где параметр РежимВыбора установлен в значение Истина, а также передается ссылка на владельца для возврата результата.
  2. Программное открытие: Если форму необходимо открыть на выбор из встроенного языка, мы явно передаем этот флаг в структуре параметров метода ОткрытьФорму().

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


ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("РежимВыбора", Истина);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыОткрытия, Элемент);

Использование формы списка вместо формы выбора

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

Разберем реализацию в обработчике создания формы на сервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.РежимВыбора Тогда
        Элементы.Список.РежимВыбора = Истина;
    КонецЕсли;
    
КонецПроцедуры

Рекомендации по оптимизации и разделению форм

Обратим внимание на несколько важных архитектурных правил платформы 1С:

  1. Разделение формы списка и формы выбора: Стандарты разработки рекомендуют создавать для объекта метаданных две независимые формы — основную форму списка и форму выбора. Динамическое включение режима выбора у формы списка изменяет состав командной панели (появляется кнопка «Выбрать»), что сбрасывает клиентское кеширование формы и приводит к дополнительным задержкам при повторном открытии.
  2. Настройка ключа назначения использования: Если одна форма все же применяется универсально и для обычного просмотра, и для подбора значений, пользовательские настройки колонок и фильтров могут конфликтовать. Рекомендуется при открытии формы в режиме выбора изменять КлючНазначенияИспользования (например, задавать "РежимВыбора"), чтобы платформа сохраняла настройки интерфейса независимо.
  3. Оповещение о выборе: При необходимости переопределить стандартный выбор или обработать значение нестандартно, в коде клиентских событий формы выбора вызывается платформенный метод ОповеститьОВыборе(ВыбранноеЗначение), который закрывает форму и передает данные вызывающему элементу-владельцу.
← На главную