Как добавить параметризуемые команды (Связанные документы) в новую форму документа в расширении 1С

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

При разработке в расширениях конфигурации 1С программисты часто сталкиваются с ситуацией, когда при создании абсолютно новой формы для заимствованного документа (например, ЗаказПокупателя в УНФ) на ней перестают отображаться привычные системные или общие команды. Одной из самых востребованных является команда «Связанные документы» (структура подчиненности). Несмотря на то, что основной реквизит формы имеет правильный тип, а команда добавлена в расширение, кнопка не появляется автоматически.

В этой статье мы подробно разберем, почему это происходит, и проанализируем все способы решения проблемы: от настройки командного интерфейса до программного вызова функций БСП.

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

Когда мы заимствуем существующую форму из основной конфигурации, она «тянет» за собой все настройки интерфейса. Однако, если мы создаем новую форму внутри расширения и назначаем ей основной реквизит ДокументОбъект.ЗаказПокупателя, платформа воспринимает её как «чистый лист». Автоматическая генерация параметризуемых команд (которые зависят от типа ссылки документа) может не сработать из-за особенностей механизмов расширений и Библиотеки стандартных подсистем (БСП).

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

Шаг 1. Проверка основного реквизита и типов данных

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

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

Шаг 2. Настройка видимости в командном интерфейсе

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

В окне редактирования формы (внизу, под визуальным редактором) найдем закладку «Командный интерфейс». Проанализируем дерево команд:

Шаг 3. Регистрация документа в подсистемах БСП

Если вышеуказанные действия не помогли, причина кроется в логике БСП. Команда «Связанные документы» работает через определяемые типы. Рассмотрим ситуацию подробнее.

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

Выполним следующие действия:

  1. Добавим необходимый ОпределяемыйТип в расширение.
  2. В свойстве «Тип» расширенного определяемого типа проверим наличие нашего документа.
  3. Если мы создали новый документ в расширении, его обязательно нужно добавить в этот список, иначе механизмы БСП будут его игнорировать.

Шаг 4. Программное добавление команды

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

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

Посмотрим на пример кода для вызова формы структуры подчиненности:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуСвязанныеДокументы(Команда)
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Значение", Объект.Ссылка);
    
    ОткрытьФорму("ОбщаяКоманда.СвязанныеДокументы.ФормаКоманды", ПараметрыФормы, ЭтаФорма);
    
КонецПроцедуры

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

Шаг 5. Особенности работы с динамическими путями

Рассмотрим ситуацию из обсуждения (Сообщение 6), когда попытка программного добавления элемента через ДобавитьЭлемент не удается. Причина часто кроется в том, что для параметризуемых команд путь к команде в коде 1С имеет специфический синтаксис.

Если мы хотим добавить кнопку программно и связать её с общей командой, следует использовать путь вида: "ОбщаяКоманда.ИмяКоманды". Однако стоит учитывать, что платформа требует контекста (параметра). Поэтому наиболее стабильным решением остается создание Команды формы, которая уже в своем обработчике вызывает общую команду, как показано в примере выше.

Шаг 6. Очистка кэша и обновление расширения

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

  1. В конфигураторе зайдем в управление расширениями.
  2. Снимем флаг «Используется» с нашего расширения.
  3. Обновим конфигурацию базы данных (F7).
  4. Снова установим флаг «Используется».
  5. Снова обновим конфигурацию (F7).

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

Резюме

Для решения проблемы отсутствующих параметризуемых команд в новой форме документа в расширении необходимо действовать комплексно:

  1. Убедиться, что основной реквизит формы установлен правильно.
  2. Проверить закладку «Командный интерфейс» самой формы в расширении.
  3. Проверить включение документа в ОпределяемыеТипы БСП.
  4. При необходимости использовать программный вызов через ОткрытьФорму.

Используя эти методы, мы сможем восстановить полноценную работу интерфейса даже в самых сложных сценариях кастомизации конфигураций на платформе 1С.

← На главную