
В этой статье рассмотрим работу с задачами в бизнес-процессах. На что стоит обратить внимание, как произвести нестандартные действия и т.д.
Содержание
Создание задачи из бизнес-процесса
Задача в бизнес-процессе создается одноименным действием. На какие же параметры стоит обратить внимание?
- Остановить процесс на время выполнения задачи – Да/Нет. Если установить значение Да, то процесс не пойдет дальше пока задача не будет закрыта. Когда она закроется процесс “запомнит” дату завершения и пользователя, закрывшего задачу, и начнет выполнять следующие действия. При установке значения Нет процесс не станет дожидаться закрытия задачи, а сразу приступит к выполнению последующих действий. Важно отметить, что при таком развитии событий, в процессе не останется информации о завершении задачи.
Если вам нужно поменять стадию сделки по завершению задачи, то выставьте в создаваемой задаче параметр Остановить процесс на время выполнения задачи, а после установите действие по смене статуса.
- Крайний срок – здесь можно воспользоваться функциями:
- dateadd добавление указанного значения к дате
- workdateadd добавляет рабочие дни, часы, минуты к указанной дате
- addworkdays добавляет N рабочих дней к указанной дате
Например, добавим 3 рабочих дня к текущей дате (дате на момент создания задачи).
{{=workdateadd({=System:Now}, ‘3d’)}}
- Описание задачи – здесь необходимо внести описание задачи. Можно пользоваться различными тегами, чтобы форматировать текст на свое усмотрение. Например, выделить цветом текст в задаче или написать курсивом.
- Цвет текста: [color=green] текст [/color] – зеленый цвет шрифта, можно подставить любой;
- Жирность: [b] текст [/b];
- Курсив: [i] текст [/i];

- Разрешить ответственному менять крайний срок – Да/Нет. Если в бизнес-процессе сроки имеют значение, то стоит ограничить Ответственного в варьировании дат;
- Включить учет времени по задаче – Да/Нет. Если ваша компания пользуется учетом рабочего времени, то установите Да, в ином случае лучше поставить Нет, дабы не запутать сотрудников лишними кнопками.
- Проконтролировать задачу после завершения – Да/Нет. При установке Да когда Ответственный завершит задачу, она не закроется, пока Постановщик не примет ее. Загвоздка в том, что в сделке такая задача “на контроле” выглядит как завершенная и сотрудники могут не понимать почему процесс не движется дальше. А процесс ждет пока задача будет полностью завершена, если стоит параметр Остановить процесс на время выполнения задачи.

- Привязать к текущей сущности CRM – Да/Нет. Этот параметр нужен, если вы хотите видеть эту задачу в сделке или другой сущности, из которой создаете задачу;
- Элементы CRM – здесь можно указать конкретные сущности, а также элементы из текущего бизнес-процесса.
- Лид ‘L_’&{{ID}}
- Контакт ‘C_’&{{ID}}
- Сделка ‘D_’&{{ID}}
- Компания ‘CO_’&{{ID}}
Пример добавления Компании к Задаче: = ‘CO_’&{{Компания}}
Для смарт-процессов такого префикса еще нет, но есть временное решение:
- Берем ID смарт-процесса, на моем примере 185

- Конвертируем с помощью любого сервиса данное число в шестнадцатеричную систему. В случае с ID=185 получаем значение B9.

- К полученному значению дописываем “T” в начале. То есть получаем – TB9.
Данный код используем в привязке. Для моего примера получается:
=’TB9_’&{{ID}}
Также этот код можно получить с помощью Входящего вебхука и метода crm.enum.ownertype

Сохраните вебхук, нажмите Выполнить. В результатах найдите нужный смарт-процесс. Нам нужен [SYMBOL_CODE_SHORT]

- Чек-лист – с помощью этого пункта можно добавить чек-лист в задачу, для добавления дополнительного пункта нажмите кнопку Добавить.

Уведомление на задачу
Если в действии Задача мы устанавливаем Остановить процесс на время выполнения задачи, то уведомление со ссылкой после задачи не сработает, т.к. она уже завершится, когда придет уведомление. Перед задачей тоже смысла нет, т.к. мы еще не знаем ID задачи и не можем указать ссылку на нее.
Поэтому сделаем Задачу и Уведомление параллельно. Важно, чтобы сначала создавалась Задача, а потом уже Уведомление, поэтому Задачу размещаем слева.

В тексте уведомления в таком случае можно уже вставить ссылку непосредственно на Задачу: Вам поставлена [url=/company/personal/user/{=User: ID}/tasks/task/view/ {=A24388_98030_17242_51455: TaskId}/] новая задача[/url].
Где {=A24388_98030_17242_51455:TaskId} – ID задачи из вставки значения дополнительных результатов.

Проверка статуса задачи
Проверить статус задачи можно с помощью дополнительных результатов.
Действие Задача вернет данные по пользователю, завершившему задачу, и по дате завершения только в том случае, если в настройках действия Задача у Вас активен параметр Остановить процесс на время выполнения задачи.

