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

Разработка и Конфигурация · 10 мин

Что такое фоновое задание в 1С и как с ним работать

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

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

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

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

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

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

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

Фоновое и регламентное задание

Фоновое задание

Экземпляр выполнения кода. Запускается из кода или планировщиком, живёт один раз, имеет состояние и результат.

Регламентное задание

Настройка расписания в метаданных. Само ничего не исполняет — только порождает фоновые задания по расписанию.

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

Когда применять фоновые задания

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

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

Маршрут решения

Когда выносить операцию в фон

Операция занимает больше 5–10 секунд и пользователь ждёт её результатаИспользуйте фоновое задание с механизмом длительных операций (БСП) — пользователь увидит индикатор прогресса
Действие должно выполняться регулярно без участия человекаСоздайте регламентное задание с расписанием
Операция мгновенная и нужна для интерактиваОставьте выполнение в сеансе пользователя — фон здесь избыточен
Нужен диалог с пользователем в процессе выполненияФоновое задание не подойдёт: оно не может открывать формы и задавать вопросы

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

Как запустить фоновое задание из кода

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

bsl
ПараметрыПроцедуры = Новый Массив;
ПараметрыПроцедуры.Добавить(НачалоМесяца(ТекущаяДатаСеанса()));

ФоновыеЗадания.Выполнить(
    "ОбработкаДанных.СформироватьОтчет",
    ПараметрыПроцедуры,
    "КлючОтчета",
    "Формирование отчета за месяц");

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

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

Как отслеживать выполнение и искать ошибки

Штатный инструмент мониторинга — консоль заданий. В типовых конфигурациях она находится в разделе администрирования («Регламентные и фоновые задания» или «Обслуживание»). Консоль показывает список заданий с состоянием, временем начала и окончания, а для аварийно завершённых — текст ошибки.

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

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

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

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

«Завершено» без записей об ошибках

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

«Завершено аварийно» или задание «висит» в состоянии «Активно» неоправданно долго

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

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

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

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

Результат в данных
Норма

Отчёт сформирован, документы проведены, данные обмена обновлены

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

Задание завершилось успешно, но данных нет — проверяйте логику метода и права

Повторные запуски
Норма

Каждый запуск по расписанию выполняется

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

Задание не стартует — проверьте, не заблокировано ли оно и не активен ли предыдущий экземпляр

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

Ограничения и подводные камни

Фоновые задания выполняются от имени конкретного пользователя. Для регламентных заданий пользователь задаётся в свойствах; если он не указан, задание работает с правами по умолчанию, что часто приводит к ошибкам доступа. Проверяйте, что у указанного пользователя есть права на все объекты, с которыми работает метод.

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

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

Типичные ошибки при работе с фоновыми заданиями

Типичные ошибки
01
Вызов метода из модуля формы или объекта — задание падает сразу, метод должен быть в серверном общем модуле
02
Попытка показать сообщение или открыть форму в фоне — интерфейс недоступен, используйте журнал регистрации и запись результата в базу
03
Регламентное задание без указанного пользователя — ошибки прав доступа при выполнении
04
Отсутствие ключа у задания — параллельные запуски одной операции приводят к блокировкам и дублированию данных
05
Тяжёлые задания в рабочие часы — конкуренция за ресурсы сервера и замедление работы пользователей; переносите их на ночь
06
Игнорирование журнала регистрации — аварийные завершения остаются незамеченными неделями

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

FAQ по фоновым заданиям

Чем фоновое задание отличается от регламентного?

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

Может ли фоновое задание показать сообщение пользователю?

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

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

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

Что делать, если задание завершилось аварийно?

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

Как запретить одновременный запуск двух одинаковых заданий?

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

Влияют ли фоновые задания на скорость работы пользователей?

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

Итог

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

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