Время на прочтение: 7 мин.

Процент выполнения задачи или «Как понять, что происходит»

При работе в ПланФиксе иногда мне не хватает инструмента, который бы показывал текущее положение задачи — например, сколько уже сделано в рамках задачи, или сколько осталось до планируемого завершения.

Да, у задачи есть атрибуты, такие как статус, дата начала и завершения. По статусу видно, в работе находится задача или уже выполнена. А при наличии сроков автоматически отображается количество дней до завершения.

Но так как в ПланФиксе можно создавать свои статусы, в моем аккаунте со временем их стало больше. И не все они получились с «говорящими названиями».

Что же делать? Как одним взглядом понять, на каком интервале находится задача на текущий момент?

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

Для этого нашел два способа:

  1. Первый — это присвоить каждому статусу соответствующее значение процента
  2. Второй — это определять текущее положение задачи в интервале времени по его длительности

Мне понравились оба варианта. Осталось проверить, что же на практике будет удобнее. Далее привожу пример выполненной настройки с демонстрацией работы готового решения.

Итак, начну с первого способа — процент по статусу задачи


В качестве примера, для настройки беру стандартный шаблон задачи со стандартными статусами — «новая», «в работе», «выполненная» и «завершенная». И первым делом для каждого статуса присваиваю соответствующий процент:

  • Новая — пусть будет 25% (создали задачу — уже не плохо)
  • В работе — поставим 50% (как говорят: хорошее начало — половина дела)
  • Выполненная — 75% (отлично, осталось только проверить)
  • Завершенная — 100% (задача принята и сделана на все 100)

Перехожу к редактированию шаблона задачи и добавляю в нём новое поле.

Тип поля: Вычисляемое поле
Название: Процент по статусу
Тип результата: Число
Кол-во десятичных знаков: 1 (так наглядней)

Для вычисления процента воспользуюсь следующей формулой:

ЕСЛИ(условие;значение_да;значение_нет)

где:

  • Условие — это «статус» задачи
  • Значение_да — это значение процента, которое соответствует статусу
  • Значение_нет — здесь вставляем эту же формулу, но для следующего статуса и так далее..

В итоге получается такая комбинация:

ЕСЛИ({{Задача.Статус}}="Новая";"25";ЕСЛИ({{Задача.Статус}}="В работе";"50";ЕСЛИ({{Задача.Статус}}="Выполненная";"75";ЕСЛИ({{Задача.Статус}}="Завершенная";"100";""))))
Prnt.sc_1. Процент по статусу

Поле нужно добавить в шаблон, например в панель «дополнительные параметры», и сохранить изменения.

Далее, для наглядности, процент выношу в дополнительную область карточки задачи (Prnt.sc_2).

Prnt.sc_2. Карточка задачи

Готово, перехожу к тестированию.

Gif_1

Работает! При изменении статуса подставляется соответствующий процент. Такой способ вычисления процента после доработки можно использовать для любых статусов.

Второй способ — чуть сложнее, но поинтереснее


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

Процент = (фактическая длительность/длительность) * 100

Фактическая длительность определяется так:

{{Системные.Сегодня}}-{{Задача.Дата начала}}

Общая длительность:

{{Задача.Дата окончания}}-{{Задача.Дата начала}}

Объединяю и получаю нужную формулу:

({{Системные.Сегодня}}-{{Задача.Дата начала}})/({{Задача.Дата окончания}}-{{Задача.Дата начала}})*100

Начинаю тестировать и сталкиваюсь со следующим нюансом:

  • формула работает корректно, только если текущая дата находится в этом же отрезке времени — между указанными датами. Но если планируемые сроки еще не настали, либо задача уже пару дней как просрочена, то результаты не ахти.
  • если одна из дат не указана, то формула работать не будет, система выдаст — «error». Для работы формулы наличие дат — обязательно.

Поэтому добавляю корректирующие условия:

  1. Если планируемая дата начала еще не наступила, то процент не должен считаться
  2. Если срок уже истек, то значение не должно превышать 100%
  3. Если задачу уже завершили вручную, то тоже должно быть 100%
  4. Нужно как то избавиться от ошибки.

