Каталог решений - Неочевидная особенность фоновых заданий

Неочевидная особенность фоновых заданий

Неочевидная особенность фоновых заданий

В наличии

Некоторые наблюдения по поводу использования свойства Ключ объекта ФоновоеЗадание.

Категория:

Описание

Про что статья

Среди объектов 1С есть РегламентноеЗадание и ФоновоеЗадание.

Регламентное задание, позволяющее выполнять определенную функциональность по расписанию.

Фоновое задание служит для выполнения асинхронных операций.

Фоновое задание может быть создано двумя путями:

  • В результате работы Регламентного задания (запущено по расписанию);
  • Программно методом ФоновыеЗадания.Выполнить().

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

Вот про это свойство и пойдет речь в данной статье.

 

Как работает свойство Ключ

Исходя из описания в синтаксис-помощнике можно сделать вывод, что невозможно создать два фоновых задания с одинаковым именем метода, и одинаковым (не пустым) ключом.

Действительно, если в клиент-серверной базе 1С написать код:

ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");
ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");

то, на второй строке будет сгенерировано исключение: Задание с таким значением ключа уже выполняется.  

 

 

Кстати, в файловой базе на платформе 8.3.25.1336 — прекрасно работает 🙂

 

Запущено два одинаковых фоновых задания в файловой базе

 

А что если в базе данных есть Регламентное задание с тем же именем метода и свойством ключа, которое уже запустило фоновое задание с таким же именем метода и ключом?

Я предполагал, что, коль скоро, регламентное задание запустило фоновое задание с именем метода "СерверныйМодуль.ИмяМетода" и ключом "Ключ", то при программном запуске такого же фонового задания будет сгенерировано исключение

ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");

Отнюдь, при выполнении этого кода ошибка не возникает – в системе будут работать два фоновых задания с одинаковым методом и ключом.

В синтаксис-помощнике про ключ регламентного задания написано вот что:

Прикладной идентификатор. Для регламентных заданий уникальность ключа не требуется. Ключ используется при запуске фонового задания на основе регламентного задания. В этом случае проверяется уникальность ключа для всех активных фоновых заданий, связанных с регламентными заданиями, имеющими одинаковый объект метаданных. Другими словами, уникальность ключа проверяется в пределах объекта метаданного регламентного задания. Если условие не выполняется задание не запускается. Возможность чтения и записи доступны только для администратора.

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

 

 

Выводы

В 1С:Предприятие свойство Ключ регламентного задания и фонового задания имеют различное назначение.

Свойство ключ регламентного задания служит для контроля запуска фонового задания по свойствам: РегламентноеЗадание.Метаданные + ИмяМетода + Ключ

Свойство ключ фонового задания служит для контроля запуска по свойства: ИмяМетода + Ключ

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

Проверялось на платформах: 8.3.24.1548, 8.3.25.1336

 

Публикации по теме:

has been added to your cart:
Оформление заказа