Почему возникает ошибка прав доступа при записи документа по Управленческой организации в 1С:КА 2.5?

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

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

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

Где именно возникает ошибка и почему ее не видно в отладчике?

Проанализируем механику работы платформы 1С:Предприятие при записи объекта. Поведение, когда выполнение кода проходит процедуру ПередЗаписьюДокумента (в общем модуле или подписке на событие), но затем обрывается с ошибкой прав доступа сразу после выхода из нее, является классическим.

Дело в том, что нарушение прав генерируется на уровне движка базы данных, а не в коде 1С. Разберем, что происходит «под капотом»:

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

Поэтому отладчиком этот момент поймать напрямую невозможно — платформа проверяет права непосредственно перед отправкой данных в СУБД.

Чтение и запись: почему документ открывается, но не сохраняется?

Может возникнуть логичный вопрос: если прав на организацию нет, почему документ и сама карточка организации успешно открываются на просмотр? Посмотрим на архитектуру механизма RLS.

В системе 1С шаблоны RLS для права «Чтение» и права «Изменение» настраиваются раздельно. В профиле групп доступа пользователю могло быть разрешено чтение документов по всем организациям (чтобы видеть общую картину или отчеты), но права на запись жестко фильтровались по списку разрешенных организаций.

Кроме того, «Управленческая организация» — это системный предопределенный элемент справочника Организации. Из-за своего предопределенного характера он может нестандартно обрабатываться в нетиповых или сильно ограниченных профилях, если доступ к нему не задан явно.

Решение проблемы: настройка групп доступа и логика И/ИЛИ

Чтобы решить проблему с записью, нам необходимо правильно сконфигурировать группы доступа. Разберем логику работы ограничений в БСП, так как именно здесь кроется ключ к решению.

При настройке прав мы должны учитывать два правила объединения ограничений:

  1. Логика «И» (внутри одной группы доступа): Жесткое ограничение применяется внутри одной группы между разными видами доступа. Если в группе установлены ограничения одновременно по Организациям и, например, по Видам документов или Подразделениям, система будет требовать совпадения всех условий для предоставления доступа.
  2. Логика «ИЛИ» (между разными группами доступа): Это правило применяется, если пользователь включен сразу в несколько групп доступа. Если хотя бы одна из групп разрешает доступ к изменению данных по Управленческой организации, доступ будет предоставлен суммарно.

Шаги по устранению ошибки:

Для исправления ошибки следует создать отдельную группу доступа с нужными ограничениями (или разрешениями) конкретно для работы с Управленческой организацией и назначить ее пользователю в дополнение к существующим. Это позволит обойти жесткие ограничения по условию «И» в основной группе.

Проверка служебных регистров (Производительный RLS)

Рассмотрим еще один важный технический нюанс. В современных редакциях 1С:КА 2.5 и 1С:ERP по умолчанию используется «Производительный» режим RLS. Особенность этого режима в том, что права не вычисляются сложными запросами «на лету», а кэшируются в служебных регистрах.

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

  1. Перейдите в раздел НСИ и администрирование.
  2. Откройте пункт Настройки пользователей и прав.
  3. Найдите инструменты обновления доступа на уровне записей и принудительно запустите процедуру обновления ключей доступа.

Проанализировав логику работы платформы и механизмы БСП, мы можем сделать вывод: подобные ошибки RLS при записи всегда требуют проверки того, как настроены права именно на Изменение, и корректно ли рассчитаны ключи доступа в системе. Разделение прав на разные группы доступа позволяет гибко и безошибочно настраивать матрицу полномочий в компании.

← На главную