Почему возникает ошибка «Недопустимо использование свойства основная роль» при выполнении регламентных заданий?

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

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

Понимание механизма выполнения регламентных заданий

Первое, что необходимо уяснить — это то, от чьего имени работает фоновое задание. В клиент-серверном варианте базы данных регламентные задания выполняются на стороне сервера 1С рабочим процессом rphost. В этот момент в системе не происходит полноценного «входа» пользователя с графическим интерфейсом.

Если в настройках регламентного задания в консоли администрирования или в режиме 1С:Предприятие поле «Пользователь» оставлено пустым, система действует по следующему алгоритму:

  1. Она обращается к настройкам конфигурации, а именно к свойству «Основные роли».
  2. Если основные роли назначены, фоновый сеанс запускается с правами этих ролей.
  3. Если основные роли не заданы, проверка прав может быть существенно ограничена или отсутствовать, что и приводит к сбоям при выполнении кода, требующего определенных полномочий.

Разбор ошибки в коде

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

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

Способ №1: Назначение выделенного пользователя

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

Важное примечание: При работе в серверном варианте базы (MS SQL), наличие пользователя в базе данных является обязательным условием для его указания в задании, даже если он никогда не запускает 1С как интерактивный пользователь. Убедитесь, что для него включена аутентификация 1С (логин и пароль), чтобы избежать зависимости от настроек домена Windows.

Способ №2: Использование привилегированного режима

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

Разберем пример реализации такой защиты в коде:


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

Способ №3: Настройка основных ролей (для случаев, когда нельзя указать пользователя)

Если вы не хотите прописывать пользователя в каждом регламентном задании, проверьте настройки конфигурации:

Резюме

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

← На главную