Ошибка «Нарушение прав доступа»: ищем роль и объект, на которые нет прав

· 11 мин

Содержание

Чтобы определить, каких прав не хватает пользователю 1С, откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации), отберите события этого пользователя за минуту, когда он увидел ошибку. В колонке «Метаданные» будет объект, к которому не пустила платформа. Дальше сверяете этот объект с ролями пользователя: в типовых конфигурациях — через профили групп доступа, в остальных — через Конфигуратор.

Способ работает в любой конфигурации на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и самописных базах. Пути меню ниже даны для интерфейса «Такси». Права меняет администратор базы, поэтому все проверки делайте под учётной записью с полными правами.

1. Разбираем текст ошибки: что уже сказала 1С

Первая подсказка — сам текст ошибки. Попросите пользователя не закрывать окно, а нажать «Подробнее» и прислать скриншот целиком. Короткое Нарушение прав доступа! мало что даёт, а в подробностях часто видно модуль, строку кода и объект.

Что выяснить у пользователя сразу:

  • 🕐 время ошибки с точностью до минуты — по нему ищете запись в журнале;
  • 🖱 действие: открыл список, провёл документ, нажал «Печать», сформировал отчёт;
  • 📄 конкретный документ или элемент — номер и дату;
  • 👥 повторяется ли у коллег с такими же обязанностями.

Последний пункт экономит половину поиска. Если у коллеги из того же отдела всё работает, сравните группы доступа двух пользователей — разница почти всегда там.

Как отличить нехватку прав от другой ошибки

Что видит пользовательВероятная причина
Нарушение прав доступа! при открытии формы или проведенииНет права на объект (чтение, изменение, проведение)
Список открывается, но пустой или в нём не все документыОграничение на уровне записей (RLS)
В поле документа вместо значения пустота или служебный текст «объект не найден»Нет доступа к записи справочника, на которую ссылается документ
Нет кнопки или раздела, которые есть у коллегиУ роли нет права «Просмотр» или интерактивного права на объект
Нет команды «Печать», не работает копирование в буферНет права «Вывод»
Программа не запускается в нужном клиентеНет права на запуск тонкого клиента, веб-клиента или внешнего соединения

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

2. Журнал регистрации: где видно, к чему 1С не пустила пользователя

Журнал регистрации — главный инструмент. Откройте Администрирование → Обслуживание → Журнал регистрации и нажмите «Установить отбор». В Конфигураторе тот же журнал вызывается через Администрирование → Журнал регистрации.

Порядок поиска:

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

В записи смотрите три поля:

  • 📦 Метаданные — объект, к которому не дали доступ, например Документ.ПоступлениеТоваровУслуг или РегистрНакопления.ТоварыНаСкладах;
  • 💬 Комментарий — текст ошибки, часто с видом права;
  • 🗂 Данные — ссылка на конкретный документ или элемент, если платформа её записала.

Чаще всего проблемный объект — не тот документ, с которым работал пользователь. Документ проводится и пишет движения в регистры. Если к одному из регистров нет права «Изменение», проведение упадёт, хотя сам документ открыт и доступен. Журнал покажет именно регистр.

Журнал пишет только то, что разрешает уровень регистрации. Если в Конфигураторе в Администрирование → Настройка журнала регистрации стоит «Не регистрировать», записей не будет. Для поиска хватит уровня «Регистрировать ошибки».

3. Профили и группы доступа: какие права у пользователя сейчас

В Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА и ERP права выдаются не ролями напрямую, а через профили групп доступа. Профиль — набор ролей. Группа доступа — профиль плюс список участников и ограничения.

Где это смотреть:

Что нужноПуть
Карточка пользователяАдминистрирование → Настройки пользователей и прав → Пользователи
Группы, в которые он входиткнопка «Права доступа» в карточке пользователя
Список групп доступаАдминистрирование → Настройки пользователей и прав → Группы доступа
Состав профиля (роли)Администрирование → Настройки пользователей и прав → Профили групп доступа

Откройте профиль из группы пользователя и посмотрите список ролей. Названия ролей говорят сами за себя: «Чтение документов по банку», «Добавление и изменение документов по банку». Если объект из журнала регистрации относится к банку, а в профиле есть только роль чтения — вот и недостающее право.

Как понять, какая роль даёт право на объект

Самый надёжный приём практика — окно «Все роли» в Конфигураторе. Откройте Конфигурация → Открыть конфигурацию, в дереве щёлкните правой кнопкой по ветке «Роли» и выберите «Все роли». Откроется матрица: слева объекты метаданных, сверху роли, в ячейках — права.

