Настройка прав доступа в «1С:Бухгалтерия предприятия 3.0» через расширения — задача, с которой часто сталкиваются разработчики при необходимости создать «урезанный» интерфейс для конкретного пользователя. Однако стандартного добавления объектов в расширение и назначения прав «Чтение» или «Редактирование» часто бывает недостаточно. Система может выдавать неочевидные ошибки при записи элементов справочников или проведении документов. В этой статье мы подробно разберем, как справиться с наиболее распространенными проблемами при настройке ролей в расширениях.
Рассмотрим ситуацию: вы создали новую роль в расширении, добавили необходимые справочники (например, Номенклатура) и дали на них полные права. Однако при попытке сохранить новый элемент пользователь получает ошибку следующего вида:
Ошибка при выполнении обработчика - 'ПриЗаписи' по причине:
{ОбщийМодуль.ОбщегоНазначенияБПВызовСервера.Модуль(1017)}:
Ошибка при вызове метода контекста (Сохранить)
ХранилищеОбщихНастроек.Сохранить(ВРег(Настройка),, Значение,, ИмяПользователяИБ);
по причине: Нарушение прав доступа!
Проанализируем причину. Современные конфигурации на базе БСП (Библиотеки стандартных подсистем) активно используют системные механизмы для хранения пользовательских настроек: положений окон, выбранных значений в формах, истории выбора. Даже если у пользователя есть права на сам объект (справочник), у него может не быть прав на сохранение своих же настроек в системных таблицах платформы.
Решение: Для исправления этой ошибки необходимо в свойствах вашей новой роли в расширении установить флаг «Сохранение данных пользователя» (в англоязычной версии — SaveUserData). Это право позволяет платформе записывать данные в ХранилищеОбщихНастроек. Без этого флажка любая попытка системы «запомнить» выбор пользователя в форме приведет к критической ошибке и невозможности завершить транзакцию записи объекта.
Другая распространенная проблема возникает при работе с документами, которые не делают бухгалтерских проводок напрямую, но влияют на состояние расчетов или регистров сведений. Яркий пример — «Акт сверки взаиморасчетов». Выясним, почему при полных правах на сам документ возникает отказ в доступе на уровне базы данных.
Проанализируем механизмы работы Акта сверки в БП 3.0. При установке флага «Сверка согласована» и проведении документа, система пытается выполнить запись в служебные объекты, которые разработчик мог забыть включить в расширение или наделить правами:
СостоянияСверокВзаиморасчетов: Именно здесь фиксируется статус документа для различных отчетов и контрольных процедур. Если у роли нет прав на «Изменение» этого регистра, проведение документа будет заблокировано платформой.ДанныеПервичныхДокументов: В этот регистр записываются упрощенные данные о документах для быстрого построения списков и журналов. Отсутствие прав на запись в него — частая причина ошибок «недостаточно прав» без детализации в Журнале регистрации.ДатыЗапретаИзменения: При записи любого документа система проверяет, не попадает ли он в закрытый период. У роли обязательно должно быть право «Чтение» на этот регистр.Чтобы решить проблему, добавим в расширение указанные регистры и предоставим роли права на Чтение, Просмотр, а для первых двух пунктов — и на Изменение.
Рассмотрим ситуацию, когда вам нужно ограничить видимость документов (например, разрешить видеть только поступления от определенных поставщиков), но при добавлении типовых ролей (например, Редактирование актов сверки) пользователь внезапно начинает видеть все документы без ограничений.
Выясним причину этого поведения. В системе 1С права работают по принципу сложения (аддитивности). Если одна роль разрешает чтение объекта с ограничением (RLS), а вторая роль разрешает чтение того же объекта без ограничений, то итоговым правом будет «разрешено всё». Типовые роли часто не содержат условий RLS, которые вы прописали в своей кастомной роли.
Как правильно настроить ограничения:
ПоступлениеТоваровУслуг) нужно разрешить участвовать в алгоритмах расчета (чтобы Акт сверки видел данные), но запретить пользователю видеть их в интерфейсе — снимите галочку Просмотр, но оставьте Чтение. В этом случае программный код сможет прочитать данные из базы, но в списках и журналах пользователь их не увидит.Если ошибка сохраняется, а Журнал регистрации (ЖР) пуст, воспользуемся проверенным алгоритмом отладки:
1. Включение фиксации отказов в ЖР: В некоторых случаях (особенно в облачных решениях) регистрация отказов в доступе может быть отключена. Проверьте настройки журнала регистрации.
2. Замер производительности: Запустите замер в конфигураторе, выполните действие под пользователем до момента возникновения ошибки. В результатах замера вы увидите последнюю исполненную строку кода перед прерыванием транзакции. Это укажет на конкретный метод или запрос, вызвавший проблему.
3. Поиск по тексту ошибки: Если ошибка ссылается на общий модуль, например ОбщегоНазначенияБПВызовСервера, проанализируйте код в этой строке. Рассмотрим пример:
// Пример из типового модуля
Процедура СохранитьНастройку(ИмяНастройки, Значение) Экспорт
ХранилищеОбщихНастроек.Сохранить("ПараметрыРаботыКлиента", ИмяНастройки, Значение);
КонецПроцедуры
Если вы видите обращение к ХранилищеОбщихНастроек или конкретным регистрам (например, ПараметрыРаботыПрограммы), значит, вашей роли не хватает прав именно на эти системные объекты.
При создании «чистой» роли в расширении для 1С:Бухгалтерии, мы рекомендуем всегда добавлять минимальный набор технических прав, без которых работа в интерфейсе будет постоянно прерываться ошибками:
ПараметрыРаботыПрограммы, ПараметрыРаботыКлиента, ПользовательскиеНастройкиИнтерфейса.Подведем итог: настройка прав в расширении требует не только добавления бизнес-объектов, но и включения сервисных механизмов платформы. Ошибка Нарушение прав доступа при записи часто лечится флажком «Сохранение данных пользователя», а ошибки проведения документов требуют тщательного анализа состава регистров, в которые документ делает записи, даже если они не являются регистрами бухгалтерии.