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