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