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