Как работают фоновые и регламентные задания в 1С 8.3 и почему они не запускаются
Содержание
Фоновое задание в 1С 8.3 — это процедура, которую платформа выполняет на сервере в отдельном сеансе, без окна и без участия пользователя. Запустить его можно двумя способами: по расписанию через регламентное задание (настраивается в Администрирование → Обслуживание) или из кода методом ФоновыеЗадания.Выполнить(). Первый способ выбирают для повторяющихся операций — загрузки курсов, обмена, обновления индексов. Второй — когда долгую операцию нужно увести с экрана пользователя, чтобы форма не «висела».
Механизм общий для платформы, а не для конкретной конфигурации. Форма управления заданиями есть во всех типовых решениях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА и ERP. Дальше — как настроить, как проверить, что задание отработало, и что делать, если оно молчит.
Фоновое и регламентное задание: в чём разница
Путаница возникает из-за того, что в списке заданий оба вида лежат рядом. На деле это два уровня одного механизма.
| Регламентное задание | Фоновое задание | |
|---|---|---|
| Что это | Объект конфигурации с расписанием | Конкретный запуск процедуры |
| Где описано | Конфигуратор → Общие → Регламентные задания | Не описывается в метаданных, создаётся при запуске |
| Кто запускает | Платформа по расписанию | Код или регламентное задание |
| Живёт | Постоянно, пока есть в конфигурации | До завершения выполнения |
| Видно в списке | Вкладка «Регламентные задания» | Вкладка «Фоновые задания» |
Каждое срабатывание регламентного задания порождает фоновое. Поэтому у задания «Загрузка курсов валют» в списке фоновых вы увидите столько строк, сколько раз оно запускалось.
Что важно знать о фоновом выполнении:
- 🖥️ код работает на сервере, клиентские формы и диалоги ему недоступны;
- 📨 сообщения через
Сообщить()не теряются, а сохраняются у задания — их можно прочитать после завершения; - 🔑 у задания может быть ключ: два активных задания с одним методом и одинаковым ключом одновременно не запустятся;
- 👤 задание выполняется с правами пользователя — того, кто его запустил, или указанного в настройках регламентного задания.
Настройка регламентного задания в режиме «Предприятие»
Бухгалтеру или администратору базы Конфигуратор не нужен. Почти всё настраивается в пользовательском режиме.
Где найти список заданий
Откройте Администрирование → Обслуживание. В группе «Регламентные операции» перейдите по ссылке «Регламентные и фоновые задания». Откроется форма с двумя вкладками: регламентные задания и фоновые задания.
У каждой строки видно, включено ли задание, когда оно последний раз выполнялось и с каким результатом. Строки с аварийным завершением подсвечиваются — с них и начинайте разбор.
Как включить задание и задать расписание
- Дважды щёлкните по заданию, чтобы открыть карточку.
- Установите флажок «Включено».
- Нажмите на ссылку с текстом расписания — откроется окно настройки.
- Задайте период действия, дни недели или месяца и время.
- Для частых заданий укажите интервал повтора в секундах внутри дня.
- Укажите пользователя, от имени которого будет выполняться задание (если поле есть в карточке).
- Сохраните карточку кнопкой «Записать и закрыть».
Окно расписания разбито на вкладки: общие параметры, дневное, недельное и месячное расписание. Например, чтобы курсы загружались каждый будний день в 9:30, на недельной вкладке оставьте понедельник–пятницу, а на дневной задайте время начала 09:30:00.
Время в расписании — это время сервера 1С, а не компьютера пользователя. Если сервер стоит в другом часовом поясе или у хостинга, задание «опоздает» или «поторопится» ровно на разницу поясов.
Повторы при сбое
В карточке регламентного задания можно задать количество повторных попыток при аварийном завершении и интервал между ними. Для заданий, которые зависят от сети — обмен с сайтом, загрузка курсов, запросы к внешним сервисам, — ставьте 2–3 повтора с интервалом 5–10 минут. Короткий сбой связи тогда не оставит базу без данных до следующего дня.
Ручной запуск
Если нужно выполнить задание прямо сейчас, не дожидаясь расписания, в карточке или в командной панели списка есть команда «Выполнить сейчас». Задание стартует фоном, а на вкладке фоновых заданий появится новая строка со статусом «Выполняется».
Фоновое задание в Конфигураторе и в коде
Программисту понадобятся два объекта: общий модуль с процедурой и, при необходимости, регламентное задание в метаданных.
Регламентное задание в метаданных
В дереве конфигурации Общие → Регламентные задания добавьте новый объект. Ключевые свойства:
- Имя метода — экспортная процедура серверного общего модуля;
- Использование — включено ли задание по умолчанию;
- Предопределённое — задание создаётся автоматически в единственном экземпляре;
- Расписание — расписание по умолчанию, которое потом можно изменить в режиме «Предприятие»;
- Количество повторных попыток и интервал повтора при аварийном завершении.
Непредопределённые задания создают из кода — так делают, когда нужно несколько экземпляров одного задания с разными параметрами, например обмен с каждым узлом отдельно.
Запуск фонового задания из кода
Минимальный пример: процедура в общем модуле с флажком «Сервер» и её запуск.
// Общий модуль ОбработкаДанныхСервер (Сервер = Истина)
Процедура ПересчитатьОстатки(Организация, Период) Экспорт
// долгая обработка
Сообщить("Пересчёт завершён");
КонецПроцедуры
// Вызов на сервере
Параметры = Новый Массив;
Параметры.Добавить(Организация);
Параметры.Добавить(КонецМесяца(ТекущаяДатаСеанса()));
Задание = ФоновыеЗадания.Выполнить(
"ОбработкаДанныхСервер.ПересчитатьОстатки",
Параметры,
"Пересчёт_" + Строка(Организация.УникальныйИдентификатор()),
"Пересчёт остатков");
ИдентификаторЗадания = Задание.УникальныйИдентификатор;
Третий параметр — ключ. Пока одно задание с этим методом и ключом активно, второе с тем же ключом запустить не получится: платформа вызовет исключение. Так защищаются от двойного нажатия кнопки.
Параметры передаются массивом. Передавайте значения, которые можно сериализовать: ссылки, даты, числа, строки, структуры из таких значений. Объект формы или менеджер временных таблиц в фоновое задание не передать.
Как получить результат
Клиентская форма не может ждать задание синхронно — она периодически проверяет состояние через обработчик ожидания. На сервере проверка выглядит так:
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если Задание = Неопределено Тогда
Возврат;
КонецЕсли;
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Сообщения = Задание.ПолучитьСообщенияПользователю(Истина);
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
ТекстОшибки = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
КонецЕсли;
В типовых конфигурациях на БСП не пишут этот цикл вручную. Есть готовый механизм длительных операций: ДлительныеОперации.ВыполнитьВФоне() на сервере и ожидание результата на клиенте с индикатором. Если дорабатываете типовую — используйте его, а не собственный опрос.
Отладка фонового задания
Точка останова в процедуре фонового задания сама по себе не сработает: код выполняется в другом сеансе. В Конфигураторе откройте Отладка → Подключение, затем настройку автоматического подключения и отметьте фоновые задания. После этого отладчик будет подключаться к каждому новому фоновому заданию.
Для клиент-серверной базы сервер 1С должен быть запущен с разрешённой отладкой. Если отладка на сервере выключена, этот приём не сработает — включать её на рабочем сервере стоит только на время разбора, с согласия администратора.
Где выполняются задания: файловая и серверная база
От варианта работы базы зависит, кто физически запускает задания.
Клиент-серверный вариант
Задания выполняет кластер серверов 1С в рабочих процессах. Пользователи для этого не нужны: база может быть никем не открыта, а курсы загрузятся ночью. В консоли кластера такие сеансы видны в списке с приложением «Фоновое задание».
В свойствах информационной базы в консоли кластера есть флажок «Блокировка регламентных заданий включена». Если он стоит, ни одно регламентное задание не стартует, хотя в самой базе они включены. Из командной строки этот же параметр меняется через rac infobase update — точный набор ключей смотрите в rac help infobase.
Для копий рабочей базы (тестовых, учебных) блокировку регламентных заданий включайте сразу после развёртывания. Иначе копия начнёт выгружать данные на сайт, отправлять почту и отчёты от имени рабочей организации.
Файловый вариант
Отдельного сервера нет, поэтому регламентные задания выполняет одно из запущенных клиентских приложений. Если никто не открыл базу — задания не выполняются. Утром первый вошедший бухгалтер «подхватит» пропущенное по расписанию.
Запрет и принудительное разрешение регламентных заданий для конкретного клиента задаётся параметром запуска /AllowExecuteScheduledJobs со значениями -Off или -Force. Например, на ноутбуке, который работает с базой по медленной сети, выполнение заданий лучше запретить.
Защита от запуска в копии базы
В конфигурациях на БСП есть ещё один предохранитель. Если база перенесена в другой каталог или на другой сервер, программа блокирует работу с внешними ресурсами: обмены, почту, загрузку из интернета. При входе администратор видит вопрос, это перемещённая рабочая база или копия. Пока ответа нет, задания, которые ходят во внешние системы, не выполняются — это частая причина «всё включено, но обмен стоит» после переезда.
Как проверить, что задание выполнилось
Есть три места, куда стоит смотреть, от простого к подробному.
- Форма регламентных и фоновых заданий. На вкладке фоновых заданий видны время начала, окончания и состояние каждого запуска. Откройте строку с аварийным завершением — там текст ошибки и сообщения задания.
- Журнал регистрации.
Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по событиям фонового задания: запуск, успешное завершение, ошибка выполнения, отмена. Отбор по периоду сужайте до времени запуска по расписанию. - Консоль кластера. Для серверной базы — список сеансов и рабочих процессов. Задание, которое «выполняется» уже несколько часов, видно по сеансу фонового задания с давним временем начала.
Если в журнале регистрации нет даже события запуска, задание не стартовало вообще. Ищите причину выше по цепочке: флажок «Включено», расписание, блокировка в кластере, блокировка внешних ресурсов. Если запуск есть, а завершения нет — задание зависло или его оборвал перезапуск рабочего процесса.
Как разгрузить сервер: расписание и производительность
Регламентные задания — частая скрытая причина торможения базы в рабочее время. Пользователи жалуются на «тормоза в 10 утра», а в это время по расписанию идёт пересчёт итогов или обмен на десятки тысяч документов.
Что делать:
- 🕐 разнесите тяжёлые задания по времени. Обмены, полнотекстовую индексацию, архивацию — на ночь или обед, и не на одну минуту;
- 🔁 не ставьте частый повтор без нужды. Задание с интервалом 60 секунд выполняется 1 440 раз в сутки. Если ему достаточно раза в 10 минут, нагрузка падает в 10 раз;
- 🚫 выключите ненужное. Задания для неиспользуемых функций (синхронизация с сервисами, которые не подключены) только забивают журнал ошибками;
- 📏 ограничьте время. В расписании можно указать, когда завершать выполнение. Ночное задание не должно «доползать» до утра;
- 📊 следите за полнотекстовым индексом. Его обновление в большой базе — одна из самых тяжёлых регулярных операций; если поиск по тексту не нужен, его можно отключить.
Ориентир, с которого удобно начинать:
| Тип задания | Разумная частота |
|---|---|
| Загрузка курсов валют | раз в день, утром |
| Обмен с сайтом, маркетплейсом | раз в 5–15 минут |
| Обмен между базами (РИБ, синхронизация) | раз в 15–60 минут |
| Обновление полнотекстового индекса | раз в 1–3 часа или ночью |
| Извлечение текста из файлов, архивация | ночью |
Для серверной базы ещё один рычаг — фоновые задания в той же сети, что и СУБД, и достаточное количество рабочих процессов. Если задания регулярно ждут, проверьте нагрузку на процессор и память рабочего сервера, а не только код.
Почему фоновое задание не запускается или завершается с ошибкой
Разбор по симптомам — выберите свой.
Если не помогло
Запустите ту же процедуру не фоном, а напрямую — из внешней обработки на сервере, под тем же пользователем. Если ошибка воспроизводится, проблема в коде или данных, а не в механизме заданий. Если напрямую всё проходит, а фоном нет — разница почти всегда в правах пользователя задания или в параметрах, которые в фоне не передаются (например, значения, сохранённые только в сеансе клиента).