При работе в программах «1С:Предприятие», особенно в конфигурациях на обычных формах, таких как «Управление производственным предприятием» (УПП) или «Комплексная автоматизация» (КА) 1.1, программисты часто сталкиваются со специфическим поведением системы прав доступа. Типичная ситуация: запрос, выбирающий только ссылку (Ссылка), отрабатывает корректно, но стоит добавить в выборку любое другое поле (например, Проведен или Дата), как система выдает ошибку: «У пользователя недостаточно прав...».
Разберем детально, почему это происходит, как работает механизм RLS (Row Level Security) и где именно в системе хранятся настройки, которые «прячут» документы от пользователя.
В 1С существует два уровня проверки прав. Первый уровень — это объектные права (чтение, добавление, изменение таблицы в целом). Если у пользователя есть право на чтение документа РеализацияТоваровУслуг, он может обращаться к этой таблице. Однако в игру вступает второй уровень — ограничение доступа на уровне записей (RLS).
Проанализируем ситуацию: когда вы пишете запрос ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка..., система может вернуть ссылку на объект, даже если доступ к данным этого объекта ограничен, так как ссылка сама по себе является идентификатором. Но как только вы запрашиваете реквизиты (например, поле Проведен), система обязана прочитать данные из записи базы данных. В этот момент срабатывает условие RLS, зашитое в роли пользователя.
Если условие RLS не выполняется хотя бы для одной записи, попадающей в выборку, 1С по умолчанию считает, что у пользователя нет прав на выполнение всей операции чтения. Именно поэтому возникает ошибка доступа. Рассмотрим два способа формирования запроса:
Вариант 1 (вызывает ошибку, если есть хотя бы одна «запрещенная» запись):
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.Проведен
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Вариант 2 (ошибка исчезает, записи просто отфильтровываются):
ВЫБРАТЬ РАЗРЕШЕННЫЕ
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.Проведен
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Использование ключевого слова РАЗРЕШЕННЫЕ заставляет систему автоматически добавить к вашему запросу скрытые условия, которые исключат из результата все строки, на которые у пользователя нет прав. Это избавляет от ошибки, но «скрывает» данные, что и беспокоило автора темы.
В типовых конфигурациях для ограничения доступа часто используются шаблоны (макросы). Выясним, что означает конструкция #КонтрагентОрганизацияСклад("Контрагент", "Организация", "Склад"), упомянутая в обсуждении. Это универсальный фильтр, который проверяет права пользователя сразу по трем измерениям:
Важно понимать, что этот макрос работает по логике «И». Чтобы документ отобразился в отчете, у пользователя должны быть права одновременно на организацию, на контрагента и на склад. Если хотя бы по одному пункту стоит запрет — документ будет недоступен.
Настройки прав доступа в 1С (особенно в УПП) хранятся не в конфигураторе, а непосредственно в базе данных. Проанализируем основные места, где задаются эти ограничения:
1. Обработка «Настройка прав доступа»
В УПП это основной инструмент администратора. Здесь можно увидеть дерево прав, где в разрезе пользователей или групп пользователей указываются доступные объекты. Нужно проверить, не ограничены ли права по конкретным группам доступа контрагентов.
2. Регистр сведений «Настройки прав доступа пользователей»
Это «сердце» RLS. Именно здесь хранятся записи вида: «Пользователь Иванов — Объект доступа: Организация "Северная" — Вид объекта: Организации». Если пользователь не входит в группы, система проверяет индивидуальные записи в этом регистре. Рассмотрим, как проверить это запросом:
ВЫБРАТЬ
Настройки.Пользователь,
Настройки.ОбъектДоступа,
Настройки.ВидОбъектаДоступа
ИЗ
РегистрСведений.НастройкиПраваДоступаПользователей КАК Настройки
ГДЕ
Настройки.Пользователь = &ТекущийПользователь
3. Группы доступа контрагентов
Обратите внимание на карточку Контрагента. Там может быть указана «Группа доступа». Если в настройках прав разрешен доступ к определенной группе, то пользователь увидит всех контрагентов внутри неё. Если вы создали нового пользователя и он видит «еще меньше», это означает, что в системе действует принцип «Запрещено всё, что не разрешено явно». Если для пользователя или его групп нет записей в регистре настроек, он не увидит ничего.
Чтобы точно определить, какие записи блокируют запрос, выполним следующие шаги:
РАЗРЕШЕННЫЕ. Выгрузите результаты в Excel и сравните их. Те записи, которые отсутствуют у пользователя, и есть причина конфликта.Если вам необходимо, чтобы пользователь видел все данные в отчете, несмотря на ограничения RLS, у вас есть три пути:
УстановитьПривилегированныйРежим(Истина). В этом случае RLS будет проигнорирован.Подводя итог: ошибка «Недостаточно прав» в запросе — это не поломка программы, а штатная работа системы безопасности 1С. Для её устранения нужно либо использовать РАЗРЕШЕННЫЕ, осознавая потерю части данных, либо детально настраивать права в соответствующих регистрах сведений.