Первые три пункта получилось довольно быстро решить. А вот от ошибки никак не получалось избавиться. В итоге идея мне пришло во сне, на следующий день. Чтобы убрать сообщение «error», которая возникает при отсутствии дат, в формулу я добавил корректирующую «1». И все условия собрал в такую конструкцию:

ЕСЛИ({{Задача.Статус}}="Завершенная";"100";ЕСЛИ(((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/((1+{{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))100<100;ЕСЛИ(((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/((1+{{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))100<0;"";((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/(1+({{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))*100);"100"))

Prnt.sc_3. Процент по длительности

Сохраняюсь и радуюсь результату 🙂

Gif_2

Так была создана конфигурация версии Lite, установить которую можно по ссылке.

Только я подумал, что задачка решена, как возникает следующая идея


Первые два метода подходят для оценки частных задач. А что, если рассмотреть вариант, когда выполнение задачи зависит от стадий выполнения ее подзадач?

Идея зацепила — пошел гуглить. В итоге нашел формулу, которая как раз должна для этого подойти:

Процент выполнения задачи = (сумма процентов подзадач)/(количество подзадач)

С виду — вроде не сложно. Приступим.

Для подсчета суммы процентов подзадач создаю новое поле — «Сумма подзадач» и настраиваю его как в скриншоте — Prnt.sc_4. В качестве источника тут нужно указать один из вариантов, созданных ранее — процент по статусу или по длительности.

Prnt.sc_4. Сумма процентов подзадач

Теперь нужно вычислить количество подзадач. Для этого понадобится еще два новых поля.

  • Счетчик подзадач — создается на основе числового поля.
    • чекбоксы «Запрет на дублирование» и «Автонумерация» должны быть отключены (Prnt.sc_5).
    • Количество десятичных знаков — 0 (Prnt.sc_5).
    • В шаблоне задачи по умолчанию ставим значение «1» (Prnt.sc_6).
Prnt.sc_5. Счетчик подзадач
Prnt.sc_6. Шаблон задачи
  • Количество подзадач. Чтобы посчитать, сколько у задачи подзадач, добавим поле «Сумма подзадач» (Prnt.sc_7)
    • в качестве источника выберем «Счетчик»
    • суммирую «Все подзадачи», без дополнительных условий
    • включаем чекбокс «Только непосредственные подзадачи»
Prnt.sc_7. Количество подзадач

Осталось вычислить основной процент. Добавляю очередное вычисляемое поле «Показатель, %» с формулой:

{{Задача.Сумма процентов подзадач}}/{{Задача.Количество подзадач}})

Prnt.sc_8. Показатель процента

Теперь показатель процента главной задачи зависит от процентов выполнения ее подзадач. Для удобства назову эту формулу — формулой «среднего процента выполнения».

В этом решении есть минус — нужно вручную указывать источник для суммы процентов подзадач (Prnt.sc_4), а хочется, чтобы все было автоматически.

И тут я словил инсайт!


Что, если объединить все варианты в одну конфигурацию, а средний процент вычислять не только для задачи, но и для ее подзадач? Хорошо бы при этом еще сократить количество полей.

Думал я над решением, думал и в итоге собрал такую конструкцию:

ЕСЛИ({{Задача.Есть активность}}="Нет";ЕСЛИ({{Общие.Считать проценты по длительности}}="Нет";ЕСЛИ({{Задача.Статус}}="Новая";"25";ЕСЛИ({{Задача.Статус}}="В работе";"50";ЕСЛИ({{Задача.Статус}}="Выполненная";"75";ЕСЛИ({{Задача.Статус}}="Завершенная";"100";""))));ЕСЛИ({{Задача.Статус}}="Завершенная";"100";ЕСЛИ(((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/((1+{{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))100<100;ЕСЛИ(((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/((1+{{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))100<0;"";((1+{{Системные.Сегодня}})-(1+{{Задача.Дата начала}}))/(1+({{Задача.Дата окончания}})-(1+{{Задача.Дата начала}}))*100);"100")));({{Задача.Сумма процентов подзадач}}/{{Задача.Количество подзадач}}))


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

На базе этой формулы собрана конфигурация версии Functional. Установить ее можно по ссылке.

Добавить комментарий