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

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

При работе в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия предприятия 3.0», администраторы часто сталкиваются с проблемой: пользователи с типовыми правами «Бухгалтер» или «Главный бухгалтер» не могут запустить внешнюю обработку. Система выдает ошибку «Нарушение прав доступа» или «У пользователя недостаточно прав на исполнение операции над базой данных». Разберем детально, как решить эту задачу, не предоставляя пользователю полные права администратора, в том числе через автоматическое создание профилей доступа на основе журнала регистрации.

Анализ причин ограничения доступа

Прежде всего, проанализируем ситуацию. В 1С:Предприятие 8.3 существует два механизма работы с внешним кодом:

  1. Интерактивное открытие через меню «Файл — Открыть».
  2. Запуск через справочник «Дополнительные отчеты и обработки».

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

Способ 1. Настройка профиля групп доступа

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

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

Способ 2. Решение проблемы «безопасного режима»

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

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

Выполним следующие действия в модуле объекта обработки. Мы можем использовать функцию СведенияОВнешнейОбработке, чтобы запросить у системы специальные разрешения. Рассмотрим пример кода:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка;
    
    // Добавление разрешения на использование привилегированного режима
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима("Для чтения настроек из защищенных регистров");
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    // Определение команды
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Моя обработка";
    НоваяКоманда.Идентификатор = "МояОбработкаИД";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    
    Возврат ПараметрыРегистрации;
КонецФункции

Важно помнить: после того как вы добавили разрешения в код, в самой программе (в справочнике «Дополнительные отчеты и обработки») необходимо нажать кнопку «Обновить из файла» и подтвердить предоставление разрешений. Только тогда УстановитьПривилегированныйРежим(Истина) начнет работать внутри вашей обработки.

Способ 3. Использование привилегированного режима в коде

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


&НаСервере
Процедура ВыполнитьДействиеНаСервере()
    УстановитьПривилегированныйРежим(Истина);
    // Теперь мы можем читать любые регистры, даже если у пользователя нет на них прав
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЗащищенныеДанные";
    Результат = Запрос.Выполнить();
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

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

Способ 4. Проверка прав на уровне записей (RLS)

Разберем еще одну неочевидную причину. Если у пользователя настроено ограничение доступа по организациям, внешняя обработка может «падать» с ошибкой нарушения прав при попытке формирования отчета. Это происходит потому, что в запросах обработки не используется ключевое слово РАЗРЕШЕННЫЕ.

Проанализируем запрос внутри обработки. Если вы выбираете данные из справочников или документов, убедитесь, что запрос выглядит так:

Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка ИЗ Справочник.Организации";

Без этого слова система попытается прочитать все записи, наткнется на ту, которая запрещена для данного бухгалтера, и прервет выполнение всей обработки.

Резюме для настройки

Для успешного запуска внешней обработки без прав администратора необходимо:

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

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

← На главную