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

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

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

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

Понимание природы Определяемого типа

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

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

Решение проблемы с выбором типа

Если вы присваиваете реквизиту строку, но платформа всё равно настаивает на выборе типа, выполните следующие шаги для корректной настройки формы:

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

Практические приемы программирования

Рассмотрим несколько способов управления поведением полей с составным (определяемым) типом через модуль формы.

Способ 1: Использование ОграниченияТипа

Для того чтобы программно зафиксировать тип для поля ввода, можно воспользоваться свойством ОграничениеТипа элемента формы. Это позволит «сузить» составной тип до необходимого в конкретный момент.


// Пример ограничения типа для элемента формы
// В данном случае мы принудительно устанавливаем тип Строка
Элементы.ИмяРеквизита.ОграничениеТипа = Новый ОписаниеТипов("Строка");

Способ 2: Отключение интерактивного выбора

Если вам нужно полностью исключить появление окна выбора типа при очистке поля пользователем, установите свойство ВыбиратьТип в значение Ложь. Это предотвратит сброс значения в Неопределено и избавит от назойливого диалога.


// Отключаем возможность выбора типа пользователем
Элементы.ИмяРеквизита.ВыбиратьТип = Ложь;

Способ 3: Правильное приведение типов для пустых значений

При необходимости инициализации поля «пустым» значением определенного типа, используйте метод ПривестиЗначение(). Это позволит системе «понять», какой именно тип вы хотите назначить реквизиту, даже если само значение пустое.


// Приведение пустого значения для справочника
Реквизит = Справочники.ИмяСправочника.ПустаяСсылка();

// Приведение пустого значения для строки
Реквизит = Новый ОписаниеТипов("Строка").ПривестиЗначение();

Почему присвоение строки может работать некорректно?

Если при присвоении значения Реквизит = "Текст"; вы видите, что значение отображается неверно или стирается, скорее всего, поле на форме имеет включенную настройку выбора типа, которая конфликтует с текущим состоянием данных.

Проанализируем ситуацию: когда вы очищаете поле интерактивно, платформа сбрасывает значение в Неопределено. Поскольку ОпределяемыйТип является составным, система предлагает пользователю выбрать, что вводить — ссылку или строку. Чтобы избежать этого:

Работая с ОпределяемымиТипами, всегда помните, что для платформы это обычный составной тип. Весь стандартный инструментарий работы с ОписаниеТипов и настройками управляемых форм применим к ним в полной мере. Пользуйтесь этими методами, чтобы сделать поведение интерфейса предсказуемым и удобным для конечных пользователей.

← На главную