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