Про что статья
Среди объектов 1С есть РегламентноеЗадание и ФоновоеЗадание.
Регламентное задание, позволяющее выполнять определенную функциональность по расписанию.
Фоновое задание служит для выполнения асинхронных операций.
Фоновое задание может быть создано двумя путями:
- В результате работы Регламентного задания (запущено по расписанию);
- Программно методом ФоновыеЗадания.Выполнить().
Среди прочих свойств фонового задания есть свойство Ключ. Ключ задается разработчиком и должен быть уникальным среди активных фоновых заданий, имеющих такое же имя метода, как и у данного фонового задания. Но могут быть неактивные фоновые задания с совпадающими ключами.
Вот про это свойство и пойдет речь в данной статье.
Как работает свойство Ключ
Исходя из описания в синтаксис-помощнике можно сделать вывод, что невозможно создать два фоновых задания с одинаковым именем метода, и одинаковым (не пустым) ключом.
Действительно, если в клиент-серверной базе 1С написать код:
ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");
ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");
то, на второй строке будет сгенерировано исключение: Задание с таким значением ключа уже выполняется.
Кстати, в файловой базе на платформе 8.3.25.1336 - прекрасно работает :-)
Запущено два одинаковых фоновых задания в файловой базе
А что если в базе данных есть Регламентное задание с тем же именем метода и свойством ключа, которое уже запустило фоновое задание с таким же именем метода и ключом?
Я предполагал, что, коль скоро, регламентное задание запустило фоновое задание с именем метода "СерверныйМодуль.ИмяМетода" и ключом "Ключ", то при программном запуске такого же фонового задания будет сгенерировано исключение
ФоновыеЗадания.Выполнить("СерверныйМодуль.ИмяМетода", , "Ключ", "КакоетоНаименование");
Отнюдь, при выполнении этого кода ошибка не возникает – в системе будут работать два фоновых задания с одинаковым методом и ключом.
В синтаксис-помощнике про ключ регламентного задания написано вот что:
Прикладной идентификатор. Для регламентных заданий уникальность ключа не требуется. Ключ используется при запуске фонового задания на основе регламентного задания. В этом случае проверяется уникальность ключа для всех активных фоновых заданий, связанных с регламентными заданиями, имеющими одинаковый объект метаданных. Другими словами, уникальность ключа проверяется в пределах объекта метаданного регламентного задания. Если условие не выполняется задание не запускается. Возможность чтения и записи доступны только для администратора.
Получается, что фоновые задания, созданные регламентными заданиями и созданные программно контролируется по Ключу раздельно. Другими словами, вполне возможна ситуация, при которой один и тот же исполняемый метод будет работать в фоновом задании, запущенном регламентным заданием и созданном программно:
Выводы
В 1С:Предприятие свойство Ключ регламентного задания и фонового задания имеют различное назначение.
Свойство ключ регламентного задания служит для контроля запуска фонового задания по свойствам: РегламентноеЗадание.Метаданные + ИмяМетода + Ключ
Свойство ключ фонового задания служит для контроля запуска по свойства: ИмяМетода + Ключ
Таким образом, при программном запуске фонового задания, платформа не будет контролировать, что регламентным заданием уже запущено фоновое задание с таким же методом и ключом.
Проверялось на платформах: 8.3.24.1548, 8.3.25.1336