ЗадачаОбъект.<Имя задачи>.ВыполнитьЗадачу

Методы · ExecuteTask

Выполняет задачу. Для задачи свойство Выполнена устанавливается равным Истина и она записывается. При выполнении этого метода бизнес-процесс, породивший задачу, получает соответствующую нотификацию и выполняет переход к следующей точке маршрута бизнес-процесса. В процессе выполнения этого метода происходит вызов событий ПередВыполнением и ПриВыполнении у задачи и соответствующей ей точке маршрута.

Синтаксис

ВыполнитьЗадачу()

Примеры платформы

Если ТекущаяЗадача.ПроверитьВыполнение() Тогда
    ТекущаяЗадача.ВыполнитьЗадачу();
КонецЕсли
Полное описание, параметры и ограничения

ЗадачаОбъект.<Имя задачи>.ВыполнитьЗадачу (TaskObject.<Task name>.ExecuteTask)

ЗадачаОбъект.<Имя задачи> (TaskObject.<Task name>)

ВыполнитьЗадачу (ExecuteTask)

Доступен, начиная с версии 8.0.

Синтаксис:
ВыполнитьЗадачу()
Описание:

Выполняет задачу. Для задачи свойство Выполнена устанавливается равным Истина и она записывается. При выполнении этого метода бизнес-процесс, породивший задачу, получает соответствующую нотификацию и выполняет переход к следующей точке маршрута бизнес-процесса. В процессе выполнения этого метода происходит вызов событий ПередВыполнением и ПриВыполнении у задачи и соответствующей ей точке маршрута.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Пример:

Если ТекущаяЗадача.ПроверитьВыполнение() Тогда
ТекущаяЗадача.ВыполнитьЗадачу();
КонецЕсли

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Пройти собственный учебный маршрут и отменить весь опыт

Старт порождает задачу точки действия. Находим её только по своему новому процессу, выполняем и перечитываем завершённый процесс. Всё происходит внутри отменяемой учебной транзакции.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. В этой отдельной пустой конфигурации Учебная85 добавьте Задачи → УчебнаяЗадача: длина номера 9, тип Строка, автонумерация; наименование длиной 100. Добавьте реквизит Комментарий (Строка, 100), без проверки заполнения.

  7. Добавьте Бизнес-процессы → УчебныйПроцесс: длина номера 9, тип Строка, автонумерация, реквизит Комментарий (Строка, 100), без проверки заполнения. В свойстве Задача выберите УчебнаяЗадача.

  8. Карта маршрута: одна точка старта Старт → одна одиночная точка действия ПодготовитьКнигу → одна точка завершения Финиш. Соедините их стрелками; в представлении точки действия укажите Подготовить учебную книгу.

  9. Адресацию задач, групповые/условные/вложенные точки и обработчики маршрута для этой задачи не добавляйте. Модули задачи и процесса, подписки и внешние действия должны быть пустыми. Обновите конфигурацию базы данных.

  10. Все имена здесь относятся к новым учебным объектам, не к рабочей КА2/УНФ/УТ/БП. Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

Если Метаданные.БизнесПроцессы.Найти("УчебныйПроцесс") = Неопределено
    Или Метаданные.Задачи.Найти("УчебнаяЗадача") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебные процесс, задачу и карту маршрута";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Нельзя запускать внутри чужой транзакции";
КонецЕсли;
СсылкаПроцесса = БизнесПроцессы.УчебныйПроцесс.ПолучитьСсылку(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
    Процесс = БизнесПроцессы.УчебныйПроцесс.СоздатьБизнесПроцесс();
    Процесс.УстановитьСсылкуНового(СсылкаПроцесса);
    Процесс.Дата = Дата(2026, 10, 3, 10, 0, 0);
    Процесс.Комментарий = "Только собственный учебный маршрут";
    Процесс.Записать();
    Процесс.Старт(БизнесПроцессы.УчебныйПроцесс.ТочкиМаршрута.Старт);
    Процесс.Прочитать();
    Сообщить(Процесс.Стартован);
    Сообщить(Не Процесс.Завершен);
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    УчебныеЗадачи.Ссылка КАК Ссылка
    |ИЗ Задача.УчебнаяЗадача КАК УчебныеЗадачи
    |ГДЕ УчебныеЗадачи.БизнесПроцесс = &Процесс";
    Запрос.УстановитьПараметр("Процесс", СсылкаПроцесса);
    Найденные = Запрос.Выполнить().Выгрузить();
    Если Найденные.Количество() <> 1 Тогда
        ВызватьИсключение "Ожидается ровно одна собственная задача одиночной точки; проверьте учебную карту и адресацию";
    КонецЕсли;
    СсылкаЗадачи = Найденные.Получить(0).Ссылка;
    Задача = СсылкаЗадачи.ПолучитьОбъект();
    Если Задача = Неопределено Тогда
        ВызватьИсключение "Порождённая учебная задача не найдена";
    КонецЕсли;
    Если Задача.БизнесПроцесс <> СсылкаПроцесса Тогда
        ВызватьИсключение "Нельзя выполнять задачу чужого процесса";
    КонецЕсли;
    Сообщить(Не Задача.Выполнена);
    Сообщить(Задача.ТочкаМаршрута = БизнесПроцессы.УчебныйПроцесс.ТочкиМаршрута.ПодготовитьКнигу);
    Задача.ВыполнитьЗадачу();
    Задача.Прочитать();
    Процесс.Прочитать();
    Сообщить(Задача.Выполнена);
    Сообщить(Процесс.Завершен);
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(СсылкаПроцесса.ПолучитьОбъект() = Неопределено);
Сообщить(СсылкаЗадачи.ПолучитьОбъект() = Неопределено);

Разбор по шагам

  1. Перед запуском точно выполните подготовку карты: один Старт, одна одиночная точка действия, один Финиш, без адресации и обработчиков.

  2. Назначаем новый UUID процессу, записываем внутри своей транзакции и вызываем Старт с конкретной точкой, не устанавливаем флаг вручную.

  3. Запрос параметризован ссылкой только что созданного процесса. Чужие задачи не выбираются; при количестве не 1 выполнение останавливается.

  4. ПолучитьОбъект проверяется на отсутствие, а принадлежность процессу проверяется ещё раз перед ВыполнитьЗадачу.

  5. ВыполнитьЗадачу записывает выполнение и уведомляет процесс. Прочитать обновляет оба экземпляра, затем транзакция намеренно отменяется.

Как проверить результат

  1. Шесть сравнений в транзакции Истина: старт, ожидание, невыполненная собственная задача нужной точки, выполненная задача, завершённый процесс.

  2. После отката ещё три Истина: транзакция закрыта, процесс и порождённая задача отсутствуют.

  3. В этом упражнении нет фиксации, отправки письма, файла или доступа к рабочим задачам.

Ожидаемый результат

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

На что обратить внимание

  1. Только отдельная пустая учебная база. В рабочем процессе события могут записывать другие данные и обращаться во внешние системы.

  2. ПроверитьВыполнение предназначен для проверки условий автоматизированного исполнения; без обработчиков он Ложь. Здесь явно выполняется учебная задача, а не реализуется производственный робот.

  3. Откат не отменяет внешние действия. Пустые модули и отсутствие подписок — обязательная часть подготовки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.