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