Найдите объект из журнала и посмотрите, в каких ролях стоит нужная галочка, например «Проведение» или «Изменение». Затем найдите профиль, который содержит такую роль.

В матрице удобно включить отбор по одному объекту и смотреть строку целиком. Так за минуту видно все роли, дающие нужное право.

Чего не делать в базах на БСП

Не добавляйте роли пользователю вручную в Конфигураторе в базах, где права ведутся через группы доступа. Программа пересчитывает роли по профилям, и ваша правка пропадёт при следующем изменении групп. Правильный путь — добавить пользователя в подходящую группу доступа или создать свой профиль.

Типовые поставляемые профили менять нельзя: их состав задаёт поставщик конфигурации. Скопируйте профиль командой копирования в списке профилей, добавьте нужную роль в копию и назначьте её группе.

4. Ограничения на уровне записей: права есть, а документов не видно

Бывает, что роль на объект есть, а пользователь всё равно не видит часть документов или получает отказ при записи. Это ограничение доступа на уровне записей, по-английски RLS (Record Level Security).

Признаки RLS:

  • 📋 список открывается, но в нём только документы «своей» организации или склада;
  • 🔗 в документе вместо контрагента или склада пусто;
  • ✍️ новый документ нельзя записать с конкретной организацией, а с другой — можно;
  • 📊 отчёт выводит меньше строк, чем у бухгалтера с полными правами.

Механизм включается флажком Администрирование → Настройки пользователей и прав → Ограничивать доступ на уровне записей. Если флажок снят, RLS не работает , и причину ищите в ролях.

Где задаются ограничения

Откройте группу доступа пользователя и перейдите на вкладку ограничений. Там перечислены виды доступа: организации, склады, группы контрагентов и другие — набор зависит от конфигурации и профиля. Для каждого вида задано правило:

ПравилоЧто значит
Все разрешеныдоступ ко всем значениям, кроме указанных в списке
Все запрещеныдоступ только к значениям из списка

Типичная ситуация: бухгалтеру открыли новую организацию, а в группе стоит «Все запрещены» со списком из двух старых. Документы третьей организации он не увидит. Добавьте её в список и запишите группу.

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

Если ограничение задано в самописной конфигурации прямо в тексте роли, его видно в Конфигураторе: откройте роль, выберите объект и право — внизу будет поле «Ограничение доступа к данным» с условием.

5. Технические права: запуск, печать, внешние обработки

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

Чаще всего не хватает этих прав:

ПравоЧто не работает без него
Тонкий клиент / Веб-клиент / Толстый клиентзапуск базы в этом клиенте
Внешнее соединениеподключение по COM из других программ, часть обменов
Выводпечать, сохранение в файл, копирование из табличных документов
Сохранение данных пользователязапоминание настроек форм и отчётов
Интерактивное открытие внешних обработок / отчётовоткрытие файлов .epf и .erf через «Файл → Открыть»
Журнал регистрациипросмотр журнала
Активные пользователипросмотр списка сеансов
Администрированиеуправление пользователями, обновление, тестирование базы

Пример. Пользователь жалуется, что «отчёт формируется, но не печатается и не сохраняется в Excel». Ошибки нет, журнал пуст. Причина — у роли снято право «Вывод».

В конфигурациях на БСП внешние обработки обычно подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчеты и обработки. Тогда пользователю не нужно право интерактивного открытия файлов — достаточно доступа к разделу, в котором обработка размещена.

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

Диагностика: выберите симптом

6. Отладчик и код: находим строку, на которой не хватает прав

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

Остановка по ошибке

  1. Создайте тестового пользователя с теми же группами доступа или с теми же ролями. Под реальным сотрудником без его пароля не войти, а сбрасывать чужой пароль ради проверки не стоит.
  2. В Конфигураторе откройте меню Отладка → Остановка по ошибке и включите остановку.
  3. Запустите отладку под тестовым пользователем: Отладка → Начать отладку → Тонкий клиент, в окне входа укажите его имя.
  4. Повторите действие, на котором падала ошибка.
  5. Отладчик остановится на строке. Откройте «Стек вызовов» — видно, из какой процедуры и какого модуля пришёл вызов, и к какому объекту обращался код.

Часто окажется, что форма документа в фоне читает регистр сведений или константу, к которой у роли нет доступа. Сам пользователь эту константу никогда не открывал, но без права на неё форма не работает.

