Администрирование · 11 мин
Фоновое системное задание 1С: что это и как с ним работать
Что такое фоновое системное задание 1С, чем отличается от регламентного, как создать, запустить и контролировать выполнение. Практические инструкции и ошибки.
Фоновое системное задание в 1С — это механизм платформы, который выполняет программный код без участия пользователя и без блокировки его сеанса. Пока сотрудник продолжает работать в базе, система параллельно рассчитывает итоги, обменивается данными, формирует тяжёлые отчёты или отправляет печатные формы. Пользователь видит только результат, а не сам процесс.
Термин «системное» здесь указывает, что задание исполняется на уровне платформы: оно создаётся программно или планировщиком, запускается в отдельном сеансе на сервере или в клиентском приложении и не требует открытого окна 1С. В файловом варианте работы фоновые задания выполняются в отдельном процессе на компьютере пользователя, в клиент-серверном — на рабочем сервере кластера.
Понимание этого механизма важно и разработчику, и администратору, и продвинутому пользователю. Некорректно настроенные фоновые задания — одна из самых частых причин «торможения» базы, дублей данных и ночных блокировок.
Чем фоновое задание отличается от регламентного
Эти два понятия постоянно путают, хотя разница принципиальна. Фоновое задание — это однократный запуск произвольной процедуры: код вызвал метод, платформа создала сеанс, выполнила процедуру и завершила сеанс. Регламентное задание — это объект метаданных с расписанием: оно описано в конфигурации, хранит настройки периодичности и при каждом срабатывании порождает фоновое задание.
Иными словами, регламентное задание — это «будильник», а фоновое — само действие, которое происходит по звонку. Каждый запуск регламентного задания виден в консоли как отдельное фоновое задание со своим состоянием и временем выполнения.
| Критерий | Фоновое задание | Регламентное задание |
|---|---|---|
| Способ создания | Программно, методом ФоновыеЗадания.Выполнить | Объект метаданных в конфигураторе |
| Расписание | Нет, запуск по вызову из кода | Есть, настраивается в свойствах |
| Повторяемость | Однократное выполнение | Периодическое по расписанию |
| Типичное применение | Тяжёлый отчёт, длительная проводка, обмен по кнопке | Ночная синхронизация, пересчёт итогов, рассылка |
Как платформа выполняет фоновые задания
В клиент-серверном варианте фоновое задание исполняется в отдельном сеансе на рабочем процессе сервера 1С. Сеанс получает собственное соединение с СУБД, свои транзакции и свои права — обычно задание выполняется от имени пользователя, указанного при создании, либо от имени служебного пользователя, если он не задан. Это важно: права на объекты проверяются так же, как в интерактивном сеансе.
В файловом варианте механика сложнее: фоновые задания выполняются в отдельном процессе на той же машине, где работает пользователь, и конкурируют за файл базы. Поэтому в файловых базах параллельный запуск нескольких тяжёлых заданий часто приводит к взаимным блокировкам.
Каждое задание проходит состояния: Активно, Завершено, ЗавершеноАварийно, Отменено. Состояние, сообщения об ошибках и время выполнения доступны программно через менеджер фоновых заданий и визуально — через обработку «Консоль заданий» или типовую форму в разделе администрирования.
Когда использовать фоновые задания, а когда — нет
Основной сценарий — любая операция, которая длится дольше нескольких секунд и не требует немедленного ответа пользователю в форме. Формирование большого отчёта, загрузка прайсов, обмен с сайтом, групповое проведение документов, отправка писем — всё это кандидаты на фоновое выполнение.
Обратная сторона: фоновое задание не подходит, когда результат нужен немедленно и код зависит от данных текущей формы. Объекты формы, контекст клиента и временные хранилища сеанса в фоновое задание напрямую не передаются — параметры сериализуются, поэтому ссылочные данные нужно передавать как ссылки или помещать во временное хранилище заранее.
Как выбрать действие
Как создать и запустить фоновое задание программно
Запуск выполняется методом ФоновыеЗадания.Выполнить. Минимальные параметры: имя экспортной процедуры общего модуля, массив параметров, ключ и наименование. Процедура обязательно должна располагаться в общем модуле с признаком «Сервер» — вызвать процедуру модуля формы или объекта нельзя.
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(СсылкаНаОрганизацию);
ПараметрыЗадания.Добавить(ДатаНачала);
Задание = ФоновыеЗадания.Выполнить(
"ОбменДанными.ВыполнитьЗагрузкуПрайсов",
ПараметрыЗадания,
"ЗагрузкаПрайсов_" + Строка(СсылкаНаОрганизацию.УникальныйИдентификатор()),
"Загрузка прайсов поставщиков");
// Ожидание завершения не дольше 60 секунд
Попытка
Задание.ОжидатьЗавершенияВыполнения(60);
Исключение
// Превышено время ожидания — задание продолжает работать
КонецПопытки;
Сообщить("Состояние: " + Задание.Состояние);Ключ задания — недооценённый параметр. Платформа не позволяет одновременно выполнять два активных задания с одинаковым ключом: второй вызов завершится исключением. Это удобный встроенный механизм защиты от дублей, например от повторной загрузки по той же организации.
Если фоновое задание должно вернуть результат в вызывающий сеанс, типовой подход — поместить данные во временное хранилище внутри процедуры и передать адрес хранилища через параметры или сообщения задания. В типовых конфигурациях на БСП для этого используется подсистема «Длительные операции», которая сама управляет запуском, прогрессом и возвратом результата.
Где смотреть выполнение и как диагностировать ошибки
Основные инструменты наблюдения — консоль заданий (в типовых конфигурациях: «Администрирование → Обслуживание → Регламентные и фоновые задания») и журнал регистрации. Консоль показывает список заданий с состоянием, временем начала и окончания, пользователем и текстом ошибки для аварийно завершённых.
Если задание завершилось с ошибкой, первым делом откройте его сообщения: там будет текст исключения. Если информации мало, ищите в журнале регистрации события по имени метода и пользователю за тот же интервал времени. Частая ситуация — задание «зависло» в состоянии Активно: обычно это ожидание блокировки данных, которую держит другой сеанс, либо бесконечное ожидание ответа внешнего сервиса.
Как проверить результат
Завершено, время выполнения соответствует ожиданиям
ЗавершеноАварийно или Активно неоправданно долго
Пусто или только информационные записи
Текст исключения, ошибки СУБД, таймауты
Ожидаемые документы/записи созданы, итоги пересчитаны
Данные частично записаны или отсутствуют
Процесс rphost возвращается к обычному потреблению после завершения
Процесс продолжает потреблять ресурсы — задание зависло
Типичные ошибки и ограничения
Самая распространённая ошибка — попытка передать в фоновое задание объект, который не сериализуется: элемент формы, табличный документ из контекста клиента, COM-объект. Второе место занимает обращение к пользовательскому интерфейсу из фонового кода: вызов Предупреждение() или ОткрытьФорму() приведёт к аварийному завершению.
Третья группа проблем — архитектурная. Запуск задания в цикле без контроля количества может создать десятки параллельных сеансов и исчерпать рабочие процессы сервера. Отсутствие обработки исключений внутри процедуры оставляет задание в состоянии аварийного завершения без понятной диагностики. А в файловых базах одновременная работа фонового задания и пользователей с теми же данными почти гарантированно даёт конфликт блокировок.
Администрирование: блокировка, отмена, ограничения
Администратору доступны три базовых действия. Первое — отмена активного задания: программно методом Отменить или из консоли заданий. Второе — блокировка регламентных заданий целиком: в файловой базе это делается в параметрах информационной базы, в клиент-серверной — свойством «Блокировка регламентных заданий» в консоли кластера. Это обязательный шаг при загрузке копии базы в тестовую среду, иначе копия начнёт выполнять обмены и рассылки наравне с рабочей базой.
Третье — управление ресурсами. На сервере 1С можно ограничивать потребление рабочих процессов и распределять фоновые задания по рабочим серверам через требования назначения функциональности. Для тяжёлых ночных заданий полезно выделять отдельный рабочий сервер, чтобы они не конкурировали с интерактивными сеансами пользователей.
- 1Разместите процедуру в серверном общем модуле, добавьте обработку исключений с записью в журнал регистрации
- 2Запустите задание вручную на тестовой копии с реальным объёмом данных
- 3Проверьте в консоли состояние, время выполнения и сообщения
- 4Убедитесь, что данные записаны полностью и блокировки сняты
- 5Задайте уникальный ключ и ограничение на повторный запуск, перенесите в рабочую базу
FAQ: частые вопросы о фоновых заданиях 1С
Чем фоновое задание отличается от длительной операции в типовых конфигурациях?
Длительная операция — это программная обёртка из Библиотеки стандартных подсистем над обычным фоновым заданием. Она добавляет форму ожидания с индикатором, механизм возврата результата через временное хранилище и уведомление вызывающей формы о завершении. Внутри по-прежнему работает тот же метод ФоновыеЗадания.Выполнить.
Почему фоновое задание не запускается в файловой базе?
Наиболее вероятные причины: установлена блокировка регламентных заданий в параметрах информационной базы, процедура находится не в серверном общем модуле, или уже существует активное задание с тем же ключом. Проверьте также, что пользователь, от имени которого стартует задание, имеет права на используемые объекты.
Можно ли увидеть прогресс выполнения фонового задания?
Штатного процента выполнения у платформы нет. Практические варианты: записывать промежуточные сообщения через ДлительныеОперации.СообщитьПрогресс (в БСП), писать этапы в журнал регистрации или в служебный регистр сведений, который читает форма ожидания. Пользователю обычно показывают не процент, а текущий этап.
От чьего имени выполняется фоновое задание и почему это важно?
Если пользователь указан явно (пятый параметр метода Выполнить) — от его имени, иначе от имени пользователя с пустым именем либо текущего. Это критично для прав доступа и для подстановки ответственного в создаваемые документы: задание, запущенное «не от того» пользователя, может не найти данных или записать документы с неожиданным автором.
Что происходит с фоновыми заданиями при перезапуске сервера 1С?
Активные фоновые задания при остановке сервера завершаются аварийно — платформа не сохраняет их состояние и не перезапускает автоматически. Регламентные задания будут выполнены при следующем наступлении расписания. Поэтому длительные операции стоит проектировать с возможностью безопасного повторного запуска.
Сколько фоновых заданий может выполняться одновременно?
Жёсткого фиксированного лимита нет: упор идёт в количество и настройки рабочих процессов сервера, лицензии и ресурсы СУБД. На практике десятки параллельных тяжёлых заданий деградируют всю систему, поэтому массовые запуски стоит ставить в очередь и выполнять порциями.
Что важно запомнить
Фоновое системное задание — это выполнение кода в отдельном сеансе без блокировки пользователя. Регламентное задание лишь порождает фоновые по расписанию. Ключевые правила: процедура в серверном общем модуле, уникальный ключ против дублей, обработка ошибок, контроль состояния через консоль заданий и блокировка регламентных заданий в копиях базы.