Часто возникает ситуация, когда после настройки ограниченного профиля прав (например, «Только чтение» или «Менеджер по продажам») пользователи начинают жаловаться на спонтанное появление окна с ошибкой «Нарушение прав доступа». Особенность такой ошибки в том, что она может возникать, даже когда пользователь ничего не делает в программе: просто открыл 1С и отошел на пару минут.
В этой статье мы подробно разберем, как диагностировать такие «плавающие» ошибки, как правильно пользоваться Журналом регистрации для их отлова и как исправить конкретную проблему, связанную с подсистемой документооборота с контролирующими органами (1С-Отчетность), которая часто становится причиной подобных сбоев после обновлений конфигурации.
Когда пользователь сообщает, что ошибка появляется «сама по себе», это первый признак того, что срабатывает какой-то фоновый механизм на клиенте. Это может быть Обработчик ожидания (функция, запускаемая по таймеру) или оповещение от сервера.
Чтобы понять, чего именно не хватает пользователю, нам необходимо заглянуть в технические логи. Обычное окно ошибки в режиме Предприятия часто скрывает детали от пользователя. Нам поможет Журнал регистрации.
Рассмотрим последовательность действий для диагностики:
После включения регистрации попросим пользователя воспроизвести ситуацию (запустить программу и подождать). Как только ошибка появится на экране, обновим Журнал регистрации.
В рассматриваемом случае в журнале регистрации была зафиксирована следующая ошибка. Давайте внимательно проанализируем текст ошибки, так как в нем содержится ответ.
Ошибка при вызове метода контекста (Сохранить)
{Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.КонтейнерКлиентскихМетодов.Форма(45881)}:
ХранилищеОбщихНастроек.Сохранить("АвтообменСКО_ДатаВремяКрайнегоЗапроса", , ДатаТекущегоАвтообменаСКО);
...
по причине:
Нарушение прав доступа!
Что мы видим в этом коде:
ХранилищеОбщихНастроек.Сохранить(...). Этот метод пытается записать персональную настройку для текущего пользователя.ДокументооборотСКонтролирующимиОрганами."АвтообменСКО_ДатаВремяКрайнегоЗапроса". Система пытается запомнить дату и время, когда она последний раз опрашивала сервер ФНС/ПФР на наличие новых требований или писем.Вывод: Ошибка возникает не из-за того, что пользователь пытается открыть документ, а из-за того, что встроенный механизм «1С-Отчетности» в фоновом режиме проверяет почту от налоговой и пытается сохранить результат этой проверки (время проверки) в настройки пользователя. Так как у пользователя профиль «Только чтение», у него закономерно отсутствуют права на запись системных настроек.
Разработчики типовых конфигураций (ERP, Управление торговлей, Бухгалтерия) регулярно обновляют библиотеку регламентированной отчетности. В новых версиях (например, в ветке 2.5.21.x) могут добавляться новые механизмы автообмена, которые по умолчанию включены. Если раньше механизм не пытался ничего писать в настройки при отсутствии прав, то в новом релизе логика могла измениться, и вызов метода Сохранить стал происходить без предварительной проверки прав (или без установки привилегированного режима).
Мы выяснили причину. Теперь разберем три способа исправления ситуации, от самого правильного (методологически) до технического.
Пользователю с правами «Только чтение» (например, аудитору или стажеру), скорее всего, не нужно участвовать в документообороте с налоговой инспекцией. Ему не нужно получать требования и уведомления. Поэтому самое логичное решение — отключить саму попытку обмена.
Для этого выполним следующие действия:
Если механизм отключен, обработчик ожидания не будет запускаться, и попытки записи в настройки не произойдет.
Если отключить автообмен невозможно или ошибка возникает в другом месте при вызове ХранилищеОбщихНастроек.Сохранить, необходимо проверить глобальные права.
Даже если вы создали роль, где запрещено изменение всех справочников и документов, существует системное право, отвечающее за сохранение персональных настроек (размеры окон, настройки отчетов, значения по умолчанию и т.д.).
Рассмотрим, как это проверить:
Это право безопасно: оно не дает возможности менять данные учета (документы, справочники), но позволяет платформе сохранять техническую информацию о сеансе пользователя.
В некоторых современных конфигурациях стандартное ХранилищеОбщихНастроек переопределено разработчиками и физически данные пишутся в регистр сведений (например, РегистрСведений.НастройкиПользователей или РегистрСведений.ХранилищеНастроек).
Если способ 2 не помог, проанализируйте журнал регистрации еще раз. Если в поле «Данные» указан конкретный регистр сведений, пользователю необходимо дать права на:
Это можно сделать, добавив этот регистр в роль пользователя или включив роль «Чтение и изменение персональных настроек» (если такая предусмотрена в вашей конфигурации).
Ошибка «Нарушение прав доступа» при простое системы почти всегда связана с фоновыми регламентными заданиями или обработчиками ожидания на клиенте. В случае с 1С-Отчетностью система пытается сохранить время последнего сеанса связи с сервером.
Для быстрого решения: Дайте пользователю общее право на «Сохранение данных пользователя» в корне конфигурации.
Для правильного решения: Отключите функционал автоматического обмена с контролирующими органами в настройках программы для тех пользователей, которым это не требуется по должностным обязанностям.