Почему в 1С на форме пропадает кнопка «Т» (выбор типа) и как вернуть её отображение?

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

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

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

Внутренняя логика платформы: почему пропадает кнопка «Т»?

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

В пользовательском режиме (1С:Предприятие) поведение элемента управления динамически меняется в зависимости от текущего значения, которое записано в данном реквизите:

  1. Значение равно Неопределено: Платформа понимает, что конкретный тип данных еще не выбран. В этом случае у поля ввода отображается кнопка «Т». Нажатие на нее открывает стандартное диалоговое окно со списком доступных типов, которые мы определили в конфигураторе.
  2. Значение имеет конкретный тип: Если в поле ввода уже находится значение определенного типа (даже если это значение является пустым для данного типа, например, пустая строка "", пустая ссылка СправочникСсылка.ПустаяСсылка() или число 0), платформа считает, что тип данных уже однозначно определен. В этот момент кнопка «Т» скрывается, а на ее месте появляется кнопка выбора конкретного значения «...».

Именно эта логика часто путает начинающих разработчиков. Если при инициализации формы или объекта реквизиту автоматически присваивается пустая строка, то для платформы тип значения уже жестко зафиксирован как Строка. Кнопка выбора типа исчезает, и пользователь видит только три точки, которые пытаются открыть форму выбора для строки, чего сделать, естественно, невозможно.

Как решить проблему программным путем

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

Самый простой и надежный способ вернуть кнопку «Т» на форму — это явно присвоить реквизиту значение Неопределено. Разберем по шагам несколько сценариев.

Сценарий 1. Очистка реквизита при открытии формы

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


Процедура ПриОткрытии()
    
    // Проверяем, является ли объект новым
    Если ЭтоНовый() Тогда
        // Сбрасываем значение в Неопределено, чтобы появилась кнопка "Т"
        РеквизитСоставногоТипа = Неопределено;
    КонецЕсли;
    
КонецПроцедуры

Сценарий 2. Использование метода ПривестиЗначение()

В некоторых случаях нам требуется программно ограничить или перепроверить типы данных в поле ввода, используя объект ОписаниеТипов. Если текущее значение реквизита не соответствует допустимым типам, метод ПривестиЗначение() автоматически сбросит его в Неопределено (или к первому допустимому типу, если тип не составной), что вернет кнопку выбора типа на форму.

Рассмотрим пример создания описания типов и приведения значения:


// Создаем массив допустимых типов для нашего реквизита
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
МассивТипов.Добавить(Тип("Строка"));

// Создаем объект ОписаниеТипов на основании массива
ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов);

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

Интерактивные приемы работы для пользователей

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

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

  1. Кнопка очистки («крестик»): Если у поля ввода в свойствах включено отображение кнопки очистки (свойство КнопкаОчистки установлено в значение Истина), пользователь может нажать на красный крестик. Поле примет значение Неопределено, и кнопка выбора типа «Т» мгновенно вернется.
  2. Горячие клавиши: Опытные пользователи и разработчики могут использовать стандартное клавиатурное сокращение Shift + F4. Это сочетание клавиш мгновенно очищает текущее поле ввода, сбрасывая его значение в Неопределено. После нажатия Shift + F4 кнопка «Т» снова станет активной.
  3. Клавиша F4: Нажатие клавиши F4 открывает диалог выбора. Если значение не определено, откроется окно выбора типа. Если тип определен — откроется форма выбора конкретного объекта.

Важные свойства элемента управления в Конфигураторе

При настройке элементов управления составного типа в Конфигураторе обратите внимание на следующие важные свойства поля ввода:

Отличие поведения в Управляемых формах (УФ)

Если вы планируете переходить со старых обычных форм на современные управляемые формы платформы 1С, вам полезно будет узнать о ключевом отличии в поведении элементов управления составного типа:

Таким образом, понимание концепции значения Неопределено как индикатора отсутствия выбранного типа позволяет легко и элегантно управлять поведением интерфейса платформы «1С:Предприятие» как в обычных, так и в управляемых формах.

← На главную