Почему пользователь не может записать документ в УТ 11.5, хотя права на редактирование установлены?

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

В практике администрирования «1С:Управление Торговлей 11» (и аналогичных конфигураций: ERP, КА) часто возникает парадоксальная ситуация. Вы настроили профиль групп доступа, дали пользователю полные права («Просмотр», «Редактирование», «Создание») на определенный документ, например, ПриходныйОрдерНаТовары. Пользователь может открыть список документов, может нажать кнопку «Создать», заполнить форму, но в момент нажатия кнопки «Записать» или «Провести» получает ошибку нарушения прав доступа.

В этой статье мы подробно разберем, почему так происходит, как диагностировать истинную причину и при чем тут подсистема CRM и регистры.

Симптомы проблемы

Давайте смоделируем ситуацию, с которой столкнулся автор вопроса. У нас есть следующие исходные данные:

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

Диагностика: куда смотреть в первую очередь?

Самая распространенная ошибка администраторов в такой ситуации — продолжать перебирать галочки в ролях, относящихся непосредственно к документу. Однако, если вы убедились, что роль «Добавление и изменение…» назначена, значит, проблема лежит глубже уровня самого документа.

Самым надежным инструментом диагностики является Журнал регистрации. Именно он покажет, на какой конкретно строке кода и на каком объекте система «споткнулась».

Давайте посмотрим на ошибку, которую удалось получить из журнала регистрации в нашем случае:


Ошибка при вызове метода контекста (Записать) 
{ОбщийМодуль.CRM_БизнесПроцессыСервер.Модуль(3778)}: Набор.Прочитать; 
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(2019)}: Результат = Форма.Записать(ПараметрыЗаписи); 
{Документ.ПриходныйОрдерНаТовары.Форма.ФормаДокумента.Форма(3370)}: ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи); 
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: 
Ошибка при выполнении обработчика - 'ПриЗаписи' 
по причине: Ошибка при вызове метода контекста (Прочитать) 
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: Нарушение прав доступа! [НарушениеПравДоступа]

Анализ ошибки

Проанализируем текст ошибки по частям. Это ключевой навык для решения подобных задач.

  1. Стек вызова: Мы видим, что ошибка произошла внутри процедуры Записать, но источником является ОбщийМодуль.CRM_БизнесПроцессыСервер.Модуль.
  2. Метод: Ошибка возникает при вызове метода Набор.Прочитать. Это говорит нам о том, что система пытается прочитать какой-то регистр сведений или накопления.
  3. Контекст: Обратите внимание на имя модуля — CRM_БизнесПроцессыСервер. Это прямое указание на то, что проблема связана не со складским учетом, а с подсистемой CRM и бизнес-процессов.

Почему модуль CRM вмешивается в запись складского ордера?
В современных конфигурациях 1С активно используется механизм Подписок на события. Когда вы записываете документ ПриходныйОрдерНаТовары, платформа вызывает событие ПриЗаписи. На это событие «подписан» не только модуль самого документа, но и множество общих модулей, в том числе модуль CRM.

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

Решение проблемы

Исходя из анализа журнала регистрации, становится очевидно, что пользователю не хватает прав не на сам документ, а на объекты подсистемы CRM, которые затрагиваются при записи.

В данном конкретном случае решением стало добавление пользователю роли:

«Базовые права CRM»

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

Почему недостаточно прав на документ? (Теория)

Давайте углубимся в технические детали, чтобы понимать, как избегать таких ситуаций в будущем. Права доступа в 1С:Предприятие 8 устроены сложнее, чем просто «Можно писать» / «Нельзя писать».

1. Разделение прав на Документ и Регистры

Документ в 1С — это, по сути, регистратор. Его главная задача (при проведении) — сделать записи в регистры накопления (например, ТоварыНаСкладах). Если у пользователя есть право «Проведение» для документа, но нет права «Изменение» для регистра ТоварыНаСкладах, проведение не выполнится.

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

2. RLS (Ограничение доступа на уровне записей)

Даже если роль добавлена, может действовать RLS. Например, роль «Базовые права CRM» есть, но в настройках системы включено ограничение доступа по группам партнеров. Если ордер выписан на партнера, к которому у менеджера нет доступа, система также выдаст ошибку «Нарушение прав доступа» при попытке записи, так как код подписки на событие попытается прочитать данные этого партнера и наткнется на фильтр RLS.

3. Функциональные опции

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

Алгоритм действий при ошибках доступа

Подводя итог, если вы столкнулись с ситуацией, когда права на объект есть, но доступ запрещен, действуйте по следующему плану:

  1. Проверьте Журнал регистрации. Найдите событие ошибки и посмотрите стек вызовов. Это самый важный шаг.
  2. Определите модуль-виновник. Если ошибка в модуле Взаиморасчеты... — ищите роли, связанные с финансами. Если CRM... — роли CRM. Если ОбменДанными... — права на синхронизацию или узлы обмена.
  3. Используйте отладку (если есть возможность). Запустите сеанс от имени пользователя (или используйте параметры запуска для имитации) под отладчиком. Включите остановку по ошибке. Это покажет точную строку и объект метаданных, к которому нет доступа.
  4. Проверьте зависимые данные. Убедитесь, что у пользователя есть права на справочники, указанные в реквизитах документа (Организация, Склад, Партнер).
  5. Анализируйте отчет «Права доступа». В новых версиях БСП этот отчет позволяет увидеть «эффективные права» (сумму всех ролей) и может подсказать ограничения RLS.

В случае с УТ 11.5 и ошибкой в CRM_БизнесПроцессыСервер, добавление роли «Базовые права CRM» является стандартным и корректным решением.

← На главную