В противном случае процесс уходит дальше и не ждет никакой информации от такой задачи, а это означает, что с помощью дополнительных результатов нам не узнать закрыта она или нет.
В коробочной версии мы можем воспользоваться действием PHP код.
$rootActivity = $this->GetRootActivity();
\CModule::IncludeModule('tasks');
$taskId = intval({=A29483_97156_51749_92339:TaskId});
if ($taskId > 0)
{
$obTask = new \Bitrix\Tasks\Item\Task($taskId, 66);
$taskInfo = $obTask->getData();
}
else
{
$taskInfo['STATUS'] = 'error';
}
$rootActivity->SetVariable('TaskStatus', $taskInfo['STATUS']);
- {=A29483_97156_51749_92339: TaskId} – ID задачи, взятой из дополнительных результатов после создания задачи в бизнес-процессе;
- TaskStatus – переменная типа строка, заранее созданная в бизнес-процессе;
- [STATUS] – поле статус в задаче (можно получать и другие поля);
- TITLE – название задачи;
- DATE_START – дата старта;
- DEADLINE – крайний срок;
- PRIORITY – приоритет;
- MARK – оценка;
- CREATED_BY – постановщик;
- RESPONSIBLE_ID – ответственный;
- GROUP_ID – рабочая группа.
В результате в переменную TaskStatus запишется цифра, обозначающая один из возможных статусов:
- Ждет выполнения = 2;
- В работе = 3;
- Ждет контроля = 4;
- Завершена = 5;
- Отложена = 6;
Далее с помощью конструкции Условие мы можем проверить закрыта задача или нет, а именно равен ли статус 5.


В Битриксе появилось действие Чтение полей задачи, с помощью него также теперь можно проверить статус и получить другие поля.

Добавление тега к задаче
Действие PHP код после создания задачи, либо параллельно, если процесс ждет завершения задачи.
Например, добавим к созданной задаче тег ТКП.

$rootActivity = $this->GetRootActivity();
\CModule::IncludeModule('tasks'); // подключаем модуль задач
$arFields = Array(
"TASK_ID" => {=A51937_98794_83473_67621:TaskId}, // Ид нашей задачи
"USER_ID" => substr('{{Константы глобальные: Коммерческий директор}}', 5), // $id юзера, от которого изменяем
"NAME" => "ТКП",
);
$obTaskTags = new CTaskTags;
$ID = $obTaskTags->Add($arFields);
Закрытие задачи
Закрыть Задачу также не получится стандартными средствами, поэтому опять же воспользуемся действием PHP код.
$rootActivity = $this->GetRootActivity();
\CModule::IncludeModule('tasks'); // подключаем модуль задач
$taskId = intval({=A29483_97156_51749_92339:TaskId}); // Ид нашей задачи
$userId = substr('{{Ответственный}}', 5); // $id юзера, от которого закрываем
if ($taskId > 0)
{
$oTaskItem = CTaskItem::getInstance($taskId, $userId);
$oTaskItem->complete(); // закрываем задачу
}
else
{
$taskInfo['STATUS'] = 'error';
}
$rootActivity->SetVariable('TaskStatus', $taskInfo['STATUS']);
- {=A29483_97156_51749_92339: TaskId} – ID задачи, взятой из дополнительных результатов после создания задачи в бизнес-процессе;
- {{Ответственный}} – можно подставить любого пользователя, от которого хотите закрыть задачу. Обратите внимание, что здесь также действуют права на задачи. Т.е. задачу может закрыть Постановщик, Ответственный, Соисполнитель или Администратор. Если вы создаете задачу из сделки, то Ответственный по сделке не всегда равен Ответственному по задаче, смотрите эти поля в действии создания задачи.
Завершить задачу, созданную на определенной стадии
В битриксе недавно появилось действие Завершить задачу, с помощью которого можно закрыть задачи, созданные на определенной стадии.

