Как доработать права новой роли в расширении 1С:Бухгалтерия и устранить ошибки доступа

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

Настройка прав доступа в «1С:Бухгалтерия предприятия 3.0» через расширения — задача, с которой часто сталкиваются разработчики при необходимости создать «урезанный» интерфейс для конкретного пользователя. Однако стандартного добавления объектов в расширение и назначения прав «Чтение» или «Редактирование» часто бывает недостаточно. Система может выдавать неочевидные ошибки при записи элементов справочников или проведении документов. В этой статье мы подробно разберем, как справиться с наиболее распространенными проблемами при настройке ролей в расширениях.

Проблема Хранилища общих настроек и ошибка «Нарушение прав доступа»

Рассмотрим ситуацию: вы создали новую роль в расширении, добавили необходимые справочники (например, Номенклатура) и дали на них полные права. Однако при попытке сохранить новый элемент пользователь получает ошибку следующего вида:


Ошибка при выполнении обработчика - 'ПриЗаписи' по причине:
{ОбщийМодуль.ОбщегоНазначенияБПВызовСервера.Модуль(1017)}: 
Ошибка при вызове метода контекста (Сохранить) 
ХранилищеОбщихНастроек.Сохранить(ВРег(Настройка),, Значение,, ИмяПользователяИБ); 
по причине: Нарушение прав доступа!

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

Решение: Для исправления этой ошибки необходимо в свойствах вашей новой роли в расширении установить флаг «Сохранение данных пользователя» (в англоязычной версии — SaveUserData). Это право позволяет платформе записывать данные в ХранилищеОбщихНастроек. Без этого флажка любая попытка системы «запомнить» выбор пользователя в форме приведет к критической ошибке и невозможности завершить транзакцию записи объекта.

Ошибка «Недостаточно прав на исполнение операций над базой данных» при проведении документов

Другая распространенная проблема возникает при работе с документами, которые не делают бухгалтерских проводок напрямую, но влияют на состояние расчетов или регистров сведений. Яркий пример — «Акт сверки взаиморасчетов». Выясним, почему при полных правах на сам документ возникает отказ в доступе на уровне базы данных.

Проанализируем механизмы работы Акта сверки в БП 3.0. При установке флага «Сверка согласована» и проведении документа, система пытается выполнить запись в служебные объекты, которые разработчик мог забыть включить в расширение или наделить правами:

  1. Регистр сведений СостоянияСверокВзаиморасчетов: Именно здесь фиксируется статус документа для различных отчетов и контрольных процедур. Если у роли нет прав на «Изменение» этого регистра, проведение документа будет заблокировано платформой.
  2. Регистр сведений ДанныеПервичныхДокументов: В этот регистр записываются упрощенные данные о документах для быстрого построения списков и журналов. Отсутствие прав на запись в него — частая причина ошибок «недостаточно прав» без детализации в Журнале регистрации.
  3. Регистр сведений ДатыЗапретаИзменения: При записи любого документа система проверяет, не попадает ли он в закрытый период. У роли обязательно должно быть право «Чтение» на этот регистр.

Чтобы решить проблему, добавим в расширение указанные регистры и предоставим роли права на Чтение, Просмотр, а для первых двух пунктов — и на Изменение.

Конфликты RLS и аддитивность прав доступа

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

Выясним причину этого поведения. В системе 1С права работают по принципу сложения (аддитивности). Если одна роль разрешает чтение объекта с ограничением (RLS), а вторая роль разрешает чтение того же объекта без ограничений, то итоговым правом будет «разрешено всё». Типовые роли часто не содержат условий RLS, которые вы прописали в своей кастомной роли.

Как правильно настроить ограничения:

Алгоритм диагностики скрытых нехваток прав

Если ошибка сохраняется, а Журнал регистрации (ЖР) пуст, воспользуемся проверенным алгоритмом отладки:

1. Включение фиксации отказов в ЖР: В некоторых случаях (особенно в облачных решениях) регистрация отказов в доступе может быть отключена. Проверьте настройки журнала регистрации.

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

3. Поиск по тексту ошибки: Если ошибка ссылается на общий модуль, например ОбщегоНазначенияБПВызовСервера, проанализируйте код в этой строке. Рассмотрим пример:


// Пример из типового модуля
Процедура СохранитьНастройку(ИмяНастройки, Значение) Экспорт
    ХранилищеОбщихНастроек.Сохранить("ПараметрыРаботыКлиента", ИмяНастройки, Значение);
КонецПроцедуры

Если вы видите обращение к ХранилищеОбщихНастроек или конкретным регистрам (например, ПараметрыРаботыПрограммы), значит, вашей роли не хватает прав именно на эти системные объекты.

Рекомендации по созданию ролей в расширениях

При создании «чистой» роли в расширении для 1С:Бухгалтерии, мы рекомендуем всегда добавлять минимальный набор технических прав, без которых работа в интерфейсе будет постоянно прерываться ошибками:

Подведем итог: настройка прав в расширении требует не только добавления бизнес-объектов, но и включения сервисных механизмов платформы. Ошибка Нарушение прав доступа при записи часто лечится флажком «Сохранение данных пользователя», а ошибки проведения документов требуют тщательного анализа состава регистров, в которые документ делает записи, даже если они не являются регистрами бухгалтерии.

← На главную