Получает массив объектов ФоновоеЗадание по заданному отбору. Получение заданий возможно только для администратора или пользователя, запустившего задания на выполнение.
Синтаксис
ПолучитьФоновыеЗадания(<Отбор>)Полное описание, параметры и ограничения
МенеджерФоновыхЗаданий.ПолучитьФоновыеЗадания (BackgroundJobsManager.GetBackgroundJobs)
МенеджерФоновыхЗаданий (BackgroundJobsManager)
ПолучитьФоновыеЗадания (GetBackgroundJobs)
Доступен, начиная с версии 8.1.
Синтаксис:
ПолучитьФоновыеЗадания(<Отбор>)
Параметры:
<Отбор> (необязательный)
Тип: Структура.
Структура, задающая отбор. Значениями структуры могут быть: УникальныйИдентификатор, Ключ, Состояние, Начало, Конец, Наименование, ИмяМетода, РегламентноеЗадание.
Если отбор не задан, получаются все задания.
Если выполняется отбор по состояниям, то в качестве значения Состояние структуры может быть или перечисление СостояниеФоновогоЗадания, если идет выборка только по одному состоянию, или массив перечислений СостояниеФоновогоЗадания, если идет выборка по нескольким состояниям.
Если выполняется отбор по регламентному заданию, то получаются все фоновые задания, которые были созданы по заданному регламентному заданию.
Отбор по Начало получает все фоновые задания, которые запущены после заданной даты.
Отбор по Конец получает все фоновые задания завершенные до заданной даты.
Возвращаемое значение:
Тип: Массив.
Описание:
Получает массив объектов ФоновоеЗадание по заданному отбору. Получение заданий возможно только для администратора или пользователя, запустившего задания на выполнение.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Разобрать устаревшие методы ожидания без бесконечного блокирования
На уже успешно завершённом собственном задании показываем старый объектный вызов. Старый вызов менеджера допускается только в отдельной пустой учебной базе без активных задач.
Где и как запускать
Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.
Подготовка
Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.
Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.
ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.
Нужны права запуска собственных фоновых заданий. Не включайте привилегированный режим для обхода отказа. Передаются только сериализуемые числа и строка режима.
Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.
Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.
Процедура Рассчитать(Количество, Цена, Режим) Экспорт
Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
КонецЕсли;
Если Цена < 0 Тогда
ВызватьИсключение "guide-owned: цена не может быть отрицательной";
КонецЕсли;
Если Режим = "Книга" Тогда
Сумма = Количество * Цена;
ИначеЕсли Режим = "Пакет" Тогда
Сумма = 0;
Для Номер = 1 По Количество Цикл
Сумма = Сумма + Цена;
КонецЦикла;
Иначе
ВызватьИсключение "guide-owned: неизвестный режим";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
Сообщение.Сообщить();
КонецПроцедуры
Процедура ВыполнитьПример() Экспорт
Параметры = Новый Массив;
Параметры.Добавить(3);
Параметры.Добавить(250);
Параметры.Добавить("Книга");
Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
Задание = ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: расчёт книги");
Сообщить("Собственный идентификатор: " + Строка(Задание.УникальныйИдентификатор));
Задание = Задание.ОжидатьЗавершенияВыполнения(3);
Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Сообщить("Таймаут: собственное задание ещё активно, успех не подтверждён");
Возврат;
КонецЕсли;
Если Задание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда
Сообщить("Устаревшее ожидание не запускается: собственное задание не завершилось успешно");
Возврат;
КонецЕсли;
Задание.ОжидатьЗавершения();
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Активные = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Если Активные.Количество() <> 0 Тогда
Сообщить("Общее устаревшее ожидание не запускается: обнаружены активные задания");
Возврат;
КонецЕсли;
Попытка
ФоновыеЗадания.ОжидатьЗавершения(3);
Сообщить("Устаревшие вызовы возвращены; для нового кода используйте ожидание собственного массива");
Исключение
Сообщить("Общее ожидание завершилось ошибкой: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедурыРазбор по шагам
Современным ограниченным ожиданием подтвердить завершение собственной задачи. При любом другом статусе немедленно выйти.
Вызвать старый метод объекта без аргументов только на уже завершённой задаче: у этого вызова нельзя задать таймаут.
Прочитать список активных задач в собственной изолированной базе. При наличии любой активной задачи не вызывать старый менеджер.
Старому менеджеру передать только таймаут 3. У него нет параметра массива своих задач, поэтому для новых решений выбирайте ОжидатьЗавершенияВыполнения.
Как проверить результат
Если собственная задача не завершилась успешно, оба старых вызова пропускаются.
Если появились активные задачи, старый менеджер пропускается. Запускайте урок без других сеансов: проверка списка и последующий вызов не атомарны.
Ожидаемый результат
Показаны реальные устаревшие сигнатуры и их ограничения, а не придуманный вариант ОжидатьЗавершения(Свои, 3).
На что обратить внимание
Оба старых метода не рекомендуются с 8.3.13. У объекта нет аргумента таймаута; не вызывайте его на активной задаче.
Старый менеджер не ограничен собственным массивом и может заметить чужую ошибку или новую задачу. Поэтому этот урок предназначен исключительно для отдельной учебной базы без других сеансов.
Не переносите общий старый вызов в рабочую команду ожидания расчёта. Современный урок с собственным массивом решает эту задачу точнее.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Запустить две собственные задачи и правильно ожидать массив
Считаем 1 × 250 и 3 × 250 отдельными заданиями. Ожидание менеджера может закончиться при изменении статуса только одного из них.
Где и как запускать
Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.
Подготовка
Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.
Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.
ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.
Нужны права запуска собственных фоновых заданий. Не включайте привилегированный режим для обхода отказа. Передаются только сериализуемые числа и строка режима.
Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.
Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.
Процедура Рассчитать(Количество, Цена, Режим) Экспорт
Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
КонецЕсли;
Если Цена < 0 Тогда
ВызватьИсключение "guide-owned: цена не может быть отрицательной";
КонецЕсли;
Если Режим = "Книга" Тогда
Сумма = Количество * Цена;
ИначеЕсли Режим = "Пакет" Тогда
Сумма = 0;
Для Номер = 1 По Количество Цикл
Сумма = Сумма + Цена;
КонецЦикла;
Иначе
ВызватьИсключение "guide-owned: неизвестный режим";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
Сообщение.Сообщить();
КонецПроцедуры
Процедура ВыполнитьПример() Экспорт
Свои = Новый Массив;
Количества = Новый Массив;
Количества.Добавить(1);
Количества.Добавить(3);
Для Каждого Количество Из Количества Цикл
Параметры = Новый Массив;
Параметры.Добавить(Количество);
Параметры.Добавить(250);
Параметры.Добавить("Книга");
Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
Свои.Добавить(ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: собственный пакет"));
КонецЦикла;
Обновлённые = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(Свои, 3);
Сообщить(Обновлённые.Количество() = 2);
Для Каждого Задание Из Обновлённые Цикл
Задание = Задание.ОжидатьЗавершенияВыполнения(3);
Отбор = Новый Структура("УникальныйИдентификатор", Задание.УникальныйИдентификатор);
Найденные = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Сообщить(Найденные.Количество() = 1);
Сообщить("Собственный UUID: " + Строка(Задание.УникальныйИдентификатор));
Сообщить("Состояние: " + Строка(Задание.Состояние));
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Для Каждого Сообщение Из Задание.ПолучитьСообщенияПользователю(Ложь) Цикл
Сообщить(Сообщение.Текст);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Создать две собственные задачи с разными UUID-ключами и сохранить только возвращённые объекты в массив.
Передать этот массив менеджеру ожидания. Получить обновлённый массив, не предполагая, что оба задания уже завершены.
Каждое своё задание обновить отдельным ограниченным ожиданием и запросить список с точным отбором по его UUID.
Печатать сообщение суммы только при Завершено. В файловой базе задачи могут выполняться последовательно, а не параллельно.
Как проверить результат
В обновлённом массиве две собственные задачи; точный отбор по UUID находит одну запись, если она ещё доступна в истории.
У успешно завершённых задач сообщения с суммами 250 и 750. Порядок завершения не закреплён; Активно после таймаута допустимо.
Ожидаемый результат
Собственный массив отделён от списка всех фоновых задач базы; ожидание любого изменения не перепутано с гарантией завершения всех.
На что обратить внимание
Таймаут 3 задан отдельно для менеджера и каждого объекта: суммарное время команды может быть больше трёх секунд.
Ожидание менеджера возвращается после первого изменения статуса; нельзя без проверки объявлять весь пакет успешным.
Здесь нет автоматического повтора, отмены остальных задач или удаления истории.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.