Как вывести команду в интерфейс управляемой формы 1С и ограничить к ней доступ?

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

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

Рассмотрим подробнее реальную задачу: есть команда интеграции (например, Обработка.ПанельАдминистрированияИнтеграцийУНФ.Команда.ОбменССайтом), и нам нужно вывести ее в меню, предоставив доступ только определенным пользователям (например, сторонним разработчикам). Разберем по шагам несколько эффективных способов решения этой проблемы.

Способ 1: Использование механизма БСП «Дополнительные отчеты и обработки»

Самый простой и безопасный способ вывода внешних команд в типовых конфигурациях — использование встроенной Библиотеки стандартных подсистем (БСП). Этот метод на 100% защищает наши доработки от проблем при обновлениях, так как мы вообще не затрагиваем метаданные конфигурации.

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

Огромный плюс данного метода заключается в том, что прямо в пользовательском режиме мы можем настроить видимость: указать конкретных пользователей или группы (тех самых сторонних разработчиков), которым будет доступна эта команда. Остальные пользователи ее просто не увидят.

Способ 2: Заимствование типовой подсистемы в расширение

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

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

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

Способ 3: Создание собственного раздела меню в расширении

В некоторых случаях логичнее не смешивать типовой и кастомный функционал. Мы создаем в расширении собственное меню (новую подсистему), куда вытаскиваем весь добавленный функционал.

Для удобства пользователей в это же меню можно включить и типовые объекты, которые всегда должны быть под рукой. Чтобы интерфейс выглядел эстетично, рекомендуется задать мини-логотип организации в качестве пиктограммы для этого раздела меню.

Способ 4: Программное добавление в избранное

Один из нестандартных, но рабочих вариантов, который обсуждался разработчиками — использование механизма избранного. Платформа 1С:Предприятие 8.3 позволяет программно добавлять навигационные ссылки в избранное пользователя.

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

Способ 5: Программный вывод локальной команды на форму

Если нам нужно вывести команду не в глобальное меню раздела, а на конкретную типовую форму (например, в форму списка документов), безопаснее всего сделать это программно через расширение.

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


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

Этот метод гарантирует, что при обновлении типовой конфигурации и изменении структуры элементов формы, наша кнопка не пропадет. Важное правило: всегда давайте программно создаваемым элементам и командам уникальные префиксы (как МойПрефикс_ в примере выше), чтобы избежать конфликтов имен с типовыми объектами.

Способ 6: Грамотное ограничение прав для сторонних разработчиков

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

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

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

← На главную