Рассмотрим распространенную ситуацию: создано новое регламентное задание, оно успешно запускается по расписанию, но выполняемый код отрабатывает под незаполненным или служебным пользователем (в утилите администрирования кластера и журнале регистрации такой сеанс часто отображается как DefUser). Если внутри бизнес-логики происходит обращение к текущему пользователю или проверяются его персональные настройки, программа выдает ошибку или не может определить автора созданных записей.
Выясним причину такого поведения платформы. Если у объекта РегламентноеЗадание не заполнено свойство ИмяПользователя, система инициализирует фоновый сеанс в контексте прав по умолчанию. При этом функция ПользователиИнформационнойБазы.ТекущийПользователь() возвращает значение Неопределено. Чтобы алгоритмы обработки отрабатывали корректно, необходимо явно назначить конкретную учетную запись для выполнения задачи.
Разберем по шагам, как задать пользователя для регламентного задания из кода. Для этого используется свойство объекта РегламентноеЗадание.ИмяПользователя, имеющее тип Строка.
Посмотрим на пример кода, с помощью которого можно найти нужная задача и установить имя пользователя информационной базы:
// Получаем регламентное задание по имени метаданных
Задание = РегламентныеЗадания.НайтиПоНаименованию("МоеРегламентноеЗадание");
Если Задание <> Неопределено Тогда
// Указываем имя пользователя информационной базы
Задание.ИмяПользователя = "Администратор";
// Сохраняем изменения в системе
Задание.Записать();
КонецЕсли;
Проанализируем важные нюансы при программной установке пользователя:
ИмяПользователя сохраняется только текстовый логин пользователя информационной базы. Сервер платформы самостоятельно авторизует фоновый сеанс под указанным именем без ввода пароля.Рассмотрим варианты управления пользователем без написания кода:
Разберем ограничения и правила, которые важно учитывать при работе фоновых процессов:
Предупреждение(), открытие форм или модальные диалоги), иначе задание завершится с ошибкой.