Как программно управлять кнопкой "+" (создания) в поле ввода управляемой формы 1С

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

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

Природа кнопки создания и почему нет прямого обработчика

Для начала проанализируем ситуацию: многие разработчики пытаются найти событие «Нажатие на плюс» в модуле формы. Однако, как правильно отмечено в обсуждении, эта кнопка является платформенным механизмом. Это означает, что её поведение жестко зашито в ядро платформы 1С. Когда пользователь нажимает на «+», платформа сама инициирует открытие формы создания нового объекта, заполняет параметры выбора и передает управление в новую форму.

Рассмотрим, почему стандартные точки останова не срабатывают на самой кнопке. Поскольку это не команда формы, созданная программистом, а часть элемента управления ПолеВвода, у неё нет выделенного события в контексте текущей формы. Попытки перехватить действие через ПередНачаломДобавления эффективны только для динамических списков, но не для одиночных полей ввода. Чтобы «поймать» момент нажатия, нам нужно смотреть не на форму-источник, а на форму-приемник (создаваемый объект), что мы разберем далее.

Управление видимостью через свойство КнопкаСоздания

Основной инструмент управления этой кнопкой — свойство элемента формы КнопкаСоздания (в англоязычном варианте CreateButton). Это свойство определяет, будет ли отображаться заветный «плюс» рядом с кнопкой выбора.

Выясним, какие значения может принимать это свойство (используется системное перечисление РежимКнопкиВыбораУправляемойФормы):

  1. Авто — платформа сама решает, показывать кнопку или нет. Решение зависит от прав пользователя (наличие права «Интерактивное добавление») и того, однозначно ли определен тип данных в поле.
  2. Да — кнопка будет отображаться принудительно (если у пользователя есть соответствующие права доступа).
  3. Нет — кнопка будет скрыта в любом случае. Это именно то решение, которое чаще всего требуется для реализации бизнес-логики.

Посмотрим на пример программного изменения этого свойства в коде:


// Скрываем кнопку создания для конкретного поля на форме
Элементы.Контрагент.КнопкаСоздания = РежимКнопкиВыбораУправляемойФормы.Нет;

// Принудительно включаем отображение кнопки
Элементы.Номенклатура.КнопкаСоздания = РежимКнопкиВыбораУправляемойФормы.Да;

Взаимосвязь с быстрым выбором

Проанализируем важный нюанс: поведение кнопки «+» тесно связано со свойством БыстрыйВыбор (QuickChoice). Если для поля установлено значение БыстрыйВыбор = Истина, то при нажатии на кнопку выбора открывается не полнофункциональное окно списка, а выпадающий список. В этом случае кнопка «+» перемещается внутрь этого выпадающего списка (обычно в самый низ).

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

Особенности работы с дополнительными реквизитами (БСП)

Часто вопрос об удалении кнопки «+» возникает при работе с Дополнительными реквизитами и сведениями (подсистема БСП). Сложность здесь в том, что эти поля создаются динамически программным кодом БСП в момент открытия формы. Вы не найдете их в дереве элементов конфигуратора.

Разберем по шагам, как решить эту задачу:

  1. Найдем процедуру ПриСозданииНаСервере в модуле вашей формы.
  2. Нам нужно вклиниться в процесс после того, как БСП создала элементы формы. Обычно это происходит после вызова метода УправлениеКонтактнойИнформацией.ПриСозданииНаСервере или аналогичных методов подсистемы «Свойства».
  3. Проанализируем коллекцию Элементы. Имена элементов дополнительных реквизитов обычно имеют префикс ДополнительныйРеквизит_, за которым следует идентификатор (UUID) свойства.

Рассмотрим пример кода, который обходит все дополнительные реквизиты и скрывает у них кнопку создания:


&НаСервере
Процедура СкрытьКнопкиСозданияУДопРеквизитов()
    
    Для Каждого Элемент Из Элементы Цикл
        // Проверяем, является ли элемент дополнительным реквизитом по префиксу имени
        Если Лев(Элемент.Имя, 22) = "ДополнительныйРеквизит_" Тогда
            
            // Проверяем, что это поле ввода и оно ссылочного типа
            Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
                Элемент.КнопкаСоздания = РежимКнопкиВыбораУправляемойФормы.Нет;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Важное замечание: В современных версиях БСП настройки видимости кнопок создания часто можно задать в пользовательском режиме (в карточке настройки дополнительного реквизита), не прибегая к программированию. Всегда проверяйте настройки в режиме «1С:Предприятие» перед внесением изменений в код.

Косвенный перехват нажатия кнопки "+"

Хотя мы выяснили, что события нажатия в исходной форме нет, мы можем перехватить управление в форме нового объекта, который открывается после нажатия на «+». Когда платформа открывает форму создания, она передает в неё определенные параметры.

Проанализируем ситуацию в модуле формы создаваемого объекта (например, справочника Контрагенты):


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Если форма открыта через кнопку "+" из другого поля, 
    // в параметрах часто передается значение заполнения.
    Если Параметры.Свойство("ЗначениеЗаполнения") Тогда
        // Здесь можно проанализировать контекст и, если нужно, 
        // запретить создание или изменить логику.
        // Например, сообщить пользователю, что так создавать нельзя:
        // Отказ = Истина; 
    КонецЕсли;

КонецПроцедуры

Роль прав доступа

Выясним еще одну причину, по которой кнопка может отсутствовать. Если у пользователя в его ролях не отмечено право «Интерактивное добавление» для конкретного объекта метаданных, то при установленном режиме КнопкаСоздания = Авто кнопка «+» исчезнет сама собой. Это самый правильный метод управления интерфейсом с точки зрения безопасности: если пользователю нельзя создавать объекты, платформа не должна даже предлагать ему такую визуальную возможность.

Резюме

Подведем итоги нашего анализа:

Используя эти методы, вы сможете гибко настраивать интерфейс ваших решений на базе 1С, делая его интуитивно понятным и защищенным от ошибочных действий пользователей.

← На главную