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

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

Фоновое системное задание 1С: что это и как с ним работать

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

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

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

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

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

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

Иными словами, регламентное задание — это «будильник», а фоновое — само действие, которое происходит по звонку. Каждый запуск регламентного задания виден в консоли как отдельное фоновое задание со своим состоянием и временем выполнения.

КритерийФоновое заданиеРегламентное задание
Способ созданияПрограммно, методом ФоновыеЗадания.ВыполнитьОбъект метаданных в конфигураторе
РасписаниеНет, запуск по вызову из кодаЕсть, настраивается в свойствах
ПовторяемостьОднократное выполнениеПериодическое по расписанию
Типичное применениеТяжёлый отчёт, длительная проводка, обмен по кнопкеНочная синхронизация, пересчёт итогов, рассылка

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

В клиент-серверном варианте фоновое задание исполняется в отдельном сеансе на рабочем процессе сервера 1С. Сеанс получает собственное соединение с СУБД, свои транзакции и свои права — обычно задание выполняется от имени пользователя, указанного при создании, либо от имени служебного пользователя, если он не задан. Это важно: права на объекты проверяются так же, как в интерактивном сеансе.

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

Каждое задание проходит состояния: Активно, Завершено, ЗавершеноАварийно, Отменено. Состояние, сообщения об ошибках и время выполнения доступны программно через менеджер фоновых заданий и визуально — через обработку «Консоль заданий» или типовую форму в разделе администрирования.

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

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

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

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

Как выбрать действие

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

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

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

bsl
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(СсылкаНаОрганизацию);
ПараметрыЗадания.Добавить(ДатаНачала);

Задание = ФоновыеЗадания.Выполнить(
    "ОбменДанными.ВыполнитьЗагрузкуПрайсов",
    ПараметрыЗадания,
    "ЗагрузкаПрайсов_" + Строка(СсылкаНаОрганизацию.УникальныйИдентификатор()),
    "Загрузка прайсов поставщиков");

// Ожидание завершения не дольше 60 секунд
Попытка
    Задание.ОжидатьЗавершенияВыполнения(60);
Исключение
    // Превышено время ожидания — задание продолжает работать
КонецПопытки;

Сообщить("Состояние: " + Задание.Состояние);

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

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

Где смотреть выполнение и как диагностировать ошибки

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

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

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

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

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

Завершено, время выполнения соответствует ожиданиям

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

ЗавершеноАварийно или Активно неоправданно долго

Сообщения задания
Норма

Пусто или только информационные записи

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

Текст исключения, ошибки СУБД, таймауты

Данные в базе
Норма

Ожидаемые документы/записи созданы, итоги пересчитаны

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

Данные частично записаны или отсутствуют

Нагрузка на сервер
Норма

Процесс rphost возвращается к обычному потреблению после завершения

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

Процесс продолжает потреблять ресурсы — задание зависло

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

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

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

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

Администрирование: блокировка, отмена, ограничения

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

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

Порядок безопасного запуска нового фонового задания
  1. 1
    Разместите процедуру в серверном общем модуле, добавьте обработку исключений с записью в журнал регистрации
  2. 2
    Запустите задание вручную на тестовой копии с реальным объёмом данных
  3. 3
    Проверьте в консоли состояние, время выполнения и сообщения
  4. 4
    Убедитесь, что данные записаны полностью и блокировки сняты
  5. 5
    Задайте уникальный ключ и ограничение на повторный запуск, перенесите в рабочую базу

FAQ: частые вопросы о фоновых заданиях 1С

Чем фоновое задание отличается от длительной операции в типовых конфигурациях?

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

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

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

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

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

От чьего имени выполняется фоновое задание и почему это важно?

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

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

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

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

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

Итог

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

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