Т.е. например, когда вы перешли на следующий статус, можно добавить это действие, чтобы закрыть задачи, созданные на предыдущем статусе.
Возобновление задачи
Действие PHP код.
$rootActivity = $this->GetRootActivity();
\CModule::IncludeModule('tasks'); // подключаем модуль задач
$taskId = intval({=A51937_98794_83473_67621:TaskId}); // Ид нашей задачи
$userId = substr('{{Константы глобальные: Коммерческий директор}}', 5); // $id юзера, от которого возобновляем задачу
if ($taskId > 0)
{
$oTaskItem = CTaskItem::getInstance($taskId, $userId);
$oTaskItem->startExecution(); // возобновляем задачу
}
else
{
$taskInfo['STATUS'] = 'error';
}
$rootActivity->SetVariable('TaskStatus', $taskInfo['STATUS']);
Вера, огромное вам спасибо! Вы профи! Я только благодаря вам настолько всё автоматизировал, что глаз радуется. Подскажите, пожалуйста. Я сейчас столкнулся с тем, что мне надо чтобы несколько тегов ставились к автоматически созданной задачи по бизнес-процессу. Используя ваш код в этой статье, я добавляю только один тег. Вы не знаете, что надо дописать и возможно ли это, чтобы добавить второй тег?
Даниил, здравствуйте! Благодарю за теплые слова) Рада, что у вас все получается. Про несколько тегов есть информация в справке по API битрикса https://dev.1c-bitrix.ru/api_help/tasks/classes/ctasks/addtags.php
Вера, добрый день! Скажите, пожалуйста, как можно выбирать проект при постановке задачи? Делаю БП, который по заполнению обязательных полей пользователем формирует задачу. А вот как выбрать проект, не понимаю. ps Спасибо за действительно полезные статьи.
Иван, здравствуйте! Рада, что вам оказались полезны мои статьи)
При создании задачи в БП можно указать существующий проект.
Спасибо за ответ! Поясню чуть подробнее. Пользователь из ленты запускает процесс, вводит в поля необходимые значения, как итог – формируется задача, описание которой содержит введенные в полях данные. И проект, как раз, нужно либо иметь возможность явно указать во время заполнения полей, либо БП должен подставлять нужный, основываясь на введенных данных. В настройках поля подобного не вижу, нужно как-то в действиях самого БП подставлять. Все это из-за отсутствия в Б24 (облаке) обязательных полей в шаблонах задач (общие для всего портала не подходят).
1. Если проекты относятся к отделам, то определять отдел по сотруднику и соответственно проект выставлять.
2. Если проекты по другим тематикам, то можно запрашивать проект при запуске процесса (т.е. создать поле типа список с названиями проектов, и пользователь будет выбирать), далее в самом БП присваивать ID проекта переменной по условию на основе списка, и уже эту переменную вставлять в качестве проекта в задачу.
Это все теоретически, надо тестировать) и побольше логов, чтобы на каждом шагу понимать, что получается.
Добрый день! Скажите, пожалуйста, что нужно сделать, чтобы добавить подпункты в чек-лист задачи, создаваемой из конструктора бизнес-процесса?
Алена, здравствуйте! В самом конце действия “Поставить задачу” есть поле Чек-лист, для добавления еще одного пункта нажмите на кнопку “Добавить” под полем.
Добрый день! Вера, спасибо, но я не совсем об этом, я хотела спросить как выстроить структуру чек листа:
1. Пункт
1.1 Подпункт
1.2 Подпункт
2. Пункт
Этот функционал очень удобен в задачах – когда выполняются подпункты чек-листа основной пункт автоматически становиться выполненным
Но реализовать такой многоуровневый чек-лист в задачах из конструктора бизнес-процесса не получается
Алена, в стандартном действии такого функционала нет. Возможно в маркете есть нужная вам реализация.
Добрый день, я создал шаблон задачи и хочу его добавить в конструкторе бизнес-процессов, как это сделать?
Алексей, здравствуйте! Это разный функционал. Шаблоны задач используются в интерфейсе самих задач для быстрого создания типовых, повторяющихся задач. В бизнес-процессе есть специальное активити (действие) “Поставить задачу”.
это понятно, просто не хватает инструментов чтоб настроить чек-листы в стандартном решении
Но ведь в стандартном действии “Поставить задачу” есть чек-лист в самом конце.
Да, один чек лист только, а задумка с несколькими чек-листами)
Ну тогда либо свое действие писать (если коробка), либо в маркете поискать подобные активити)
Приветствую
необходимо настроить уведомление при просроченной задаче
Как правильно считать ее статус?
Здравствуйте! Обычно уведомления по просроченной задаче и так приходят. Но можно параллельно с задачей настроить запрос статуса через определенное время или даже цикл.
Вера, добрый день! Можно ли из коробки или доработать, чтобы из csv импортировать подзадачу в иерархию Проект-задача-подзадача? При выгрузке просто три пробела перед подзадачей выставляются. А как подзадачу в нужно место загрузить?
Борис, добрый вечер! Стандартный импорт позволяет только проект указать. Разве что через SQL-запрос попробовать.
Вера, здравствуйте! Пытаюсь настроить задачу и уведомление. Получается, что в таком варианте уведомление всегда идет ответственному за сделку, а если задача поставлена не ему, можно как-то сделать так, чтобы уведомление шло исполнителю задачи?
Степан, здравствуйте! В параметре Получатель уведомления вы можете поставить кого угодно, в том числе ответственного по задаче.
Добрый день! Что нужно прописать в строках “Начало” и “Крайний срок” что бы задача началась через N количество дней в 9:00 и крайний срок в этот же день был в 18:00 ?
Виталий, здравствуйте! Начало {{=dateadd({=System:Date},”1d 9h”)}}. Крайний срок {{=dateadd({=System:Date},”1d 18h”)}}. Количество дней можно установить какое угодно.
Спасибо большое!
Уточните пожалуйста, а как правильно в БП на создании задачи прикрепить файл из поля в сделке?
Денис, в параметре Load files из вставки значения вставить нужное поле сделки.
Добрый день!
Что можно сделать, в случае, когда нужно выполнить действия в момент начала выполнения задачи.
То есть как подписаться на старт выполнения задачи.
Здравствуйте! Можно настроить робота в статусах задачи.