Как работают фоновые и регламентные задания в 1С 8.3 и почему они не запускаются

· 10 мин

Содержание

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

Механизм общий для платформы, а не для конкретной конфигурации. Форма управления заданиями есть во всех типовых решениях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА и ERP. Дальше — как настроить, как проверить, что задание отработало, и что делать, если оно молчит.

Фоновое и регламентное задание: в чём разница

Путаница возникает из-за того, что в списке заданий оба вида лежат рядом. На деле это два уровня одного механизма.

Регламентное заданиеФоновое задание
Что этоОбъект конфигурации с расписаниемКонкретный запуск процедуры
Где описаноКонфигуратор → Общие → Регламентные заданияНе описывается в метаданных, создаётся при запуске
Кто запускаетПлатформа по расписаниюКод или регламентное задание
ЖивётПостоянно, пока есть в конфигурацииДо завершения выполнения
Видно в спискеВкладка «Регламентные задания»Вкладка «Фоновые задания»

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

Что важно знать о фоновом выполнении:

  • 🖥️ код работает на сервере, клиентские формы и диалоги ему недоступны;
  • 📨 сообщения через Сообщить() не теряются, а сохраняются у задания — их можно прочитать после завершения;
  • 🔑 у задания может быть ключ: два активных задания с одним методом и одинаковым ключом одновременно не запустятся;
  • 👤 задание выполняется с правами пользователя — того, кто его запустил, или указанного в настройках регламентного задания.

Настройка регламентного задания в режиме «Предприятие»

Бухгалтеру или администратору базы Конфигуратор не нужен. Почти всё настраивается в пользовательском режиме.

Где найти список заданий

Откройте Администрирование → Обслуживание. В группе «Регламентные операции» перейдите по ссылке «Регламентные и фоновые задания». Откроется форма с двумя вкладками: регламентные задания и фоновые задания.

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

Как включить задание и задать расписание

  1. Дважды щёлкните по заданию, чтобы открыть карточку.
  2. Установите флажок «Включено».
  3. Нажмите на ссылку с текстом расписания — откроется окно настройки.
  4. Задайте период действия, дни недели или месяца и время.
  5. Для частых заданий укажите интервал повтора в секундах внутри дня.
  6. Укажите пользователя, от имени которого будет выполняться задание (если поле есть в карточке).
  7. Сохраните карточку кнопкой «Записать и закрыть».

Окно расписания разбито на вкладки: общие параметры, дневное, недельное и месячное расписание. Например, чтобы курсы загружались каждый будний день в 9:30, на недельной вкладке оставьте понедельник–пятницу, а на дневной задайте время начала 09:30:00.

Время в расписании — это время сервера 1С, а не компьютера пользователя. Если сервер стоит в другом часовом поясе или у хостинга, задание «опоздает» или «поторопится» ровно на разницу поясов.

Повторы при сбое

В карточке регламентного задания можно задать количество повторных попыток при аварийном завершении и интервал между ними. Для заданий, которые зависят от сети — обмен с сайтом, загрузка курсов, запросы к внешним сервисам, — ставьте 2–3 повтора с интервалом 5–10 минут. Короткий сбой связи тогда не оставит базу без данных до следующего дня.

Ручной запуск

Если нужно выполнить задание прямо сейчас, не дожидаясь расписания, в карточке или в командной панели списка есть команда «Выполнить сейчас». Задание стартует фоном, а на вкладке фоновых заданий появится новая строка со статусом «Выполняется».

Фоновое задание в Конфигураторе и в коде

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

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

В дереве конфигурации Общие → Регламентные задания добавьте новый объект. Ключевые свойства:

  • Имя метода — экспортная процедура серверного общего модуля;
  • Использование — включено ли задание по умолчанию;
  • Предопределённое — задание создаётся автоматически в единственном экземпляре;
  • Расписание — расписание по умолчанию, которое потом можно изменить в режиме «Предприятие»;
  • Количество повторных попыток и интервал повтора при аварийном завершении.

Непредопределённые задания создают из кода — так делают, когда нужно несколько экземпляров одного задания с разными параметрами, например обмен с каждым узлом отдельно.

Запуск фонового задания из кода

Минимальный пример: процедура в общем модуле с флажком «Сервер» и её запуск.

// Общий модуль ОбработкаДанныхСервер (Сервер = Истина)
Процедура ПересчитатьОстатки(Организация, Период) Экспорт
	// долгая обработка
	Сообщить("Пересчёт завершён");
