Почему не отображается кнопка «Создать» при программном открытии формы выбора в 1С?

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

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

Анализируем контекст вызова: обработчик НачалоВыбора

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

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


&НаКлиенте
Процедура ТЧТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь; // Отключаем штатный механизм
    ПараметрыФормы = Новый Структура;
    // Добавляем какой-то отбор
    Отбор = Новый Структура("ВидНоменклатуры", ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар"));
    ПараметрыФормы.Вставить("Отбор", Отбор);
    
    // Открываем форму
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры

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

Решение 1: Использование параметра РазрешитьВводНового

В платформе 1С существует скрытый параметр РазрешитьВводНового, который передается в структуру параметров формы. В некоторых случаях, особенно при программном переопределении, платформа может устанавливать его в значение Ложь по умолчанию. Чтобы принудительно вернуть кнопку «Создать», нам необходимо явно передать этот флаг в структуру параметров.

Изменим наш код следующим образом:


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

Этот параметр сообщает системе, что форма выбора не должна ограничивать пользователя в создании новых записей.

Решение 2: Правильное определение владельца формы

Проанализируем третий параметр функции ОткрытьФорму. Это Владелец. Если в качестве владельца передать саму форму (ЭтаФорма), платформа может скрыть кнопку «Создать», так как она не понимает, в какое именно поле на форме должен вернуться результат создания нового элемента.

Для корректной работы командной панели необходимо передавать в качестве владельца именно элемент формы (поле ввода или таблицу), из которого инициирован выбор. В обработчике НачалоВыбора этот элемент уже передается в первом параметре Элемент. Использование этого параметра гарантирует, что созданный элемент будет автоматически подставлен в нужное поле после записи.

Решение 3: Свойства динамического списка в форме выбора

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

  1. Откроем форму выбора справочника в конфигураторе.
  2. Выделим основной реквизит формы (обычно это Список с типом ДинамическийСписок).
  3. Проверим свойство «Изменять состав строк».

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

Решение 4: Автозаполнение командной панели

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

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

Решение 5: Режим выбора групп и элементов

Посмотрим на ситуацию со справочниками, имеющими иерархию. Если в параметрах выбора установлено ограничение ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы, кнопка создания обычного элемента будет скрыта, так как выбор разрешен только для групп.

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

Решение 6: Права доступа и функциональные опции

Иногда причина кроется не в коде, а в бизнес-логике. Проанализируем права пользователя. Наличие прав на просмотр справочника не означает наличие прав на его интерактивное добавление.

Также кнопка может исчезнуть из-за влияния Функциональных опций. Если возможность создания определенных объектов в системе отключена через настройки (например, «Использовать несколько складов» отключено), то и кнопка «Создать» в форме выбора складов пропадет, даже если вы вызываете форму программно.

Решение 7: Особенности расширений

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

Итоги

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

  1. Всегда передавайте Элемент (поле выбора) в качестве владельца при вызове ОткрытьФорму.
  2. Явно указывайте ПараметрыФормы.Вставить("РазрешитьВводНового", Истина);.
  3. Убедитесь, что в форме выбора для динамического списка разрешено изменение состава строк.
  4. Проверьте права доступа пользователя на операцию «Интерактивное добавление».

Следуя этим правилам, вы обеспечите пользователям удобный и полноценный интерфейс для работы с данными в системе 1С.

← На главную