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