При проектировании интерфейсов в платформе «1С:Предприятие» разработчики часто сталкиваются с реквизитами составного типа данных. Составной тип позволяет хранить в одном поле значения разных типов, например, ссылку на СправочникСсылка.Контрагенты, СправочникСсылка.ФизическиеЛица или обычную Строка. Однако в процессе работы пользователи и программисты замечают странную особенность: в Конфигураторе у поля ввода отображается заветная кнопка «Т» (Выбор типа), а в режиме Предприятия вместо нее выводятся три точки «...» (Выбор значения). При этом нажатие на три точки не дает выбрать тип данных, а просто открывает пустой список или вообще никак не реагирует.
Давайте подробно разберем эту ситуацию, выясним внутреннюю логику работы платформы «1С:Предприятие», рассмотрим программные методы управления кнопками выбора и изучим интерактивные приемы, которые помогут облегчить жизнь пользователям.
Для того чтобы понять логику поведения системы, проанализируем, как платформа 1С определяет, какую именно кнопку отображать у поля ввода составного типа. В конфигураторе мы жестко задаем составной тип данных и включаем свойство «Выбирать тип». Система по умолчанию рисует кнопку «Т».
В пользовательском режиме (1С:Предприятие) поведение элемента управления динамически меняется в зависимости от текущего значения, которое записано в данном реквизите:
Неопределено: Платформа понимает, что конкретный тип данных еще не выбран. В этом случае у поля ввода отображается кнопка «Т». Нажатие на нее открывает стандартное диалоговое окно со списком доступных типов, которые мы определили в конфигураторе."", пустая ссылка СправочникСсылка.ПустаяСсылка() или число 0), платформа считает, что тип данных уже однозначно определен. В этот момент кнопка «Т» скрывается, а на ее месте появляется кнопка выбора конкретного значения «...».Именно эта логика часто путает начинающих разработчиков. Если при инициализации формы или объекта реквизиту автоматически присваивается пустая строка, то для платформы тип значения уже жестко зафиксирован как Строка. Кнопка выбора типа исчезает, и пользователь видит только три точки, которые пытаются открыть форму выбора для строки, чего сделать, естественно, невозможно.
Рассмотрим подробнее, как мы можем управлять типом значения реквизита из кода программы, чтобы гарантировать пользователю удобный интерфейс.
Самый простой и надежный способ вернуть кнопку «Т» на форму — это явно присвоить реквизиту значение Неопределено. Разберем по шагам несколько сценариев.
Если нам нужно, чтобы при создании нового документа или открытии обработки поле составного типа изначально предлагало выбрать тип, мы должны выполнить инициализацию в модуле формы. В обычных формах для этого используются обработчики ПередОткрытием или ПриОткрытии:
Процедура ПриОткрытии()
// Проверяем, является ли объект новым
Если ЭтоНовый() Тогда
// Сбрасываем значение в Неопределено, чтобы появилась кнопка "Т"
РеквизитСоставногоТипа = Неопределено;
КонецЕсли;
КонецПроцедуры
ПривестиЗначение()В некоторых случаях нам требуется программно ограничить или перепроверить типы данных в поле ввода, используя объект ОписаниеТипов. Если текущее значение реквизита не соответствует допустимым типам, метод ПривестиЗначение() автоматически сбросит его в Неопределено (или к первому допустимому типу, если тип не составной), что вернет кнопку выбора типа на форму.
Рассмотрим пример создания описания типов и приведения значения:
// Создаем массив допустимых типов для нашего реквизита
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
МассивТипов.Добавить(Тип("Строка"));
// Создаем объект ОписаниеТипов на основании массива
ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов);
// Приводим текущее значение реквизита к допустимым типам
// Если значение было пустой ссылкой другого справочника, оно сбросится в Неопределено
РеквизитСоставногоТипа = ДопустимыеТипы.ПривестиЗначение(РеквизитСоставногоТипа);
Не всегда обязательно переписывать программный код, чтобы решить проблему с выбором типа «на лету». Платформа предоставляет стандартные интерактивные механизмы очистки полей ввода.
Проанализируем ситуацию: пользователь случайно выбрал тип данных Строка, кнопка «Т» пропала, а вместо нее появились три точки. Чтобы вернуть выбор типа, пользователю необходимо очистить поле ввода от текущего пустого значения типа Строка. Сделать это можно следующими способами:
КнопкаОчистки установлено в значение Истина), пользователь может нажать на красный крестик. Поле примет значение Неопределено, и кнопка выбора типа «Т» мгновенно вернется.Неопределено. После нажатия Shift + F4 кнопка «Т» снова станет активной.При настройке элементов управления составного типа в Конфигураторе обратите внимание на следующие важные свойства поля ввода:
Истина. Если его отключить, то даже при значении реквизита Неопределено платформа не предложит пользователю диалоговое окно со списком доступных типов.Если вы планируете переходить со старых обычных форм на современные управляемые формы платформы 1С, вам полезно будет узнать о ключевом отличии в поведении элементов управления составного типа:
Неопределено, при нажатии на кнопку выбора платформа автоматически откроет стандартное диалоговое окно «Выбор типа данных». Если тип уже был выбран ранее, система сразу перейдет к открытию формы выбора конкретного элемента (например, справочника). Сброс выбранного типа в управляемых формах осуществляется точно так же — с помощью кнопки очистки («Х») или сочетания клавиш Shift + F4.Таким образом, понимание концепции значения Неопределено как индикатора отсутствия выбранного типа позволяет легко и элегантно управлять поведением интерфейса платформы «1С:Предприятие» как в обычных, так и в управляемых формах.