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