Администрирование · 11 мин
Где выполняется фоновое задание 1С
Разбираем, где выполняется фоновое задание 1С: на сервере 1С:Предприятия, в файловой базе, на клиенте. Как проверить, отладить и устранить типичные ошибки.
Фоновое задание в 1С — это сеанс, который платформа создаёт для выполнения программного кода без участия пользовательского интерфейса. Место, где именно выполняется этот код, зависит от режима работы информационной базы: в клиент-серверном варианте задание исполняется на сервере 1С:Предприятия, а в файловом — в отдельном процессе на том компьютере, где запущен клиент или специальное соединение.
Понимание точки выполнения критично по трём причинам. Во-первых, от этого зависят доступные пути к файлам и ресурсам: код на сервере «не видит» диски клиентского компьютера. Во-вторых, от места выполнения зависят права: фоновое задание запускается под служебной учётной записью, а не под пользователем, который его инициировал. В-третьих, при ошибках «задание не выполняется» первым делом нужно понять, в каком процессе оно вообще должно работать.
Ниже разобраны оба варианта инфраструктуры, способы определить фактическое место выполнения, особенности регламентных заданий и типичные ошибки диагностики.
Где выполняется фоновое задание в клиент-серверном режиме
В клиент-серверном варианте фоновые задания всегда выполняются на сервере 1С:Предприятия. Когда код вызывает ФоновыеЗадания.Выполнить() или срабатывает расписание регламентного задания, менеджер кластера (процесс rmngr) назначает задание одному из рабочих процессов (rphost). Именно в этом процессе платформа создаёт служебный сеанс и исполняет указанную процедуру общего модуля.
Какой именно rphost возьмёт задание, решает кластер с учётом требований назначения функциональности. Если для сервера задано требование «не назначать» фоновые задания, кластер направит их на другой рабочий сервер. Это стандартный приём выноса фоновой нагрузки (обмены, расчёты, загрузка данных) на отдельную машину, чтобы не конкурировать с интерактивными сеансами пользователей.
Важные следствия серверного выполнения:
- Файловые пути в коде относятся к файловой системе сервера, а не клиента. Путь
C:\Обмен— это диск сервера 1С. - Задание работает под учётной записью, от имени которой запущена служба агента сервера 1С (по умолчанию служебный пользователь USR1CV8). У этой учётки должны быть права на сетевые каталоги, принтеры и внешние ресурсы, если код к ним обращается.
- COM-объекты и внешние компоненты должны быть установлены и зарегистрированы на сервере, а не на клиенте.
Где выполняется фоновое задание в файловом режиме
В файловом варианте нет отдельного сервера, поэтому платформа создаёт фоновый процесс на том же компьютере, где работает клиентское приложение. Задания, запущенные программно через ФоновыеЗадания.Выполнить(), выполняются в отдельном потоке в рамках клиентского сеанса — пока пользователь не закрыл программу.
Регламентные задания в файловой базе по расписанию не запускаются сами по себе. Чтобы они выполнялись, нужно либо держать открытым клиентский сеанс (тогда задания отрабатывают в нём), либо запустить отдельный сеанс с параметром командной строки, предназначенным для выполнения регламентных заданий.
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /N"Робот" /P"пароль" /ExecuteScheduledJobsТакой сеанс обычно запускают на выделенной машине или сервере, где лежит файл базы, и добавляют в планировщик задач или автозагрузку. Пока этот сеанс работает, регламентные задания выполняются внутри него; если сеанс закрыт — задания просто не выполняются, что является одной из самых частых причин «молчащих» файловых баз.
Как определить, где фактически выполняется задание
Самый надёжный способ — посмотреть сеансы в консоли кластера. Откройте консоль администрирования серверов 1С, найдите нужную информационную базу и раскройте узел «Сеансы». Фоновые задания отображаются как сеансы с типом «Фоновое задание». В колонках видно рабочий процесс (rphost) и компьютер, на котором выполняется сеанс.
Альтернативные способы проверки:
- Консоль заданий (обработка из состава БСП или сторонняя) — показывает активные задания, их состояние, ключи и ошибки.
- Журнал регистрации — события фоновых заданий фиксируются с указанием сеанса и соединения; по соединению можно сопоставить процесс.
- Диспетчер задач на сервере — по росту нагрузки конкретного rphost косвенно видно, что задание выполняется в нём.
- 1Откройте консоль кластера серверов 1С и выберите информационную базу.
- 2Раскройте узел «Сеансы» и отфильтруйте по типу «Фоновое задание».
- 3Посмотрите колонки «Рабочий процесс» и «Компьютер» — это и есть точка выполнения.
- 4При необходимости свяжите сеанс с соединением и PID процесса rphost для мониторинга нагрузки.
Регламентные задания: кто их запускает и где
Регламентное задание — это описание расписания и метода в метаданных; физически его выполняет то же фоновое задание, которое платформа создаёт автоматически при наступлении времени по расписанию. В клиент-серверном режиме планировщик работает на сервере: менеджер кластера следит за расписаниями и порождает фоновые сеансы на рабочих процессах.
Полезные настройки регламентных заданий в консоли кластера (свойства информационной базы):
- Блокировка регламентных заданий — флаг, полностью отключающий их выполнение. Обязательно включайте для копий и тестовых баз, восстановленных из рабочей, иначе копия начнёт выполнять обмены и рассылки как «настоящая» база.
- Количество повторов при аварийном завершении и интервал повтора — определяют поведение при падениях.
В файловом режиме, как описано выше, планировщик существует только внутри запущенного сеанса. Расписание проверяется клиентским приложением, поэтому «серверного» автономного выполнения в файловой базе не существует в принципе.
Сравнение вариантов
Задания выполняются на сервере автономно, круглосуточно. Ограничение: код работает в контексте сервера — нет доступа к клиентским файлам и диалогам.
Просто, ничего настраивать не нужно. Ограничение: задания работают, только пока открыт сеанс; закрытие программы останавливает выполнение.
Автономное выполнение по расписанию через /ExecuteScheduledJobs. Ограничение: нужна отдельная машина или автозапуск и контроль, что сеанс жив.
Отладка фоновых заданий
Отладить код фонового задания напрямую нельзя, пока не включена отладка на сервере. Для клиент-серверного режима агент сервера должен быть запущен с ключом -debug (в параметрах службы). После этого в конфигураторе через «Отладка → Подключение» можно подключиться к сеансу фонового задания — он появится в списке доступных предметов отладки с типом «Фоновое задание».
Практический приём: в начале отлаживаемого метода временно вставьте цикл ожидания или запустите задание вручную из консоли заданий, чтобы успеть подключиться. Для файлового режима отладка проще — фоновый сеанс доступен для подключения в том же конфигураторе без дополнительных ключей.
После отладки не забывайте убирать ключ -debug из параметров службы агента: режим отладки заметно снижает производительность рабочих процессов кластера. Проверьте это после перезапуска службы.
Типичные ошибки и ограничения
Большинство проблем с местом выполнения сводятся к неверным ожиданиям о контексте. Код, который прекрасно работал при тестировании на клиенте, в фоновом задании падает, потому что выполняется на другом компьютере, под другой учётной записью и без пользовательского контекста.
Ещё одно ограничение: фоновое задание не может порождать другие фоновые задания в ряде сценариев и платформенных ограничений вложенности, а длительные задания могут прерываться при перезапуске рабочих процессов кластера. Для длительных операций проектируйте код так, чтобы он мог безопасно повториться после сбоя (идемпотентность, фиксация прогресса в базе).
Как проверить результат
Появляется сеанс «Фоновое задание» и завершается без ошибок
Сеанс не появляется вовсе или висит бесконечно
Есть события начала и успешного завершения задания
События с уровнем «Ошибка» по фоновому заданию
Данные записаны, файлы выгружены, отчёты сформированы
Задание «выполнено», но ожидаемых изменений в базе нет — значит, код отработал не в том контексте
FAQ
Можно ли заставить фоновое задание выполняться на конкретном сервере кластера?
Да, через требования назначения функциональности в консоли кластера. Создайте для нужного рабочего сервера требование с объектом «Фоновое задание» и признаком «Назначать», а для остальных серверов — «Не назначать». После этого кластер будет направлять фоновые сеансы только на выбранную машину.
Почему фоновое задание не видит файл, который пользователь точно положил на диск?
Потому что задание выполняется на сервере, а файл лежит на компьютере пользователя. Передавайте файл на сервер заранее (например, через временное хранилище при программном запуске) или используйте сетевой каталог, доступный учётной записи службы сервера 1С.
Под каким пользователем работает фоновое задание?
Если задание запущено программно из сеанса пользователя, фоновый сеанс создаётся от имени того же пользователя информационной базы. Если задание запустил планировщик регламентных заданий и пользователь в свойствах задания не указан, сеанс работает без аутентифицированного пользователя — учитывайте это в коде, проверяющем права и текущего пользователя.
Почему в файловой базе регламентные задания перестали выполняться?
Чаще всего закрыт сеанс, в котором они выполнялись: либо пользователь вышел из программы, либо остановлен сеанс-робот, запущенный с /ExecuteScheduledJobs. Проверьте, что такой сеанс запущен, и убедитесь, что он не завершается по таймауту или из-за перезагрузки машины.
Что произойдёт с фоновым заданием при перезапуске сервера 1С?
Сеанс будет аварийно завершён. Регламентное задание платформа может перезапустить по расписанию или по настройке повторов после аварийного завершения; задание, запущенное программно вручную, автоматически не возобновится — его нужно запускать заново.
Как понять, что задание выполняется в файловой базе, а не «зависло»?
Откройте консоль заданий или посмотрите журнал регистрации: активное задание периодически пишет события, а длительные операции обычно отражаются в нагрузке процесса 1cv8 в диспетчере задач. Если процесс не потребляет ресурсов и событий нет — задание либо ждёт снятия блокировки, либо завершилось с ошибкой.
Что важно запомнить
В клиент-серверном режиме фоновые задания выполняются рабочими процессами сервера 1С под учётной записью службы агента; в файловом — внутри клиентского сеанса или сеанса-робота с /ExecuteScheduledJobs. Фактическое место выполнения всегда видно в консоли кластера по сеансам типа «Фоновое задание», а большинство ошибок связано с неверными путями, правами и отсутствием запущенного сеанса в файловой базе.