КонецПроцедуры
// Вызов на сервере
Параметры = Новый Массив;
Параметры.Добавить(Организация);
Параметры.Добавить(КонецМесяца(ТекущаяДатаСеанса()));

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

ИдентификаторЗадания = Задание.УникальныйИдентификатор;

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

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

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

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

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если Задание = Неопределено Тогда
	Возврат;
КонецЕсли;

Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
	Сообщения = Задание.ПолучитьСообщенияПользователю(Истина);
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
	ТекстОшибки = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
КонецЕсли;

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

Отладка фонового задания

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

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

Где выполняются задания: файловая и серверная база

От варианта работы базы зависит, кто физически запускает задания.

Клиент-серверный вариант

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

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

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

Файловый вариант

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

Запрет и принудительное разрешение регламентных заданий для конкретного клиента задаётся параметром запуска /AllowExecuteScheduledJobs со значениями -Off или -Force. Например, на ноутбуке, который работает с базой по медленной сети, выполнение заданий лучше запретить.

Защита от запуска в копии базы

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

Как проверить, что задание выполнилось

Есть три места, куда стоит смотреть, от простого к подробному.

  1. Форма регламентных и фоновых заданий. На вкладке фоновых заданий видны время начала, окончания и состояние каждого запуска. Откройте строку с аварийным завершением — там текст ошибки и сообщения задания.
  2. Журнал регистрации. Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по событиям фонового задания: запуск, успешное завершение, ошибка выполнения, отмена. Отбор по периоду сужайте до времени запуска по расписанию.
  3. Консоль кластера. Для серверной базы — список сеансов и рабочих процессов. Задание, которое «выполняется» уже несколько часов, видно по сеансу фонового задания с давним временем начала.

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

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

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

Что делать:

  • 🕐 разнесите тяжёлые задания по времени. Обмены, полнотекстовую индексацию, архивацию — на ночь или обед, и не на одну минуту;
  • 🔁 не ставьте частый повтор без нужды. Задание с интервалом 60 секунд выполняется 1 440 раз в сутки. Если ему достаточно раза в 10 минут, нагрузка падает в 10 раз;
  • 🚫 выключите ненужное. Задания для неиспользуемых функций (синхронизация с сервисами, которые не подключены) только забивают журнал ошибками;
  • 📏 ограничьте время. В расписании можно указать, когда завершать выполнение. Ночное задание не должно «доползать» до утра;
  • 📊 следите за полнотекстовым индексом. Его обновление в большой базе — одна из самых тяжёлых регулярных операций; если поиск по тексту не нужен, его можно отключить.

Ориентир, с которого удобно начинать:

Тип заданияРазумная частота
Загрузка курсов валютраз в день, утром
Обмен с сайтом, маркетплейсомраз в 5–15 минут
Обмен между базами (РИБ, синхронизация)раз в 15–60 минут
Обновление полнотекстового индексараз в 1–3 часа или ночью
Извлечение текста из файлов, архивацияночью

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

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

Разбор по симптомам — выберите свой.

Диагностика: выберите симптом

Если не помогло

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

Частые вопросы

Можно ли запустить фоновое задание с клиента?
Нет, метод ФоновыеЗадания.Выполнить() вызывается только на сервере. С клиента вызывают серверную процедуру, которая уже запускает задание и возвращает его идентификатор.
Сколько хранится история фоновых заданий?
Список завершённых фоновых заданий платформа хранит ограниченное время и в ограниченном количестве. Для долгой истории опирайтесь на журнал регистрации — он хранит события запусков и ошибок по настройкам журнала.
Почему регламентное задание выполняется под другим пользователем?
Если в карточке задания пользователь не указан, оно выполняется от имени пользователя по умолчанию. Укажите пользователя явно, чтобы права и авторство изменений были предсказуемы.
Можно ли изменить расписание без Конфигуратора?
Да. Расписание из метаданных — только значение по умолчанию. В форме регламентных и фоновых заданий оно меняется в режиме «Предприятие» и хранится в базе, обновление конфигурации его не сбросит.
Влияет ли фоновое задание на лицензии?
Сеанс фонового задания не занимает клиентскую лицензию пользователя. Ограничение здесь другое — ресурсы сервера: много параллельных тяжёлых заданий замедлят работу всех.