В практике администрирования «1С:Управление Торговлей 11» (и аналогичных конфигураций: ERP, КА) часто возникает парадоксальная ситуация. Вы настроили профиль групп доступа, дали пользователю полные права («Просмотр», «Редактирование», «Создание») на определенный документ, например, ПриходныйОрдерНаТовары. Пользователь может открыть список документов, может нажать кнопку «Создать», заполнить форму, но в момент нажатия кнопки «Записать» или «Провести» получает ошибку нарушения прав доступа.
В этой статье мы подробно разберем, почему так происходит, как диагностировать истинную причину и при чем тут подсистема CRM и регистры.
Давайте смоделируем ситуацию, с которой столкнулся автор вопроса. У нас есть следующие исходные данные:
ПриходныйОрдерНаТовары (Добавление, Изменение).Самая распространенная ошибка администраторов в такой ситуации — продолжать перебирать галочки в ролях, относящихся непосредственно к документу. Однако, если вы убедились, что роль «Добавление и изменение…» назначена, значит, проблема лежит глубже уровня самого документа.
Самым надежным инструментом диагностики является Журнал регистрации. Именно он покажет, на какой конкретно строке кода и на каком объекте система «споткнулась».
Давайте посмотрим на ошибку, которую удалось получить из журнала регистрации в нашем случае:
Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.CRM_БизнесПроцессыСервер.Модуль(3778)}: Набор.Прочитать;
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(2019)}: Результат = Форма.Записать(ПараметрыЗаписи);
{Документ.ПриходныйОрдерНаТовары.Форма.ФормаДокумента.Форма(3370)}: ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине: Ошибка при вызове метода контекста (Прочитать)
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: Нарушение прав доступа! [НарушениеПравДоступа]
Проанализируем текст ошибки по частям. Это ключевой навык для решения подобных задач.
Записать, но источником является ОбщийМодуль.CRM_БизнесПроцессыСервер.Модуль.Набор.Прочитать. Это говорит нам о том, что система пытается прочитать какой-то регистр сведений или накопления.CRM_БизнесПроцессыСервер. Это прямое указание на то, что проблема связана не со складским учетом, а с подсистемой CRM и бизнес-процессов.Почему модуль CRM вмешивается в запись складского ордера?
В современных конфигурациях 1С активно используется механизм Подписок на события. Когда вы записываете документ ПриходныйОрдерНаТовары, платформа вызывает событие ПриЗаписи. На это событие «подписан» не только модуль самого документа, но и множество общих модулей, в том числе модуль CRM.
Логика работы может быть следующей: система проверяет, нужно ли создать задачу менеджеру, обновить сделку или зафиксировать взаимодействие на основании этого ордера. Для этого код пытается прочитать данные из своих регистров (например, регистры бизнес-процессов или задач). Если у текущего пользователя нет прав на чтение этих служебных регистров, транзакция записи всего документа отменяется.
Исходя из анализа журнала регистрации, становится очевидно, что пользователю не хватает прав не на сам документ, а на объекты подсистемы CRM, которые затрагиваются при записи.
В данном конкретном случае решением стало добавление пользователю роли:
«Базовые права CRM»
После добавления этой роли в профиль пользователя (или создания нового профиля, содержащего эту роль), ошибка исчезает. Эта роль предоставляет минимально необходимые права на чтение общих справочников и регистров подсистемы CRM, позволяя подпискам на события отрабатывать корректно без генерации ошибок доступа.
Давайте углубимся в технические детали, чтобы понимать, как избегать таких ситуаций в будущем. Права доступа в 1С:Предприятие 8 устроены сложнее, чем просто «Можно писать» / «Нельзя писать».
Документ в 1С — это, по сути, регистратор. Его главная задача (при проведении) — сделать записи в регистры накопления (например, ТоварыНаСкладах). Если у пользователя есть право «Проведение» для документа, но нет права «Изменение» для регистра ТоварыНаСкладах, проведение не выполнится.
Однако в нашем случае ошибка возникала даже при обычной записи, до проведения. Это указывает на проверку ссылочной целостности или работу вспомогательных механизмов (версионирование, задачи, взаимодействия), которые срабатывают сразу при сохранении объекта в базу данных.
Даже если роль добавлена, может действовать RLS. Например, роль «Базовые права CRM» есть, но в настройках системы включено ограничение доступа по группам партнеров. Если ордер выписан на партнера, к которому у менеджера нет доступа, система также выдаст ошибку «Нарушение прав доступа» при попытке записи, так как код подписки на событие попытается прочитать данные этого партнера и наткнется на фильтр RLS.
Интересный момент: если бы в настройках базы («НСИ и Администрирование») были полностью отключены функциональные опции, связанные с CRM и бизнес-процессами, то код модуля CRM_БизнесПроцессыСервер, скорее всего, просто не выполнялся бы. В этом случае ошибка могла бы не возникнуть даже без дополнительной роли. Но так как функционал включен, он требует соответствующих прав для всех пользователей, работающих с документами, участвующими в процессах.
Подводя итог, если вы столкнулись с ситуацией, когда права на объект есть, но доступ запрещен, действуйте по следующему плану:
Взаиморасчеты... — ищите роли, связанные с финансами. Если CRM... — роли CRM. Если ОбменДанными... — права на синхронизацию или узлы обмена.В случае с УТ 11.5 и ошибкой в CRM_БизнесПроцессыСервер, добавление роли «Базовые права CRM» является стандартным и корректным решением.