Ошибка «Нарушение прав доступа»: ищем роль и объект, на которые нет прав
Содержание
Чтобы определить, каких прав не хватает пользователю
1С, откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации), отберите события этого пользователя за минуту, когда он увидел ошибку. В колонке «Метаданные» будет объект, к которому не пустила платформа. Дальше сверяете этот объект с ролями пользователя: в типовых конфигурациях — через профили групп доступа, в остальных — через Конфигуратор.
Способ работает в любой конфигурации на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и самописных базах. Пути меню ниже даны для интерфейса «Такси». Права меняет администратор базы, поэтому все проверки делайте под учётной записью с полными правами.
1. Разбираем текст ошибки: что уже сказала 1С
Первая подсказка — сам текст ошибки. Попросите пользователя не закрывать окно, а нажать «Подробнее» и прислать скриншот целиком. Короткое Нарушение прав доступа! мало что даёт, а в подробностях часто видно модуль, строку кода и объект.
Что выяснить у пользователя сразу:
- 🕐 время ошибки с точностью до минуты — по нему ищете запись в журнале;
- 🖱 действие: открыл список, провёл документ, нажал «Печать», сформировал отчёт;
- 📄 конкретный документ или элемент — номер и дату;
- 👥 повторяется ли у коллег с такими же обязанностями.
Последний пункт экономит половину поиска. Если у коллеги из того же отдела всё работает, сравните группы доступа двух пользователей — разница почти всегда там.
Как отличить нехватку прав от другой ошибки
| Что видит пользователь | Вероятная причина |
|---|---|
Нарушение прав доступа! при открытии формы или проведении | Нет права на объект (чтение, изменение, проведение) |
| Список открывается, но пустой или в нём не все документы | Ограничение на уровне записей (RLS) |
| В поле документа вместо значения пустота или служебный текст «объект не найден» | Нет доступа к записи справочника, на которую ссылается документ |
| Нет кнопки или раздела, которые есть у коллеги | У роли нет права «Просмотр» или интерактивного права на объект |
| Нет команды «Печать», не работает копирование в буфер | Нет права «Вывод» |
| Программа не запускается в нужном клиенте | Нет права на запуск тонкого клиента, веб-клиента или внешнего соединения |
Если ошибка возникает у всех пользователей, включая администратора, дело не в правах. Ищите ошибку в доработке или в данных.
2. Журнал регистрации: где видно, к чему 1С не пустила пользователя
Журнал регистрации — главный инструмент. Откройте Администрирование → Обслуживание → Журнал регистрации и нажмите «Установить отбор». В Конфигураторе тот же журнал вызывается через Администрирование → Журнал регистрации.
Порядок поиска:
- Укажите интервал: 5 минут до и после ошибки.
- В поле «Пользователь» выберите нужного сотрудника.
- В «Событиях» оставьте группу «Доступ» с событием «Отказ в доступе». Если таких записей нет, снимите отбор по событию и оставьте только уровень «Ошибка».
- Откройте найденную запись двойным щелчком.
В записи смотрите три поля:
- 📦 Метаданные — объект, к которому не дали доступ, например
Документ.ПоступлениеТоваровУслугилиРегистрНакопления.ТоварыНаСкладах; - 💬 Комментарий — текст ошибки, часто с видом права;
- 🗂 Данные — ссылка на конкретный документ или элемент, если платформа её записала.
Чаще всего проблемный объект — не тот документ, с которым работал пользователь. Документ проводится и пишет движения в регистры. Если к одному из регистров нет права «Изменение», проведение упадёт, хотя сам документ открыт и доступен. Журнал покажет именно регистр.
Журнал пишет только то, что разрешает уровень регистрации. Если в Конфигураторе в Администрирование → Настройка журнала регистрации стоит «Не регистрировать», записей не будет. Для поиска хватит уровня «Регистрировать ошибки».
3. Профили и группы доступа: какие права у пользователя сейчас
В Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА и ERP права выдаются не ролями напрямую, а через профили групп доступа. Профиль — набор ролей. Группа доступа — профиль плюс список участников и ограничения.
Где это смотреть:
| Что нужно | Путь |
|---|---|
| Карточка пользователя | Администрирование → Настройки пользователей и прав → Пользователи |
| Группы, в которые он входит | кнопка «Права доступа» в карточке пользователя |
| Список групп доступа | Администрирование → Настройки пользователей и прав → Группы доступа |
| Состав профиля (роли) | Администрирование → Настройки пользователей и прав → Профили групп доступа |
Откройте профиль из группы пользователя и посмотрите список ролей. Названия ролей говорят сами за себя: «Чтение документов по банку», «Добавление и изменение документов по банку». Если объект из журнала регистрации относится к банку, а в профиле есть только роль чтения — вот и недостающее право.
Как понять, какая роль даёт право на объект
Самый надёжный приём практика — окно «Все роли» в Конфигураторе. Откройте Конфигурация → Открыть конфигурацию, в дереве щёлкните правой кнопкой по ветке «Роли» и выберите «Все роли». Откроется матрица: слева объекты метаданных, сверху роли, в ячейках — права.
Найдите объект из журнала и посмотрите, в каких ролях стоит нужная галочка, например «Проведение» или «Изменение». Затем найдите профиль, который содержит такую роль.
В матрице удобно включить отбор по одному объекту и смотреть строку целиком. Так за минуту видно все роли, дающие нужное право.
Чего не делать в базах на БСП
Не добавляйте роли пользователю вручную в Конфигураторе в базах, где права ведутся через группы доступа. Программа пересчитывает роли по профилям, и ваша правка пропадёт при следующем изменении групп. Правильный путь — добавить пользователя в подходящую группу доступа или создать свой профиль.
Типовые поставляемые профили менять нельзя: их состав задаёт поставщик конфигурации. Скопируйте профиль командой копирования в списке профилей, добавьте нужную роль в копию и назначьте её группе.
4. Ограничения на уровне записей: права есть, а документов не видно
Бывает, что роль на объект есть, а пользователь всё равно не видит часть документов или получает отказ при записи. Это ограничение доступа на уровне записей, по-английски RLS (Record Level Security).
Признаки RLS:
- 📋 список открывается, но в нём только документы «своей» организации или склада;
- 🔗 в документе вместо контрагента или склада пусто;
- ✍️ новый документ нельзя записать с конкретной организацией, а с другой — можно;
- 📊 отчёт выводит меньше строк, чем у бухгалтера с полными правами.
Механизм включается флажком Администрирование → Настройки пользователей и прав → Ограничивать доступ на уровне записей. Если флажок снят, RLS не работает
, и причину ищите в ролях.
Где задаются ограничения
Откройте группу доступа пользователя и перейдите на вкладку ограничений. Там перечислены виды доступа: организации, склады, группы контрагентов и другие — набор зависит от конфигурации и профиля. Для каждого вида задано правило:
| Правило | Что значит |
|---|---|
| Все разрешены | доступ ко всем значениям, кроме указанных в списке |
| Все запрещены | доступ только к значениям из списка |
Типичная ситуация: бухгалтеру открыли новую организацию, а в группе стоит «Все запрещены» со списком из двух старых. Документы третьей организации он не увидит. Добавьте её в список и запишите группу.
После изменения ограничений программа обновляет доступ в фоне. В больших базах это занимает время, поэтому пользователь увидит данные не сразу. Если доступ не появился через полчаса, перезапустите сеанс пользователя.
Если ограничение задано в самописной конфигурации прямо в тексте роли, его видно в Конфигураторе: откройте роль, выберите объект и право — внизу будет поле «Ограничение доступа к данным» с условием.
5. Технические права: запуск, печать, внешние обработки
Отдельная группа — права на корень конфигурации. Они не привязаны к документам и справочникам, поэтому журнал регистрации и матрица объектов на них не укажут. В окне роли эти права видны, если выделить в дереве саму конфигурацию (верхний узел).
Чаще всего не хватает этих прав:
| Право | Что не работает без него |
|---|---|
| Тонкий клиент / Веб-клиент / Толстый клиент | запуск базы в этом клиенте |
| Внешнее соединение | подключение по COM из других программ, часть обменов |
| Вывод | печать, сохранение в файл, копирование из табличных документов |
| Сохранение данных пользователя | запоминание настроек форм и отчётов |
| Интерактивное открытие внешних обработок / отчётов | открытие файлов .epf и .erf через «Файл → Открыть» |
| Журнал регистрации | просмотр журнала |
| Активные пользователи | просмотр списка сеансов |
| Администрирование | управление пользователями, обновление, тестирование базы |
Пример. Пользователь жалуется, что «отчёт формируется, но не печатается и не сохраняется в Excel». Ошибки нет, журнал пуст. Причина — у роли снято право «Вывод».
В конфигурациях на БСП внешние обработки обычно подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчеты и обработки. Тогда пользователю не нужно право интерактивного открытия файлов — достаточно доступа к разделу, в котором обработка размещена.
Если пользователь в окне запуска вообще не видит базу или получает отказ при входе, проверьте не роли, а список пользователей информационной базы: возможно, у него снят флажок входа или не задан способ аутентификации.
6. Отладчик и код: находим строку, на которой не хватает прав
Если журнал не дал ответа, ошибку ловят отладчиком. Этот способ показывает точное место в коде, где платформа выбросила исключение.
Остановка по ошибке
- Создайте тестового пользователя с теми же группами доступа или с теми же ролями. Под реальным сотрудником без его пароля не войти, а сбрасывать чужой пароль ради проверки не стоит.
- В Конфигураторе откройте меню
Отладка → Остановка по ошибкеи включите остановку. - Запустите отладку под тестовым пользователем:
Отладка → Начать отладку → Тонкий клиент, в окне входа укажите его имя. - Повторите действие, на котором падала ошибка.
- Отладчик остановится на строке. Откройте «Стек вызовов» — видно, из какой процедуры и какого модуля пришёл вызов, и к какому объекту обращался код.
Часто окажется, что форма документа в фоне читает регистр сведений или константу, к которой у роли нет доступа. Сам пользователь эту константу никогда не открывал, но без права на неё форма не работает.
Отладку запускайте на копии базы или в нерабочее время. Остановка в точке прерывания на серверной стороне может задерживать работу других пользователей.
Проверка права кодом
Когда объект известен, проверить права ролей можно функцией ПравоДоступа(). Код ниже выполняется на сервере, например во внешней обработке под администратором. Он выводит все роли, которые дают право на проведение документа, и проверяет конкретного пользователя.
&НаСервере
Процедура ПроверитьПраваНаСервере()
ОбъектМД = Метаданные.Документы.ПоступлениеТоваровУслуг;
ИмяПрава = "Проведение";
// Роли, которые дают это право
Для Каждого Роль Из Метаданные.Роли Цикл
Если ПравоДоступа(ИмяПрава, ОбъектМД, Роль) Тогда
Сообщить("Право даёт роль: " + Роль.Имя);
КонецЕсли;
КонецЦикла;
// Есть ли право у конкретного пользователя
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванова");
Если ПользовательИБ = Неопределено Тогда
Сообщить("Пользователь не найден");
Возврат;
КонецЕсли;
Если ПравоДоступа(ИмяПрава, ОбъектМД, ПользовательИБ) Тогда
Сообщить("У пользователя право есть");
Иначе
Сообщить("У пользователя права нет");
КонецЕсли;
КонецПроцедуры
Подставьте свой объект метаданных и имя пользователя ИБ. Имя права пишется так же, как в окне роли: «Чтение», «Добавление», «Изменение», «Удаление», «Проведение», «Просмотр».
ПравоДоступа() проверяет право на объект целиком и не учитывает ограничения на уровне записей. Если функция возвращает «Истина», а документ всё равно недоступен, ищите причину в ограничениях группы доступа из раздела 4.
7. Как выдать недостающее право и не открыть лишнего
Найти право — половина дела. Выдать его нужно так, чтобы пользователь не получил доступ к зарплате всей организации ради одного отчёта.
Порядок действий:
- Подберите профиль, в котором есть нужная роль и нет лишних. В типовых конфигурациях профили поставляются по обязанностям: «Бухгалтер», «Кассир», «Кладовщик» и так далее.
- Если подходящего профиля нет, скопируйте близкий и добавьте одну роль.
- Создайте группу доступа с этим профилем или добавьте пользователя в существующую.
- Заполните ограничения: организации, склады — только нужные.
- Попросите пользователя перезапустить программу: роли применяются к новому сеансу.
| Подход | Когда подходит | Риски |
|---|---|---|
| Добавить в существующую группу | у коллег та же должность | получит все права группы |
| Своя группа с типовым профилем | нужен другой набор ограничений | группы множатся, их трудно поддерживать |
| Копия профиля с доп. ролью | нужно одно право сверх типового | после обновления сверяйте состав копии |
| Своя роль в расширении | в типовых ролях нужного права нет | требует навыков разработчика, проверяйте после обновлений |
Не выдавайте профиль «Администратор» ради одной операции. Администратор видит всё, включая зарплату и настройки пользователей, а действия под ним сложно разобрать по журналу.
Если нужного права нет ни в одной типовой роли, создайте роль в расширении конфигурации и подключите её в свой профиль. Основную конфигурацию при этом снимать с поддержки не придётся.
Частые вопросы
Почему после выдачи прав ошибка осталась?
Можно ли посмотреть права пользователя, не заходя под ним?
ПравоДоступа() с пользователем ИБ.Почему в Конфигураторе роли у пользователя одни, а в программе другие?
Что делать, если не хватает прав у администратора?
Нарушение прав доступа!, проверьте, назначена ли ему эта роль. Если назначена, причину ищите в доработке или в данных, а не в правах.