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

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

Где выполняется фоновое задание 1С

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

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

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

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

Где выполняется фоновое задание в клиент-серверном режиме

В клиент-серверном варианте фоновые задания всегда выполняются на сервере 1С:Предприятия. Когда код вызывает ФоновыеЗадания.Выполнить() или срабатывает расписание регламентного задания, менеджер кластера (процесс rmngr) назначает задание одному из рабочих процессов (rphost). Именно в этом процессе платформа создаёт служебный сеанс и исполняет указанную процедуру общего модуля.

Какой именно rphost возьмёт задание, решает кластер с учётом требований назначения функциональности. Если для сервера задано требование «не назначать» фоновые задания, кластер направит их на другой рабочий сервер. Это стандартный приём выноса фоновой нагрузки (обмены, расчёты, загрузка данных) на отдельную машину, чтобы не конкурировать с интерактивными сеансами пользователей.

Важные следствия серверного выполнения:

  • Файловые пути в коде относятся к файловой системе сервера, а не клиента. Путь C:\Обмен — это диск сервера 1С.
  • Задание работает под учётной записью, от имени которой запущена служба агента сервера 1С (по умолчанию служебный пользователь USR1CV8). У этой учётки должны быть права на сетевые каталоги, принтеры и внешние ресурсы, если код к ним обращается.
  • COM-объекты и внешние компоненты должны быть установлены и зарегистрированы на сервере, а не на клиенте.

Где выполняется фоновое задание в файловом режиме

В файловом варианте нет отдельного сервера, поэтому платформа создаёт фоновый процесс на том же компьютере, где работает клиентское приложение. Задания, запущенные программно через ФоновыеЗадания.Выполнить(), выполняются в отдельном потоке в рамках клиентского сеанса — пока пользователь не закрыл программу.

Регламентные задания в файловой базе по расписанию не запускаются сами по себе. Чтобы они выполнялись, нужно либо держать открытым клиентский сеанс (тогда задания отрабатывают в нём), либо запустить отдельный сеанс с параметром командной строки, предназначенным для выполнения регламентных заданий.

bat
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /N"Робот" /P"пароль" /ExecuteScheduledJobs

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

Как определить, где фактически выполняется задание

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

Альтернативные способы проверки:

  • Консоль заданий (обработка из состава БСП или сторонняя) — показывает активные задания, их состояние, ключи и ошибки.
  • Журнал регистрации — события фоновых заданий фиксируются с указанием сеанса и соединения; по соединению можно сопоставить процесс.
  • Диспетчер задач на сервере — по росту нагрузки конкретного rphost косвенно видно, что задание выполняется в нём.
Как найти процесс, выполняющий задание
  1. 1
    Откройте консоль кластера серверов 1С и выберите информационную базу.
  2. 2
    Раскройте узел «Сеансы» и отфильтруйте по типу «Фоновое задание».
  3. 3
    Посмотрите колонки «Рабочий процесс» и «Компьютер» — это и есть точка выполнения.
  4. 4
    При необходимости свяжите сеанс с соединением и PID процесса rphost для мониторинга нагрузки.

Регламентные задания: кто их запускает и где

Регламентное задание — это описание расписания и метода в метаданных; физически его выполняет то же фоновое задание, которое платформа создаёт автоматически при наступлении времени по расписанию. В клиент-серверном режиме планировщик работает на сервере: менеджер кластера следит за расписаниями и порождает фоновые сеансы на рабочих процессах.

Полезные настройки регламентных заданий в консоли кластера (свойства информационной базы):

  • Блокировка регламентных заданий — флаг, полностью отключающий их выполнение. Обязательно включайте для копий и тестовых баз, восстановленных из рабочей, иначе копия начнёт выполнять обмены и рассылки как «настоящая» база.
  • Количество повторов при аварийном завершении и интервал повтора — определяют поведение при падениях.

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

Сравнение вариантов

Клиент-серверный режим

Задания выполняются на сервере автономно, круглосуточно. Ограничение: код работает в контексте сервера — нет доступа к клиентским файлам и диалогам.

Файловый режим с открытым клиентом

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

Файловый режим с сеансом-роботом

Автономное выполнение по расписанию через /ExecuteScheduledJobs. Ограничение: нужна отдельная машина или автозапуск и контроль, что сеанс жив.

Отладка фоновых заданий

Отладить код фонового задания напрямую нельзя, пока не включена отладка на сервере. Для клиент-серверного режима агент сервера должен быть запущен с ключом -debug (в параметрах службы). После этого в конфигураторе через «Отладка → Подключение» можно подключиться к сеансу фонового задания — он появится в списке доступных предметов отладки с типом «Фоновое задание».

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

После отладки не забывайте убирать ключ -debug из параметров службы агента: режим отладки заметно снижает производительность рабочих процессов кластера. Проверьте это после перезапуска службы.
ПЗ
Практическое замечание

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

Большинство проблем с местом выполнения сводятся к неверным ожиданиям о контексте. Код, который прекрасно работал при тестировании на клиенте, в фоновом задании падает, потому что выполняется на другом компьютере, под другой учётной записью и без пользовательского контекста.

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

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

Контрольные точки

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

Сеанс в консоли кластера
Норма

Появляется сеанс «Фоновое задание» и завершается без ошибок

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

Сеанс не появляется вовсе или висит бесконечно

Журнал регистрации
Норма

Есть события начала и успешного завершения задания

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

События с уровнем «Ошибка» по фоновому заданию

Результат работы кода
Норма

Данные записаны, файлы выгружены, отчёты сформированы

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

Задание «выполнено», но ожидаемых изменений в базе нет — значит, код отработал не в том контексте

FAQ

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

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

Почему фоновое задание не видит файл, который пользователь точно положил на диск?

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

Под каким пользователем работает фоновое задание?

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

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

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

Что произойдёт с фоновым заданием при перезапуске сервера 1С?

Сеанс будет аварийно завершён. Регламентное задание платформа может перезапустить по расписанию или по настройке повторов после аварийного завершения; задание, запущенное программно вручную, автоматически не возобновится — его нужно запускать заново.

Как понять, что задание выполняется в файловой базе, а не «зависло»?

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

Итог

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

В клиент-серверном режиме фоновые задания выполняются рабочими процессами сервера 1С под учётной записью службы агента; в файловом — внутри клиентского сеанса или сеанса-робота с /ExecuteScheduledJobs. Фактическое место выполнения всегда видно в консоли кластера по сеансам типа «Фоновое задание», а большинство ошибок связано с неверными путями, правами и отсутствием запущенного сеанса в файловой базе.