Глобальная команда "Учетные записи электронной почты" в 1С: почему она пропадает у пользователей и как это исправить

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

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

В этой статье мы подробно разберем внутренние механизмы платформы «1С:Предприятие 8», выясним истинную причину такого поведения командного интерфейса и рассмотрим по шагам наиболее эффективные и безопасные способы решения этой проблемы.

Выясняем причину: что представляет собой эта «глобальная команда»

Первое заблуждение, в которое часто впадают начинающие разработчики, — это попытка найти в дереве метаданных объект типа ОбщаяКоманда с именем "Учетные записи электронной почты". Поиск по конфигурации не дает результатов, так как самостоятельной общей команды с таким названием в системе не существует.

На самом деле кнопка, которую мы перетаскиваем на форму из ветки Глобальные команды в редакторе управляемой формы, — это стандартная команда открытия списка справочника УчетныеЗаписиЭлектроннойПочты. Платформа 1С группирует такие команды в соответствии со структурой подсистем конфигурации. Именно поэтому в редакторе формы мы видим ее по пути: НСИ и администрирование -> См. также -> Учетные записи электронной почты.

Почему кнопка скрывается у пользователей без прав администратора

Для того чтобы стандартная команда отобразилась на управляемой форме у конкретного пользователя, платформа проверяет выполнение трех обязательных условий. Если хотя бы одно из них нарушено, система автоматически (на уровне ядра) скрывает кнопку от пользователя. Проанализируем эти условия подробнее:

  1. Доступ к самому объекту метаданных. У пользователя в его ролях должно быть право на Чтение и Просмотр справочника УчетныеЗаписиЭлектроннойПочты. В Библиотеке стандартных подсистем (БСП) за это отвечают роли ЧтениеУчетныхЗаписейЭлектроннойПочты или ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты.
  2. Права на подсистему (главная «ловушка» разработчика). Поскольку команда была добавлена на форму из командного интерфейса конкретной подсистемы (в нашем примере — НСИиАдминистрирование), платформа жестко привязывает видимость этой команды к правам на саму подсистему. Если у рядового пользователя нет роли с правом Просмотр для подсистемы НСИиАдминистрирование (а у обычных сотрудников таких прав быть не должно из соображений безопасности), то и кнопка на форме отображаться не будет, даже если у пользователя есть полные права на сам справочник учетных записей.
  3. Функциональные опции. Проверьте, включена ли в системе константа, отвечающая за работу с почтой. Если в настройках программы отключена возможность использования почтовых сообщений, платформа также скроет команду.

Почему не работает поиск через отладчик?

Иногда коллеги на форумах советуют использовать стандартный прием: запустить отладку, нажать на кнопку и по нажатию клавиш Ctrl + T в модуле перейти к объекту в дереве метаданных. Рассмотрим, почему этот способ здесь бесполезен.

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

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

Вариант А: Использование локальной команды формы (Рекомендуемый способ)

Самый надежный и архитектурно верный способ решить проблему раз и навсегда — отказаться от использования глобальной команды подсистемы и создать простую команду непосредственно на самой управляемой форме. Это полностью избавит нас от зависимости от прав на административные разделы интерфейса.

Выполним следующие шаги:

  1. Откроем нужную управляемую форму в конфигураторе.
  2. В правой верхней панели перейдем на вкладку Команды, затем выберем ветку Команды формы и нажмем кнопку Добавить.
  3. Зададим новой команде понятное имя, например: ОткрытьУчетныеЗаписиПочты, и заполним заголовок кнопки.
  4. Перетащим созданную команду мышкой на рабочую область формы (в командную панель или в виде гиперссылки).
  5. В свойствах команды нажмем на лупу в поле Действие для создания клиентского обработчика события.
  6. В открывшемся модуле формы напишем простой и лаконичный код для открытия формы списка справочника:

&НаКлиенте
Процедура ОткрытьУчетныеЗаписиПочты(Команда)
    
    // Открываем форму списка стандартного справочника учетных записей
    ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.ФормаСписка");
    
КонецПроцедуры

При таком подходе платформа будет проверять только одно: есть ли у пользователя базовое право на чтение справочника УчетныеЗаписиЭлектроннойПочты. Права на интерфейсный раздел НСИ и администрирование проверять не будут, и кнопка гарантированно отобразится у всех сотрудников, которым разрешено работать с почтой.

Вариант Б: Настройка прав доступа к подсистеме

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

Рассмотрим этот процесс по шагам:

  1. Определим роль, назначенную проблемным пользователям (или создадим для них новую профильную роль).
  2. В дереве метаданных роли найдем ветку Подсистемы.
  3. Перейдем к подсистеме, из которой была заимствована глобальная команда (например, НСИиАдминистрирование или ее подчиненная подсистема СмТакже).
  4. Установим для этой подсистемы флаг Просмотр.
  5. Убедимся, что у роли также установлены права Чтение и Просмотр для справочника УчетныеЗаписиЭлектроннойПочты.

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

Резюме

Мы выяснили, что "пропадание" элементов интерфейса в 1С чаще всего связано с тонкостями работы платформы по ограничению прав видимости. Использование явного программного вызова через метод ОткрытьФорму в локальной команде формы (Вариант А) — это золотой стандарт разработки, который гарантирует предсказуемость работы интерфейса и чистоту прав доступа ваших пользователей.

← На главную