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

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

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

Причина отсутствия команд в редакторе расширения

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

Способ 1. Заимствование связанных объектов

Разберем первый и самый правильный с точки зрения визуального проектирования метод. Чтобы команды управления регистрами появились в окне «Командный интерфейс» формы расширения, выполним следующие действия:

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

Важно отметить: для гарантированного скрытия команды рекомендуется снимать флаг Автовидимость и явно устанавливать значение Ложь в колонке Видимость. В противном случае платформа может применить настройки из основной конфигурации.

Способ 2. Программное управление через свойство КомандныйИнтерфейс

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Обращаемся к конкретной команде в панели навигации
    // Структура пути: КомандныйИнтерфейс.ПанельНавигации.[Группа].[ИмяКоманды]
    Попытка
        ЭтаФорма.КомандныйИнтерфейс.ПанельНавигации.ПодгруппаСмотриТакже.РегистрСведений_ДополнительныеСведения.Видимость = Ложь;
    Исключение
        // Если команда не найдена, выполнение продолжится без ошибки
    КонецПопытки;

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

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


&НаСервере
Процедура СкрытьВсеКомандыПерехода()
    
    ГруппаПерейти = ЭтаФорма.КомандныйИнтерфейс.ПанельНавигации.Группа("Перейти");
    Для Каждого Команда Из ГруппаПерейти.Элементы Цикл
        Команда.Видимость = Ложь;
    КонецЦикла;
    
КонецПроцедуры

Способ 3. Использование функциональных опций

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

Как полностью отключить панель навигации

В современном интерфейсе «Такси» нет прямого свойства формы «Отображать панель навигации». Однако платформа придерживается логики: если в панели навигации нет ни одного видимого элемента, сама панель (серая полоса слева или сверху) не отрисовывается, освобождая место для рабочей области формы.

Следовательно, чтобы «отключить» панель навигации в форме расширения, нам необходимо:

  1. Либо заимствовать все объекты, чьи команды попадают в форму, и выключить их видимость вручную в редакторе.
  2. Либо в цикле программно установить Видимость = Ложь для всех элементов коллекций ПанельНавигации.Обычное, ПанельНавигации.Перейти и ПанельНавигации.СмотриТакже.

Важные замечания по работе с кэшем и режимом совместимости

Проанализируем технические нюансы, которые могут помешать решению задачи. Во-первых, обратите внимание на Режим совместимости вашей конфигурации. Полноценная поддержка управления командным интерфейсом в расширениях появилась в версиях платформы 8.3.15 и выше. Если ваша база работает в режиме совместимости 8.3.12 или ниже, настройки видимости в расширении могут игнорироваться платформой. В этом случае единственным надежным вариантом остается программное скрытие в ПриСозданииНаСервере.

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

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

← На главную