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