Фоновые и регламентные задания 1С 8.3: как устроены и как ими управлять

· 9 мин

Содержание

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

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

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

У обоих видов один механизм: платформа берёт экспортную процедуру серверного общего модуля и выполняет её в собственном сеансе. Разница — в том, кто даёт команду на запуск.

Фоновое заданиеРегламентное задание
Кто запускаетКод: кнопка, обработка, другой сеансПланировщик по расписанию
Где описаноНигде, создаётся «на лету»Объект метаданных «Регламентное задание»
РасписаниеНетЕсть, хранится в базе
ПримерФормирование тяжёлого отчёта в БП«Загрузка курсов валют», «Обновление индекса ППД»

📌 Что нужно знать про исполнение:

  • 🖥️ Клиент-серверный вариант. Задания выполняют рабочие процессы кластера. Пользователям не обязательно быть в базе: сервер работает и ночью.
  • 💻 Файловый вариант. Отдельного сервера нет, задания выполняет одно из запущенных клиентских приложений. Если в базе никого нет, регламентные задания не выполняются.
  • 🔑 Ключ задания. Строка, по которой платформа не даёт запустить два одинаковых задания одновременно.
  • 🧩 Предопределённые и непредопределённые. Первые созданы в конфигураторе и существуют в каждой базе. Вторые программа создаёт сама, например по одному заданию на каждую настройку обмена или почтовую учётную запись.

Фоновое задание не может показывать формы и задавать вопросы. Всё, что ему нужно, передают параметрами, а результат возвращают через временное хранилище или записывают в базу.

Где настроить регламентные задания и их расписание

В пользовательском режиме конфигураций на БСП (БП 3.0, ЗУП 3.1, УТ 11, КА, ERP) путь одинаковый:

  1. Откройте Администрирование → Обслуживание.
  2. В группе «Регламентные операции» нажмите ссылку «Регламентные и фоновые задания».
  3. На вкладке регламентных заданий выберите нужное и откройте его карточку.
  4. Флажок «Включено» отвечает за запуск по расписанию. Ссылка с расписанием открывает редактор.
  5. Сохраните карточку. Кнопка «Выполнить сейчас» в списке запускает задание вне очереди — удобно для проверки.

Раздел доступен только пользователю с полными правами. У рядового бухгалтера ссылки не будет.

Что задаётся в расписании

Редактор расписания один для всех заданий. В нём настраивают:

  • 📅 дни: каждый день, через N дней, по дням недели или числам месяца;
  • 🕐 окно работы: время начала и окончания;
  • 🔁 повтор в течение дня: например, каждые 600 секунд;
  • ⏸️ паузу после завершения: следующий запуск не раньше, чем через заданное время после предыдущего.

Не ставьте тяжёлые задания с повтором раз в минуту. Обмен, который идёт 3 минуты, при таком расписании будет работать почти непрерывно и мешать проведению документов.

Что задаётся в конфигураторе

Свойства самого объекта «Регламентное задание» видит разработчик: имя метода, ключ, признак «Предопределенное», пользователь по умолчанию, количество и интервал повторных попыток при аварийном завершении. Повторные попытки полезны для заданий, которые ходят во внешние сервисы: если сайт банка не ответил, задание повторится через указанный интервал, а не через сутки.

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

Запуск возможен только на сервере. Метод должен быть экспортной процедурой общего модуля с флажком «Сервер».

&НаСервере
Процедура ЗапуститьПересчетНаСервере()
	Параметры = Новый Массив;
	Параметры.Добавить(НачалоМесяца(ТекущаяДатаСеанса()));

	ФоновыеЗадания.Выполнить(
		"МойОбщийМодуль.ПересчитатьОстатки",
		Параметры,
		"ПересчетОстатков",
		"Пересчёт остатков за месяц");
КонецПроцедуры

Третий параметр — ключ. Пока задание с ключом ПересчетОстатков активно, второй запуск вызовет ошибку Задание с таким значением ключа уже выполняется. Это защита от двойного нажатия, а не сбой.

Найти активные задания по методу и отменить их:

Отбор = Новый Структура;
Отбор.Вставить("ИмяМетода", "МойОбщийМодуль.ПересчитатьОстатки");
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);

Для Каждого Задание Из ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор) Цикл
	Задание.Отменить();
КонецЦикла;

Включить предопределённое регламентное задание программно:

Задание = РегламентныеЗадания.НайтиПредопределенное(
	Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют);
Задание.Использование = Истина;
Задание.Записать();

Имя ЗагрузкаКурсовВалют — пример. Точное имя объекта смотрите в дереве метаданных своей конфигурации.

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

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

Список в пользовательском режиме

В форме «Регламентные и фоновые задания» у каждого регламентного задания видно время последнего запуска и состояние: выполнено, завершено аварийно, отменено. Вкладка фоновых заданий показывает историю запусков. Двойной щелчок по аварийной строке открывает текст ошибки.

Журнал регистрации

