Почему не отображается новая команда на управляемой форме в 1С и как это исправить?

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

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

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

Основные причины отсутствия команды на форме

Проанализируем ключевые факторы, из-за которых платформа может скрывать команду в пользовательском режиме:

  1. Отключенное автозаполнение командной панели формы. В типовых конфигурациях (таких как «1С:Розница», «1С:Управление торговлей», «1С:ERP») свойство Автозаполнение у стандартной командной панели формы списка или формы документа часто отключено разработчиками. В этом случае новые команды метаданных автоматически не попадают на панель.
  2. Использование механизма подсистемы «Подключаемые команды» (БСП). Командные панели типовых форм формируются динамически при запуске с помощью Библиотеки стандартных подсистем. Обычная команда объекта, добавленная только в дерево метаданных, не регистрируется в реестре БСП автоматически.
  3. Права доступа и роли. Если у текущего пользователя нет права на просмотр или выполнение созданной команды, платформа автоматически скроет элемент интерфейса.
  4. Функциональные опции. Если команда или объект привязаны к функциональной опции, которая отключена в настройках программы, кнопка отображаться не будет.
  5. Неверная группа команды или тип параметра. Если у команды задан тип параметра (например, ссылка на документ), но в динамическом списке не выбрана строка или у команды включен признак ИзменяетВыделенныеДанные при пустом списке, кнопка может быть невидима.
  6. Кэш сохраненных пользовательских настроек формы. Если пользователь ранее открывал форму и менял состав колонок или кнопок, платформа берет представление из системного хранилища настроек, игнорируя новые автоматические элементы.

Способ 1. Проверка прав, параметров и сброс настроек формы

Прежде чем переходить к изменению формы или написанию программного кода, выполним базовую диагностику:

  1. Проверяем права доступа: в дереве метаданных нажимаем правой кнопкой мыши на созданную команду, переходим в меню Дополнительно → Права и убеждаемся, что для основных ролей пользователя установлен флаг Просмотр.
  2. Проверяем функциональные опции: открываем свойства команды и проверяем раздел Использование → Функциональные опции. Если опция выключена в программе, команда будет скрыта.
  3. Сбрасываем пользовательские настройки: в режиме «1С:Предприятие» открываем форму списка документа, нажимаем меню Еще → Изменить форму → Еще → Установить стандартные настройки.

Способ 2. Явное добавление команды в элементы формы

Если в форме отключено автозаполнение командной панели, вынесем команду вручную в редакторе формы конфигуратора:

  1. Открываем нужную форму документа или списка (например, ФормаСписка документа ПоступлениеТоваров).
  2. В правой верхней части окна редактора формы переходим на вкладку Команды → Команды объекта (или Глобальные команды).
  3. Находим созданную команду и перетаскиваем ее мышью в левую панель в дерево элементов формы — внутрь узла КоманднаяПанель (или в соответствующую группу кнопок).
  4. В свойствах созданной кнопки проверяем свойство Видимость и при необходимости настраиваем отображение (картинку, заголовок, положение).

Способ 3. Программное создание кнопки при открытии формы

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


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

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

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

Способ 4. Регистрация через механизм подключаемых команд БСП

Если создаваемая команда предназначена для ввода на основании (например, открытие документа УстановкаЦенНоменклатуры на основании ПоступлениеТоваров), типовой и рекомендуемый подход — внедрение через Библиотеку стандартных подсистем без изменения самой формы списка.

Для этого в модуле менеджера создаваемого объекта (или в общем модуле СозданиеНаОснованииПереопределяемый) описывается процедура подключения команды:


// В модуле менеджера документа УстановкаЦенНоменклатуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
    
    Команда = КомандыСозданияНаОсновании.Добавить();
    Команда.Менеджер = "Документ.УстановкаЦенНоменклатуры";
    Команда.Представление = НСтр("ru = 'Установка цен номенклатуры'");
    Команда.ТипОснования = Метаданные.Документы.ПоступлениеТоваров;
    
КонецПроцедуры

После регистрации команды БСП автоматически встроит кнопку в стандартное подменю Создать на основании во всех формах связанных документов.

← На главную