В процессе администрирования систем на базе 1С, таких как УПП или ERP, разработчики и системные администраторы часто сталкиваются с ошибками выполнения регламентных заданий. Одной из наиболее типичных является ошибка «Недопустимо использование свойства основная роль». Давайте разберем, почему это происходит и как правильно настроить выполнение заданий, чтобы обмен данными между базами (например, с ЗУП) проходил стабильно.
Первое, что необходимо уяснить — это то, от чьего имени работает фоновое задание. В клиент-серверном варианте базы данных регламентные задания выполняются на стороне сервера 1С рабочим процессом rphost. В этот момент в системе не происходит полноценного «входа» пользователя с графическим интерфейсом.
Если в настройках регламентного задания в консоли администрирования или в режиме 1С:Предприятие поле «Пользователь» оставлено пустым, система действует по следующему алгоритму:
Ошибка «Недопустимо использование свойства основная роль» чаще всего возникает из-за устаревших конструкций в коде конфигурации. Некоторые разработчики в старых версиях платформы использовали программную проверку «полноправности» пользователя через специфические свойства, которые в современных версиях 1С стали недоступны или ограничены в контексте выполнения фоновых заданий.
Когда система пытается определить права текущего сеанса и натыкается на этот некорректный вызов, происходит аварийное завершение задания. Чтобы решить эту проблему, мы рекомендуем следующие шаги.
Это самый надежный и предсказуемый метод. Вместо того чтобы полагаться на «основные роли» или неопределенный контекст сервера, создайте в конфигураторе специального пользователя для обмена.
Служебный_Обмен.Важное примечание: При работе в серверном варианте базы (MS SQL), наличие пользователя в базе данных является обязательным условием для его указания в задании, даже если он никогда не запускает 1С как интерактивный пользователь. Убедитесь, что для него включена аутентификация 1С (логин и пароль), чтобы избежать зависимости от настроек домена Windows.
Если код обмена требует доступа к данным, которые по правам доступа недоступны обычному пользователю, лучшей практикой будет использование привилегированного режима. Это позволяет игнорировать ограничения прав в рамках конкретной процедуры.
Разберем пример реализации такой защиты в коде:
Процедура ВыполнитьОбменДанными() Экспорт
// Включаем привилегированный режим, чтобы обмен не зависел от прав текущего пользователя
УстановитьПривилегированныйРежим(Истина);
Попытка
// Здесь выполняется логика обмена
ОбменСервер.ВыполнитьВыгрузку();
Исключение
ЗаписьЖурналаРегистрации("Ошибка обмена", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
// Привилегированный режим автоматически отключается при выходе из процедуры
КонецПроцедуры
Если вы не хотите прописывать пользователя в каждом регламентном задании, проверьте настройки конфигурации:
Мы проанализировали причины возникновения ошибки и пришли к выводу, что наиболее стабильным подходом является жесткое указание пользователя с полными правами в регламентном задании. Это исключает двусмысленность в определении прав сеанса и позволяет избежать проблем с «основными ролями». Если же вы разрабатываете код обмена самостоятельно, используйте УстановитьПривилегированныйРежим(Истина), чтобы процедура выполнялась корректно независимо от того, под кем запущен сеанс сервера.