Подробности — в журнале регистрации: Администрирование → Обслуживание → Журнал регистрации. Установите отбор по событиям:

  • Фоновое задание. Запуск;
  • Фоновое задание. Успешное завершение;
  • Фоновое задание. Ошибка выполнения;
  • Фоновое задание. Отмена.

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

Консоль кластера

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

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

Ускорение и масштабирование фоновых заданий

Задания делят с пользователями процессор, память и блокировки. Несколько правил снимают большую часть проблем:

  1. Разведите расписание. Обновление индекса ППД, удаление помеченных, тяжёлые обмены — в ночное окно, с интервалом между стартами, а не все в 02:00.
  2. Задайте паузу после завершения, а не только период повтора. Тогда задания не наслаиваются друг на друга.
  3. Делите большую работу на порции. Перепроведение за год лучше запускать несколькими фоновыми заданиями по месяцам, каждое со своим ключом. Они пойдут параллельно в разных рабочих процессах.
  4. Отключите ненужное. Задания модулей, которыми вы не пользуетесь, работают впустую. Отключайте их через флажок «Включено» или через выключение соответствующей функциональности программы.

Вынос заданий на отдельный рабочий сервер

В кластере из нескольких серверов задания можно отдать отдельной машине. В консоли администрирования откройте свойства рабочего сервера и раздел «Требования назначения функциональности». Для типа объекта «Фоновое задание» задайте назначение на выделенный сервер, а на остальных — запрет. Пользователи перестанут замечать ночные обработки, даже если те затянутся до утра.

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

Права, пользователь задания и безопасный режим

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

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

🔐 Что проверить по безопасности:

  • 👤 Для своих регламентных заданий заведите служебного пользователя с нужными ролями, без входа в интерактивном режиме.
  • 🛡️ Привилегированный режим включайте точечно — УстановитьПривилегированныйРежим(Истина) на конкретную операцию, а не на всё задание.
  • 🧱 Если на кластере включены профили безопасности, задание обращается к файлам, COM-объектам и внешним адресам только в пределах разрешений профиля. Ошибка доступа в таком случае — не баг, а настройка, которую нужно расширить.
  • 🔒 Раздел «Регламентные и фоновые задания» не открывайте рядовым пользователям: из него можно отключить обмен или загрузку банковских выписок.

Фоновые задания в обменах и интеграциях

Почти вся интеграция типовых конфигураций держится на регламентных заданиях: синхронизация данных между базами, обмен с сайтом, загрузка курсов и классификаторов, ЭДО, работа с почтой, получение статусов из ГИС МТ и ЕГАИС.

Блокировка регламентных заданий при копировании базы

Главный приём практика. Скопировали рабочую базу в тестовую — и копия начинает так же отправлять письма, выгружать заказы на сайт и забирать документы ЭДО. Два способа это остановить:

  1. В кластере. В консоли администрирования откройте свойства информационной базы и включите флажок «Блокировка регламентных заданий включена». То же через rac: параметр --scheduled-jobs-deny=on команды rac infobase update (полный синтаксис — rac help infobase).
  2. В БСП. При первом входе в базу, которая переехала на другой адрес или в другой каталог, программа спрашивает, копия это или перенос. Ответ «Это копия» включает блокировку работы с внешними ресурсами: задания обмена и загрузки перестают ходить наружу.

Перед восстановлением копии рабочей базы на тестовый сервер включите блокировку регламентных заданий до первого запуска. Иначе тестовая база успеет отправить данные контрагентам или в контролирующие органы.

Блокировка в кластере действует на все регламентные задания базы сразу. Фоновые задания, запущенные из кода, она не останавливает.

Внешние вызовы из задания

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

В обратную сторону — 1С обращается к API через HTTPСоединение — задавайте таймаут соединения явно. Без него зависший внешний сервис держит задание и его рабочий процесс сколь угодно долго.

Ошибки фоновых заданий и как их устранить

СимптомВероятная причинаЧто сделать
Задание с таким значением ключа уже выполняетсяПредыдущий запуск не закончилсяДождаться или отменить зависшее задание
Задания не идут, флажки включеныБлокировка регламентных в свойствах базыСнять флажок в консоли кластера
В файловой базе ничего не выполняется ночьюНикто не запущен, сервера нетОставить запущенный клиент или перейти на клиент-сервер
Обмен «успешен», но данных нетБлокировка работы с внешними ресурсами БСПСнять её в рабочей базе, если копия была ошибочно отмечена
Ошибка прав в задании, у администратора всё работаетЗадание выполняется от другого пользователяУказать пользователя с нужными ролями
Задание аварийно завершается после обновленияИзменилась конфигурация, задание обращается к старым объектамПроверить текст ошибки, обновить доработки или расширение

Если задание висит и мешает работе, порядок действий такой: отмена из формы «Регламентные и фоновые задания», затем ожидание несколько минут, и только потом завершение сеанса в консоли кластера.

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

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

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