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