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

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

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

Выясним причину: почему регламентному заданию нужен пользователь

Проанализируем внутренний механизм инициализации фонового сеанса платформой 1С:Предприятие:

  1. Неинициализированный параметр сеанса. Когда регламентное задание запускается без явно указанного пользователя информационной базы, системная функция ИмяПользователя() возвращает пустую строку. При первом же обращении исполняемого алгоритма к ПараметрыСеанса.ТекущийПользователь платформа автоматически вызывает предопределенную процедуру УстановкаПараметровСеанса в модуле сеанса. Если типовой алгоритм пытается сопоставить пустую строку со справочником пользователей и не находит соответствия, параметр сеанса остается неопределенным, что вызывает системное исключение.
  2. Ограничение прав на уровне записей (RLS). Большинство типовых конфигураций (включая УПП, ERP, КА, УТ) используют механизмы RLS. Встроенные шаблоны условий доступа к данным неявно обращаются к значению ПараметрыСеанса.ТекущийПользователь. Если регламентное задание читает или записывает данные без авторизованного пользователя и без привилегированного режима, механизм RLS провоцирует ошибку инициализации сеанса.
  3. Использование общих модулей и библиотечных функций. Регламентная процедура обращается к стандартным функциям подсистем конфигурации, в которых заложена проверка прав, логирование действий или заполнение реквизитов типа «Автор», «Ответственный», требующих конкретную ссылку на пользователя.

Способ 1. Указание пользователя через типовую обработку «Консоль заданий»

Рассмотрим самый быстрый и распространенный способ решения проблемы в рабочей информационной базе:

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

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

Способ 2. Создание и настройка выделенного системного пользователя

Для стабильной работы всех фоновых процессов рекомендуется придерживаться лучших практик администрирования:

  1. Создадим в списке пользователей информационной базы отдельного служебного пользователя (например, с именем РегламентныеЗадания или Робот).
  2. Назначим данному пользователю роль ПолныеПрава (или АдминистраторСистемы), чтобы регламентные процедуры не прерывались из-за ограничений доступа к отдельным регистрам и справочникам.
  3. В свойствах пользователя снимем флаг Показывать в списке выбора и установим надежный сложный пароль либо настроим аутентификацию средствами операционной системы.
  4. Назначим созданного пользователя ответственным за выполнение всех регламентных заданий базы.

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

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


Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из Задания Цикл
    Задание.ИмяПользователя = "РегламентныеЗадания";
    Задание.Записать();
КонецЦикла;

После выполнения данного кода каждый фоновый сеанс будет корректно инициализировать параметры сеанса указанного системного пользователя.

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

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

  1. Включение привилегированного режима: В дереве метаданных у объекта РегламентноеЗадание установим свойство Привилегированный в значение Истина либо в начале исполняемой процедуры вызовем метод УстановитьПривилегированныйРежим(Истина). Это отключит проверки RLS, однако не решит проблему, если прикладной код явно обращается к автору операции.
  2. Корректировка процедуры установки параметров: В процедуре УстановкаПараметровСеанса модуля сеанса предусмотрим ветку условий для фоновых сеансов. Если функция ИмяПользователя() возвращает пустое значение, параметру ПараметрыСеанса.ТекущийПользователь можно явно присвоить пустую ссылку справочника пользователей или предопределенного системного пользователя из константы.

Диагностика ошибок фоновых заданий через журнал регистрации

Если регламентное задание продолжает завершаться аварийно, проанализируем журнал регистрации. Установим отбор по событию «Фоновое задание. Ошибка выполнения». В детальном описании события будет представлен полный стек вызовов с номерами строк модулей, что позволит точно определить конкретную процедуру или шаблон RLS, вызвавший исключение.

← На главную