Задания
Задания — это механизм, который позволяет выполнять заданный код асинхронно в фоновом режиме (фоновые задания) или по расписанию (запланированные задания). В «1С:Исполнителе» задания описываются типами из пространства имен Стд::Задания.
Фоновые задания
С помощью фоновых заданий можно выполнять код на встроенном языке в фоновом режиме.
Фоновые задания описываются типом ФоновыеЗадания, который позволяет создавать задания и управлять ими.
метод СозданиеФоновогоЗадания()
пер Задания = новый Массив<ФоновоеЗадание>()
Задания.Добавить(ФоновыеЗадания.Выполнить(&Расчеты.ПервыйРасчет))
Задания.Добавить(ФоновыеЗадания.Выполнить(&Расчеты.ВторойРасчет))
Задания.Добавить(ФоновыеЗадания.Выполнить(&Расчеты.ТретийРасчет))
ФоновыеЗадания.ОжидатьЗавершения(Задания)
;
Фоновое задание запускается при наличии ресурсов, однако результат его работы не гарантирован:
- при выключении сервера или остановке приложения задание может не запуститься;
- при выключении сервера, остановке приложения или прерывании работы выполняемые задания теряются.
Типичное применение фонового задания — параллельные вычисления.
Запланированные задания
С помощью запланированных заданий можно выполнять код на встроенном языке по расписанию, в том числе с многократными повторами в запланированные моменты времени. Чтобы сервис запланированных заданий запускался автоматически при запуске приложения, включите соответствующую настройку в панели управления в меню Настройки приложения:

При включении сервиса в журнал событий записывается событие СобытиеЗапланированныеЗаданияВключены, а при выключении — СобытиеЗапланированныеЗаданияВыключены.
Запуск запланированного задания гарантируется в следующих случаях:
- при выключении сервера или остановке приложения, если задание не выполнялось в момент выключения;
- при выключении сервера, остановке приложения или прерывании выполнения работающее задание завершается с ошибкой и обрабатывается в соответствии со стратегией обработки ошибок: например, задание может быть запущено повторно через равные интервалы времени, а также линейно и экспоненциально меняющиеся.
Создание и планирование заданий
Запланированные задания описываются типом ЗапланированныеЗадания, который позволяет создавать запланированные задани я и управлять ими. В методе Создать() в качестве параметров указывается имя обработчика, который вызывается для выполнения задания, и параметры, передаваемые в обработчик. Например:
метод МойМетод(Ключ: Строка, Период: Число)
// код выполнения задания
;
знч Задание = ЗапланированныеЗадания.Создать(&МояПодсистема::МойМодуль.МойМетод, "Ключ", 500)
Метод Создать() возвращает объект типа СоздаваемоеЗапланированноеЗадание, который позволяет настроить создаваемое задание с помощью метода Настроить() и запланировать его выполнение относительно активной транзакции с помощью методов:
Запланировать()— если нет активной транзакции, задание планируется немедленно, в противном случае задание сохраняется в базу данных и планируется после завершения активной транзакции;ЗапланироватьБезТранзакции()— задание планируется немедленно, независимо от наличия активной транзакции;ЗапланироватьВТранзакции()— задание сохраняется в базу данных и планируется после завершения активной транзакции. Если активной транзакции нет, выбрасывается исключение.
Если сервис заданий выключен, метод ЗапланироватьБезТранзакции() выбрасывает исключение. Если сервис заданий выключен и активных транзакций нет, то методы Запланировать() и ЗапланироватьВТранзакции() выбрасывают исключение. При наличии активной транзакции методы Запланировать() и ЗапланироватьВТранзакции() успешно выполнятся, а задания будут запланированы, когда запустится сервис.
При обновлении проекта сервис запланированных заданий всегда выключен, поэтому в обработчике @ОбновлениеПроекта можно планировать задания только с помощью метода ЗапланироватьВТранзакции().
Изменение и настройка заданий
Метод Изменить() типа ЗапланированныеЗадания возвращает объект типа ИзменяемоеЗапланированноеЗадание, с помощью которого можно поменять некоторые параметры запуска существующего запланированного задания. Чтобы запланировать измененное задание, используются методы Запланировать(), ЗапланироватьБезТранзакции() и ЗапланироватьВТранзакции() по аналогии с одноименными методами типа СоздаваемоеЗапланированноеЗадание.
При настройке запланированного задания с помощью метода СоздаваемоеЗапланированноеЗадание.Настроить() вы можете задавать следующие параметры:
Ключ
Строка. Ключ служит для идентификации задания. С его помощью вы можете:
-
изменить задание;
// Создание запланированного задания НовоеЗадание с заданным ключом Ключ
знч Ключ = "ЗаданиеРассылкиСпама"
пер НовоеЗадание = ЗапланированныеЗадания.Создать(&МойМодуль.МойМетод)
.Настроить(Ключ = Ключ)
.Запланировать()
// Получение объекта типа ИзменяемоеЗапланированноеЗадание,
// чтобы изменить задание с ключом Ключ
знч ИзмЗадание = ЗапланированныеЗадания.Изменить(Ключ) -
отменить выполнение задания — прерывает исполнение задания, если оно выполняется в момент вызова; для задания с расписанием отменяется только текущее исполнение;
ЗапланированныеЗадания.Отменить("МоеЗадание") -
приостановить выполнение задания (только для заданий с расписанием);
ЗапланированныеЗадания.Приостановить("МоеЗадание") -
возобновить выполнение задания (только для заданий с расписанием).
ЗапланированныеЗадания.Возобновить("МоеЗадание")
Ключ, назначенный с помощью метода Настроить(), удобно использовать для регулярных заданий. Если задание выполняется однократно, обычно используется уникальный автоматически сгенерированный ключ.
Если в момент вызова метода Запланировать() уже существует задание с таким же ключом, то поведение метода определяется стратегией публикации.
Параметр нельзя изменить после планирования задания.
Описание
Строка. Описание задания. Параметр нельзя изменить после планирования задания.
Расписание
Расписание|Обходимое<Расписание>. Задает расписание запуска задания.
метод ЗапланироватьЗаданияСРасписанием()
знч Праздничное = ЗапланированныеЗадания.Создать(&МойМодуль.МойМетод)
Праздничное.Настроить(Расписание = [
Расписание.Ежемесячно(Время{8:00}, {Месяц.Февраль}, {23}),
Расписание.Ежемесячно(Время{8:00}, {Месяц.Март}, {8})])
Праздничное.Запланировать()
;
Задержка
Длительность. Задает задержку начала выполнения относительн о времени планирования задания:
- если задание запланировано с помощью метода
ЗапланироватьБезТранзакции(), то задержка вычисляется от момента вызова этого метода; - если задание запланировано с помощью метода
ЗапланироватьВТранзакции(), то задержка вычисляется от момента окончания активной транзакции; - если задано расписание, то задержка игнорируется.
метод ЗапланироватьЗаданияСЗадержкой()
знч ЗаданиеСЗадержкой = ЗапланированныеЗадания.Создать(&МойМодуль.МойМетод)
ЗаданиеСЗадержкой.Настроить(Задержка = 3с)
ЗаданиеСЗадержкой.Запланировать()
;
ПовторыПриОшибке
СтратегияПовтораЗадания. Используется, чтобы запланировать повторный запуск задания, если текущий запуск завершается с ошибкой.