Отладку запускайте на копии базы или в нерабочее время. Остановка в точке прерывания на серверной стороне может задерживать работу других пользователей.

Проверка права кодом

Когда объект известен, проверить права ролей можно функцией ПравоДоступа(). Код ниже выполняется на сервере, например во внешней обработке под администратором. Он выводит все роли, которые дают право на проведение документа, и проверяет конкретного пользователя.

&НаСервере
Процедура ПроверитьПраваНаСервере()

    ОбъектМД = Метаданные.Документы.ПоступлениеТоваровУслуг;
    ИмяПрава = "Проведение";

    // Роли, которые дают это право
    Для Каждого Роль Из Метаданные.Роли Цикл
        Если ПравоДоступа(ИмяПрава, ОбъектМД, Роль) Тогда
            Сообщить("Право даёт роль: " + Роль.Имя);
        КонецЕсли;
    КонецЦикла;

    // Есть ли право у конкретного пользователя
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванова");
    Если ПользовательИБ = Неопределено Тогда
        Сообщить("Пользователь не найден");
        Возврат;
    КонецЕсли;

    Если ПравоДоступа(ИмяПрава, ОбъектМД, ПользовательИБ) Тогда
        Сообщить("У пользователя право есть");
    Иначе
        Сообщить("У пользователя права нет");
    КонецЕсли;

КонецПроцедуры

Подставьте свой объект метаданных и имя пользователя ИБ. Имя права пишется так же, как в окне роли: «Чтение», «Добавление», «Изменение», «Удаление», «Проведение», «Просмотр».

ПравоДоступа() проверяет право на объект целиком и не учитывает ограничения на уровне записей. Если функция возвращает «Истина», а документ всё равно недоступен, ищите причину в ограничениях группы доступа из раздела 4.

7. Как выдать недостающее право и не открыть лишнего

Найти право — половина дела. Выдать его нужно так, чтобы пользователь не получил доступ к зарплате всей организации ради одного отчёта.

Порядок действий:

  1. Подберите профиль, в котором есть нужная роль и нет лишних. В типовых конфигурациях профили поставляются по обязанностям: «Бухгалтер», «Кассир», «Кладовщик» и так далее.
  2. Если подходящего профиля нет, скопируйте близкий и добавьте одну роль.
  3. Создайте группу доступа с этим профилем или добавьте пользователя в существующую.
  4. Заполните ограничения: организации, склады — только нужные.
  5. Попросите пользователя перезапустить программу: роли применяются к новому сеансу.
ПодходКогда подходитРиски
Добавить в существующую группуу коллег та же должностьполучит все права группы
Своя группа с типовым профилемнужен другой набор ограниченийгруппы множатся, их трудно поддерживать
Копия профиля с доп. рольюнужно одно право сверх типовогопосле обновления сверяйте состав копии
Своя роль в расширениив типовых ролях нужного права неттребует навыков разработчика, проверяйте после обновлений

Не выдавайте профиль «Администратор» ради одной операции. Администратор видит всё, включая зарплату и настройки пользователей, а действия под ним сложно разобрать по журналу.

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

Перед закрытием заявки на права
Выполнено: 0 / 6

Частые вопросы

Почему после выдачи прав ошибка осталась?
Роли применяются к новому сеансу. Пользователь должен закрыть программу и войти заново. Если используются ограничения на уровне записей, дождитесь окончания фонового обновления доступа.
Можно ли посмотреть права пользователя, не заходя под ним?
Да. В карточке пользователя кнопка «Права доступа» показывает его группы, а в Конфигураторе в списке пользователей видны все назначенные роли. Для точной проверки по объекту используйте функцию ПравоДоступа() с пользователем ИБ.
Почему в Конфигураторе роли у пользователя одни, а в программе другие?
В базах на БСП роли пересчитываются по группам доступа. Ручная правка ролей в Конфигураторе перезаписывается при следующем изменении групп. Источник правды — группы и профили.
Что делать, если не хватает прав у администратора?
У пользователя с ролью «Полные права» нет ограничений на объекты. Если он получает Нарушение прав доступа!, проверьте, назначена ли ему эта роль. Если назначена, причину ищите в доработке или в данных, а не в правах.
Журнал регистрации пуст. Где ещё искать?
Проверьте уровень регистрации в Конфигураторе: при «Не регистрировать» журнал ничего не пишет. Затем используйте отладчик с остановкой по ошибке — он покажет строку и объект даже без записей в журнале.