Как исправить ошибку «Нарушение прав доступа» при подписании документов в 1С:Документооборот 2.1

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

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

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

Анализ технической причины ошибки

Для начала проанализируем текст ошибки, который выдает система. Чаще всего стек вызова указывает на следующую строку:

ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();

Ошибка возникает в общем модуле или в форме справочника СертификатыКлючейЭлектроннойПодписиИШифрования. Суть проблемы заключается в том, что в коде типового решения происходит обращение к значению константы напрямую. В некоторых версиях конфигурации (например, 2.1.31.5) права на чтение этой конкретной константы были по ошибке исключены из стандартных ролей, предназначенных для обычных пользователей.

Когда система пытается выполнить метод Получить() в контексте сервера, механизм проверки прав 1С блокирует операцию, так как у пользователя нет права «Чтение» для объекта Константа.ТипПодписиКриптографииПоУмолчанию. При этом под полными правами всё работает корректно, что подтверждает гипотезу о недостатке полномочий.

Способ 1. Проверка и настройка типовых ролей

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

Рассмотрим по шагам, что нужно проверить:

  1. Откроем карточку пользователя и перейдем в его Права доступа.
  2. Проверим наличие роли «Базовые права БСП». Эта роль должна содержать минимально необходимый набор прав для работы системных механизмов. Однако, как показывает практика, в проблемных релизах этой роли недостаточно.
  3. Найдем и добавим (если они отсутствуют) следующие роли:
    • Использование электронной подписи
    • Чтение настроек криптографии
  4. Убедимся, что пользователю разрешено чтение справочника Программы электронной подписи и шифрования.

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

Способ 2. Решение проблемы через расширение конфигурации

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

Разберем процесс создания такого расширения:

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

Альтернативный вариант в расширении — перехватить вызов процедуры подписания и выполнить чтение константы в привилегированном режиме. Рассмотрим пример кода для общего модуля:


&После("УстановитьДоступностьЭлементовТипаПодписи")
Процедура Испр_УстановитьДоступностьЭлементовТипаПодписи()
    УстановитьПривилегированныйРежим(Истина);
    // Теперь чтение константы пройдет успешно под любым пользователем
    ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

Способ 3. Обновление конфигурации и платформы

Разработчики фирмы «1С» признали данную проблему ошибкой и выпустили соответствующие исправления. В релизах 2.1.32 и выше права доступа на объекты криптографии были пересмотрены и исправлены.

Проанализируем, почему обновление является приоритетным решением:

Дополнительный нюанс: Функциональные опции

Выясним еще одну неочевидную причину. В системе 1С права на чтение константы могут быть ограничены функциональными опциями. Если константа ТипПодписиКриптографииПоУмолчанию входит в состав функциональной опции, которая не включена или к которой у пользователя нет доступа, метод Получить() может возвращать ошибку прав доступа.

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

Подводя итог, отметим, что самым быстрым "костылем" для восстановления работы сотрудников является создание расширения с предоставлением прав на чтение константы, а самым правильным стратегическим решением — плановое обновление программы до версии 2.1.32 или переход на 1С:Документооборот 3.0.

← На главную