При проектировании бизнес-процессов в платформе 1С часто возникает задача: за несколько дней до наступления срока выполнения задачи сотрудником необходимо уведомить руководителя или выдать ему контрольную задачу. При этом важно соблюсти следующие условия:
Проанализируем особенности платформы 1С при работе с картой маршрута и рассмотрим наиболее эффективные способы решения этой задачи.
Попытка добавить задачу руководителю непосредственно на карту маршрута бизнес-процесса сталкивается с архитектурными ограничениями 1С:
Поведение точки слияния: если поместить задачу руководителю в параллельную ветку через точку разделения, платформа 1С остановит продвижение бизнес-процесса на точке слияния. Процесс будет ждать, пока не будут закрыты задачи во всех параллельных ветках. Если руководитель не закроет свою контрольную задачу, основной процесс застрянет, даже если исполнитель сделал свою работу.
Невозможность динамической модификации карты: добавить новую точку действия в карту маршрута для уже запущенного экземпляра бизнес-процесса платформенными средствами нельзя, если эта ветка не была заложена заранее при проектировании конфигурации.
Выясним, как реализовать контроль без изменения карты маршрута бизнес-процесса. Наиболее надежный вариант для нетиповых конфигураций — использование фонового или регламентного задания.
Разберем алгоритм по шагам:
Задача для руководителя. Эта задача не связана с картой маршрута текущего бизнес-процесса и не влияет на его статус.ПриЗавершении) добавляем код, который находит созданную для руководителя контрольную задачу и программно вызывает метод ВыполнитьЗадачу() или помечает ее отмененной.Посмотрим на пример реализации поиска задач и создания контрольного поручения в регламентном задании:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗадачаИсполнителя.Ссылка КАК ЗадачаСсылка,
| ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения,
| ЗадачаИсполнителя.Исполнитель КАК Исполнитель
|ИЗ
| Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
|ГДЕ
| НЕ ЗадачаИсполнителя.Выполнена
| И ЗадачаИсполнителя.СрокИсполнения МЕЖДУ &ТекущаяДата И &ПредельнаяДата";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("ПредельнаяДата", ТекущаяДата() + КоличествоДней * 86400);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
// Создание автономной задачи руководителю
ЗадачаКонтроля = Задачи.ЗадачаРуководителя.СоздатьЗадачу();
ЗадачаКонтроля.Дата = ТекущаяДата();
ЗадачаКонтроля.Наименование = "Контроль задачи: " + Строка(РезультатЗапроса.ЗадачаСсылка);
ЗадачаКонтроля.Предмет = РезультатЗапроса.ЗадачаСсылка;
ЗадачаКонтроля.Записать();
КонецЦикла;
Рассмотрим ситуацию, когда задача руководителя уже заложена в карту маршрута через точку разделения. Чтобы предотвратить зависание бизнес-процесса на точке слияния, при выполнении задачи основным сотрудником необходимо программно закрывать ветку руководителя.
В обработчик события перед или при выполнении задачи сотрудника добавляем код, который выполняет поиск активной задачи руководителя на этой же точке карты маршрута и вызывает для нее метод ВыполнитьЗадачу(). Это позволяет бизнес-процессу беспрепятственно пройти точку слияния и продолжить движение по маршруту.
Если разработка ведется на базе Библиотеки стандартных подсистем (БСП), разберем готовые механизмы, избавляющие от необходимости писать с нуля логику контроля:
Подсистема «Эскалация задач»: позволяет настраивать правила, по которым при приближении просрочки задача автоматически перенаправляется руководителю или создается контролирующее поручение без правки схемы карты маршрута.
Подсистема «Напоминания пользователя»: вместо создания полноценного объекта задачи, требующего закрытия, регламентное задание формирует запись в подсистеме системных напоминаний. У руководителя появляется стандартное всплывающее окно платформы 1С со ссылкой на задачу подчиненного. При завершении задачи сотрудником напоминание удаляется программно.
Проанализируем подход, который позволяет избежать создания лишних объектов в информационной базе. Вместо спама новыми задачами для руководителя на его рабочий стол выводится динамический список или виджет «Задачи подчиненных под угрозой просрочки».
В этом списке отображаются только те задачи, у которых остаток времени до дедлайна меньше заданного порога. Это полностью исключает проблему зависания бизнес-процессов и избавит от необходимости закрывать дублирующие задачи.