Как настроить контроль приближения срока задачи руководителем в бизнес-процессе 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При проектировании бизнес-процессов в платформе 1С часто возникает задача: за несколько дней до наступления срока выполнения задачи сотрудником необходимо уведомить руководителя или выдать ему контрольную задачу. При этом важно соблюсти следующие условия:

  1. Основной бизнес-процесс не должен останавливаться или зависать в ожидании действий руководителя.
  2. Если сотрудник завершает задачу вовремя, бизнес-процесс должен беспрепятственно двигаться дальше.
  3. Если сотрудник задерживает выполнение, у руководителя должна появляться задача или уведомление для контроля.

Проанализируем особенности платформы 1С при работе с картой маршрута и рассмотрим наиболее эффективные способы решения этой задачи.

Ограничения платформы 1С при работе с картой маршрута

Попытка добавить задачу руководителю непосредственно на карту маршрута бизнес-процесса сталкивается с архитектурными ограничениями 1С:

Поведение точки слияния: если поместить задачу руководителю в параллельную ветку через точку разделения, платформа 1С остановит продвижение бизнес-процесса на точке слияния. Процесс будет ждать, пока не будут закрыты задачи во всех параллельных ветках. Если руководитель не закроет свою контрольную задачу, основной процесс застрянет, даже если исполнитель сделал свою работу.

Невозможность динамической модификации карты: добавить новую точку действия в карту маршрута для уже запущенного экземпляра бизнес-процесса платформенными средствами нельзя, если эта ветка не была заложена заранее при проектировании конфигурации.

Вариант 1. Создание автономной задачи через регламентное задание

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

Разберем алгоритм по шагам:

  1. Настраиваем регламентное задание, которое запускается по расписанию (например, один раз в сутки).
  2. В процедуре регламентного задания выполняем запрос к активным задачам исполнителей. Выбираем задачи, у которых до наступления срока исполнения осталось $X$ дней или меньше.
  3. Программно создаем отдельный объект Задача для руководителя. Эта задача не связана с картой маршрута текущего бизнес-процесса и не влияет на его статус.
  4. В обработчик события закрытия основной задачи исполнителем (например, ПриЗавершении) добавляем код, который находит созданную для руководителя контрольную задачу и программно вызывает метод ВыполнитьЗадачу() или помечает ее отмененной.

Посмотрим на пример реализации поиска задач и создания контрольного поручения в регламентном задании:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЗадачаИсполнителя.Ссылка КАК ЗадачаСсылка,
    |	ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения,
    |	ЗадачаИсполнителя.Исполнитель КАК Исполнитель
    |ИЗ
    |	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    |ГДЕ
    |	НЕ ЗадачаИсполнителя.Выполнена
    |	И ЗадачаИсполнителя.СрокИсполнения МЕЖДУ &ТекущаяДата И &ПредельнаяДата";

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("ПредельнаяДата", ТекущаяДата() + КоличествоДней * 86400);

РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
    // Создание автономной задачи руководителю
    ЗадачаКонтроля = Задачи.ЗадачаРуководителя.СоздатьЗадачу();
    ЗадачаКонтроля.Дата = ТекущаяДата();
    ЗадачаКонтроля.Наименование = "Контроль задачи: " + Строка(РезультатЗапроса.ЗадачаСсылка);
    ЗадачаКонтроля.Предмет = РезультатЗапроса.ЗадачаСсылка;
    ЗадачаКонтроля.Записать();
КонецЦикла;

Вариант 2. Программное прохождение точки слияния

Рассмотрим ситуацию, когда задача руководителя уже заложена в карту маршрута через точку разделения. Чтобы предотвратить зависание бизнес-процесса на точке слияния, при выполнении задачи основным сотрудником необходимо программно закрывать ветку руководителя.

В обработчик события перед или при выполнении задачи сотрудника добавляем код, который выполняет поиск активной задачи руководителя на этой же точке карты маршрута и вызывает для нее метод ВыполнитьЗадачу(). Это позволяет бизнес-процессу беспрепятственно пройти точку слияния и продолжить движение по маршруту.

Вариант 3. Использование подсистем БСП

Если разработка ведется на базе Библиотеки стандартных подсистем (БСП), разберем готовые механизмы, избавляющие от необходимости писать с нуля логику контроля:

Подсистема «Эскалация задач»: позволяет настраивать правила, по которым при приближении просрочки задача автоматически перенаправляется руководителю или создается контролирующее поручение без правки схемы карты маршрута.

Подсистема «Напоминания пользователя»: вместо создания полноценного объекта задачи, требующего закрытия, регламентное задание формирует запись в подсистеме системных напоминаний. У руководителя появляется стандартное всплывающее окно платформы 1С со ссылкой на задачу подчиненного. При завершении задачи сотрудником напоминание удаляется программно.

Вариант 4. Интерактивный рабочий стол руководителя

Проанализируем подход, который позволяет избежать создания лишних объектов в информационной базе. Вместо спама новыми задачами для руководителя на его рабочий стол выводится динамический список или виджет «Задачи подчиненных под угрозой просрочки».

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

← На главную