К статье
Практический материал

Администрирование · 9 мин

Под каким пользователем выполняются регламентные задания в 1С

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

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

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

Неправильно выбранный пользователь — одна из самых частых причин «тихих» сбоев: задание формально выполняется, но падает с ошибкой прав доступа, записывает документы без нужных реквизитов или не видит данные из-за ограничений RLS. Ниже разберём, как устроен механизм, как назначить пользователя и как проверить результат.

Как устроен механизм выполнения регламентных заданий

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

У каждого регламентного задания есть свойство «Пользователь» — ссылка на элемент справочника пользователей информационной базы. Когда планировщик создаёт фоновое задание, сеанс открывается от имени этого пользователя. Если свойство не заполнено, сеанс открывается без аутентификации: функция ПользователиИнформационнойБазы.ТекущийПользователь() вернёт неопределённое значение, а ИмяПользователя() — пустую строку.

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

Файловый и клиент-серверный режим: в чём разница

В клиент-серверном режиме регламентные задания обслуживает менеджер кластера серверов 1С:Предприятие. Фоновые сеансы создаются на сервере, пользователю базы не нужно держать открытым ни один клиент. Именно этот режим рекомендуется для промышленной эксплуатации: задания выполняются независимо от того, работает ли кто-то в базе.

В файловом режиме планировщика на уровне СУБД нет. Регламентные задания выполняются в специальном сеансе, который должен быть запущен одним из способов: параметром командной строки /ExecuteScheduledJobs при старте толстого или тонкого клиента, либо автоматически при публикации базы на веб-сервере. Если такой сеанс не запущен, задания просто не выполняются — без ошибок и предупреждений, что часто вводит администраторов в заблуждение.

Что происходит, если пользователь задания не указан

Пустое свойство «Пользователь» — допустимая и часто используемая настройка. Задание выполняется в сеансе без пользователя, при этом проверка прав на уровне встроенного языка фактически не ограничивает код: фоновое задание без пользователя имеет доступ к объектам, если не применяются явные проверки в коде конфигурации. Однако любые механизмы, завязанные на текущего пользователя, работать не будут корректно.

Типичные проявления: подсистема «Пользователи» из БСП не может определить текущего пользователя, отчёты с отборами «по текущему пользователю» возвращают пустые данные, в реквизиты «Автор» или «Ответственный» при создании документов подставляется пустое значение, записи в журнале регистрации идут без имени пользователя. Если код задания обращается к функциям типа Пользователи.ТекущийПользователь(), возможны исключения.

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

Как назначить пользователя регламентному заданию

Настройка выполняется в конфигураторе или в режиме предприятия через стандартную обработку управления регламентными заданиями (в конфигурациях на БСП — «Администрирование → Обслуживание → Регламентные операции» или аналогичный раздел). Порядок действий одинаковый.

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

При назначении учитывайте роли: если задание записывает документы, пользователю нужны права на эти документы; если читает регистры — права на чтение. Права проверяются так же, как для интерактивного сеанса, поэтому «выдать всё подряд» — плохая практика: при компрометации служебной учётной записи ущерб будет максимальным.

Как проверить, под каким пользователем реально выполнилось задание

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

Второй способ — консоль кластера в клиент-серверном режиме: в списке сеансов фоновые сеансы отображаются с типом «Фоновое задание» и именем пользователя. Третий способ — программный: добавить в начало обработчика задания запись в журнал с именем текущего пользователя.

bsl
ИмяПользователя = ИмяПользователя();
ЗаписьЖурналаРегистрации("ПроверкаЗадания", УровеньЖурналаРегистрации.Информация,,,
    "Задание выполнено под пользователем: " + ?(ПустаяСтрока(ИмяПользователя), "<без пользователя>", ИмяПользователя));
Контрольные точки

Как проверить результат

Колонка «Пользователь» в журнале регистрации
Норма

Указан служебный пользователь задания

Тревожный признак

Пусто, хотя пользователь назначен — задание не запускалось или свойство не сохранено

Статус последнего выполнения в консоли заданий
Норма

«Выполнено» без ошибок

Тревожный признак

«Ошибка» с текстом о нарушении прав доступа

Созданные заданием объекты
Норма

Реквизиты «Автор»/«Ответственный» заполнены служебным пользователем

Тревожный признак

Пустые реквизиты или исключения при записи

Типичные ошибки и ограничения

Типичные ошибки
01
Назначить заданию реального сотрудника: после его увольнения и пометки пользователя на удаление задание перестанет выполняться, а причину найдут не сразу.
02
Выдать служебному пользователю полные права «на всякий случай»: это упрощает настройку, но создаёт риск при утечке учётных данных и мешает аудиту.
03
Ожидать выполнения заданий в файловой базе без запущенного сеанса с /ExecuteScheduledJobs: задания молча не работают.
04
Проверять права только интерактивно: у фонового сеанса нет части контекста (например, настроек клиентского приложения), поэтому тестировать нужно именно запуском задания.
05
Использовать в коде задания Пользователи.ТекущийПользователь() при пустом свойстве «Пользователь» — получите исключение или пустые данные.

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

Удобный приём — завести одного пользователя «Робот» для всех технических заданий и отдельных пользователей для заданий, создающих документы от имени конкретных подразделений. Тогда по журналу регистрации и реквизитам «Автор» всегда видно, какое задание что сделало.
ПЗ
Практическое замечание

FAQ

Может ли регламентное задание работать от имени пользователя с запрещённым входом в систему?

Да. Фоновый сеанс не проходит интерактивную аутентификацию, поэтому флаг запрета входа не мешает выполнению задания. Главное — чтобы у пользователя были нужные роли.

Почему задание в файловой базе не выполняется, хотя расписание настроено?

В файловом режиме нет серверного планировщика: нужен запущенный сеанс с параметром /ExecuteScheduledJobs или публикация на веб-сервере. Проверьте, что такой сеанс активен и не завершился с ошибкой.

Как узнать, какое именно задание создало документ?

Если каждому заданию назначен свой пользователь, смотрите реквизит «Автор» документа и журнал регистрации по этому пользователю. Если все задания работают без пользователя, добавьте в код заданий явную запись в журнал регистрации с именем задания.

Опасно ли оставлять задание без пользователя?

Для чисто технических операций — допустимо. Риск в другом: код не сможет получить данные текущего пользователя, а в журнале регистрации не будет привязки действий к учётной записи, что затрудняет аудит и расследование инцидентов.

Нужно ли перезапускать сервер после смены пользователя задания?

Нет. Новое значение свойства применяется при следующем запуске задания по расписанию. Уже выполняющийся фоновый сеанс продолжит работу под прежним пользователем до завершения.

Что делать, если задание падает с ошибкой «Нарушение прав доступа»?

Определите по журналу регистрации объект, к которому обращался код, и добавьте служебному пользователю роль с нужными правами. Не выдавайте полные права — расширяйте доступ точечно, пока ошибка не исчезнет.

Итог

Что важно запомнить

Регламентное задание выполняется от имени пользователя из своего свойства «Пользователь», а при пустом значении — без пользователя. Для стабильной работы создайте отдельного служебного пользователя с минимально необходимыми ролями, назначьте его заданиям и контролируйте выполнение через журнал регистрации. В файловом режиме дополнительно убедитесь, что запущен сеанс, обслуживающий регламентные задания.