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