Шаблоны проектов в ERPNext: Project Template и Task
АйТи Фреш
IT-аутсорсинг и бизнес

Типовой дом за пять минут: шаблоны проектов и задач в ERPNext для тех, кто строит одно и то же

Автор: , директор ООО «АйТи-Фреш» · · ~15 мин чтения
Деревянный макет-шаблон дома и два каркаса на площадке, построенные по одному лекалу
Один шаблон, много объектов.

Шаблон проекта в ERPNext — это Project Template со списком типовых задач, где каждая задача заранее знает свой старт, длительность, вес и зависимости. При создании проекта выбираете шаблон, и задачи появляются сами. Ниже как собрать шаблон, что копируется, что нет, и где поведение стоит проверить на стенде.

Что такое Project Template в ERPNext и чем он отличается от копирования проекта?

Если компания строит, монтирует или внедряет одно и то же, каждый новый проект начинается с одинакового набора задач. Раньше такой набор копировали: брали прошлый проект, дублировали, правили даты. Это работает, пока в копии не окажется чужих комментариев, фактических дат и прочего мусора. Шаблон решает проблему иначе: в нём хранится только заготовка, а настоящий проект рождается из неё чистым. Наш вариант внедрения ERPNext для таких компаний описан на странице ERPNext под ключ, и шаблоны проектов относятся к самому быстрому, что в нём можно настроить.

Устройство я проверил по исходному коду версии 15, у версии 16 то же самое. Project Template состоит из двух полей: тип проекта (Project Type) и таблица Tasks. В таблице нет описаний задач, там только ссылки на документы Task. Сами «шаблонные» задачи это обычные документы Task, у которых включена галочка Is Template. Отдельного документа Task Template в системе нет, и это один из самых частых вопросов: роль шаблона задачи играет задача с флагом.

Что происходит при создании проекта. В форме Project есть поле «From Template». Если выбрать шаблон и сохранить проект, при отсутствии у проекта задач система копирует в него все задачи из шаблона. Если у проекта не задана дата начала, он стартует сегодня; если не задан тип проекта, берётся тип из шаблона. Сравните с копированием: вы получаете чистые задачи в статусе Open без истории.

Поэтому шаблон лучше копирования в трёх случаях. Когда набор задач стабилен и редко меняется. Когда проекты ведут разные руководители, и нужна единая схема. И когда нужно быстро обучить нового сотрудника, потому что ему не надо помнить порядок работ. Для сравнения: единый порядок онбординга сотрудника я разбирал в материале про онбординг за один день, там тот же принцип повторяемого процесса.

Задача-шаблон это обычная Task с флагом Is Template. Статус у такой задачи автоматически становится Template, и в проекты она попадает копией со статусом Open.

Как собрать шаблон: задачи, порядок, зависимости, веса

Порядок сборки такой. Сначала создаёте задачи-шаблоны: Task, включаете Is Template и заполняете тему, описание, приоритет и вес (Weight). У шаблонной задачи появляются два особых поля: Begin On (Days) и Duration (Days). Первое задаёт, на какой день после старта проекта задача начинается, второе сколько дней она длится. Затем создаёте Project Template, выбираете тип проекта и добавляете задачи в таблицу Tasks.

Иерархия и зависимости настраиваются тоже на задачах-шаблонах. Поле Parent Task объединяет подзадачи под групповой задачей; родитель при этом должен быть отмечен как группа (Is Group) и сам быть шаблонной задачей. Таблица Dependent Tasks описывает зависимости: зависимая задача тоже должна быть шаблонной. Если вы укажете обычную задачу, система вернёт ошибку «Dependent Task is not a Template Task». Эти проверки есть в коде, так что ошибаться придётся сознательно.

Что даёт вес. В проекте есть настройка «% Complete Method» со значениями Manual, Task Completion, Task Progress и Task Weight. Если выбрать Task Weight, процент выполнения проекта считается с учётом весов задач, а не поровну. Для дома фундамент и отделка не равны по трудоёмкости, и взвешенный процент честнее показывает реальное положение. Веса обычно задаю в сумме на 100, чтобы читать их как проценты.

Как копируются поля. Из шаблонной задачи в проектную переносятся тема, описание, вес, тип задачи, цвет, приоритет, связанная заявка и признак группы. Даты рассчитываются от даты старта проекта по формуле: начало равно старту плюс Begin On, окончание равно началу плюс Duration (в коде v15 это методы calculate_start_date и calculate_end_date). Если получившаяся дата выпадает на выходной из списка выходных (Holiday List) компании, она сдвигается вперёд на ближайший рабочий день. Иерархия и зависимости переносятся тоже: после создания задач система сопоставляет шаблонные задачи с проектными и расставляет Parent Task и Dependent Tasks.

Чего не копируется, и это стоит знать заранее. Флаг Is Milestone в списке копируемых полей кода я не нашёл, значит, в проектных задачах его придётся ставить вручную или добавить собственной настройкой. Эта оговорка есть и в версии 16. Полезно сразу прогнать на тестовом проекте и посмотреть, что именно получилось, до того как строить на шаблоне процесс компании.

Вехи и оплата по этапам: Is Milestone и Payment Terms

Отдельного объекта «веха» в ERPNext нет. Есть флажок Is Milestone на задаче, и всё. Как я проверил в коде версии 15, этот флаг не участвует в проверках и расчётах: он нужен как отметка для фильтров, отчётов и для людей. Поэтому когда в статьях пишут «веха автоматически запускает оплату», будьте осторожны: такой связи в полях задачи нет, у задачи нет ссылки на график оплат.

Как я решаю задачу оплаты по этапам. График платежей задаётся в документах продаж через Payment Terms Template, и каждая строка графика описывает долю и срок. Названия строк делаю такими же, как названия вех: «Фундамент принят», «Отделка принята». Связь между вехой задачи и платежом ведёт человек: руководитель проекта, закрывая веху, сообщает бухгалтеру, что пора выставлять счёт по соответствующей строке. Это не автоматика, и я не обещаю её без разработки.

Другой приём для структуры этапов: родительская задача с подзадачами. Родитель отражает этап, подзадачи работы внутри него, и система следит за границами: она сравнивает ожидаемую дату окончания дочерней задачи с датой родительской и не даёт сохранить подзадачу, если та заканчивается позже родителя. Для вех я использую именно эту связку плюс флаг, чтобы этап был виден и в дереве задач (у Task есть древовидное представление), и в отчётах.

Если оплата по этапам для вас ключевая, договорённость о критериях приёмки лучше записать в описании задачи-вехи, а не держать в голове. Тогда в споре с заказчиком вы показываете чёткое описание, а не пересказ. Подобные вопросы согласования документов и этапов можно автоматизировать отдельно; о маршрутах согласования договоров у меня есть материал про автоматизацию согласования.

Как создать новый объект из шаблона и что получится автоматически

Создание нового объекта занимает пару минут. Открываете Project, указываете название («Дом №14»), клиента, при необходимости заказ покупателя, дату начала и в поле «From Template» выбираете шаблон. Сохраняете. Система создаёт задачи с датами, весами и зависимостями. Дальше руководитель проекта назначает ответственных и при необходимости правит сроки.

Что получается автоматически. Набор задач в статусе Open. Даты от старта проекта с учётом выходных. Иерархия и зависимости как в шаблоне. Вес каждой задачи. Тип проекта из шаблона, если вы сами его не указали. А вот ответственные не назначаются: шаблон не знает, кто будет работать на конкретном объекте, и это правильно. Назначение делается после создания, отдельным шагом, и я включаю его в список действий руководителя проекта.

Поведение дат стоит понимать, чтобы не удивляться. В коде задачи есть автоперенос: когда у задачи меняется срок окончания, зависимые от неё задачи в статусе Open, которые начинаются раньше этой даты, сдвигаются на следующий день после неё с сохранением длительности. Задачи в других статусах система не двигает. Кроме того, система не даёт завершить задачу, пока не завершены или не отменены задачи, от которых она зависит, и не даёт сохранить задачу с датами вне периода проекта. Эти проверки защищают от ошибок, но требуют, чтобы у проекта были заданы разумные даты начала и окончания.

Когда стоит править сам шаблон, а не проект. Если в трёх проектах подряд вы вручную удаляли или добавляли одну и ту же задачу, шаблон устарел. Исправления вносят в шаблонные задачи и в Project Template, и они действуют только на новые проекты: уже созданные проекты остаются как были. Это ожидаемо, но об этом полезно предупредить команду, чтобы никто не ждал, что старые проекты обновятся сами.

Сроки и представления: Gantt, Kanban и Calendar без драмы

Для задач есть несколько представлений: список, канбан, календарь, диаграмма Ганта и дерево. Календарь и Гант строятся по полям ожидаемых дат, начала и окончания, а полоска прогресса по полю процента выполнения. Дерево задач работает на иерархии Parent Task. У списка есть массовые действия: можно выделить задачи и одним действием перевести их в Open или Completed. Для руководителя проекта это самое полезное сочетание: канбан для статусов, гант для сроков.

Про диаграмму Ганта скажу осторожно. В нашей базе знаний есть оговорка: в старых версиях (десятой и двенадцатой) при перетаскивании полосок встречались ошибки с датами, например связь удалялась, а стрелка оставалась, или даты съезжали на месяц назад. Для версий 15 и 16 стабильность перетаскивания в базе знаний не подтверждена и вынесена в проверку на стенде. Поэтому я меняю сроки в форме задачи, а гант использую для просмотра, пока не проверю перетаскивание на своей версии.

Простой тест, который я провожу на тестовом проекте. Создать проект из шаблона. Перетащить полосу одной задачи на несколько дней вперёд и посмотреть, сдвинулись ли зависимые задачи и не изменились ли даты у остальных. Затем проверить то же через форму задачи. Затем удалить связь и убедиться, что стрелка исчезла. Результат записываю: он нужен команде как факт про их версию, а не как мой пересказ чужих баг-репортов.

Отчётность по проекту строится дальше: время сотрудников через табели, затраты и рентабельность объекта. Эти темы выходят за рамки статьи, и я их разбираю отдельно в материалах про проекты, Gantt и табели и про центры затрат. Здесь достаточно сказать, что шаблон даёт каркас, а учёт времени и затрат накладывается на те же задачи.

Как «Каркасный Город» ведёт типовой дом на 22 рабочих места

Условный пример. Компания по строительству каркасных домов «Каркасный Город», 22 рабочих места: прораб, пять бригадиров, проектировщик, сметчик, снабженец, администрация и рабочие бригад. Строят один типовой дом по одному проекту, но десятки раз в год. Цифры вымышлены для иллюстрации: это не реальный клиент и не нормативы стройки.

Они заводят пять задач-шаблонов с весами в сумме 100 и дополняют каждую расписанием. Условные значения: фундамент (старт на 0-й день, 14 дней, вес 20), каркас стен (14-й день, 21 день, вес 25), кровля (35-й день, 10 дней, вес 15), инженерные сети (45-й день, 14 дней, вес 15), отделка (59-й день, 21 день, вес 25). Каждая следующая зависит от предыдущей. Сводка: | Задача | Begin On, дн. | Длительность, дн. | Вес | Дата при старте 2 ноября | |---|---|---|---|---| | Фундамент | 0 | 14 | 20 | 02.11 – 16.11 | | Каркас стен | 14 | 21 | 25 | 16.11 – 07.12 | | Кровля | 35 | 10 | 15 | 07.12 – 17.12 | | Инженерные сети | 45 | 14 | 15 | 17.12 – 31.12 | | Отделка | 59 | 21 | 25 | 31.12 – 21.01 |

Даты в таблице посчитаны по формуле без учёта списка выходных: если дата окажется выходным днём в Holiday List компании, система сдвинет её вперёд, и новогодние праздники сдвинут отделку. Это ожидаемо и хорошо видно на примере: отделка начинается 31 декабря, а на деле стартует после каникул. Руководитель проекта видит это сразу при создании объекта и может скорректировать сроки в форме.

Работа с шаблоном выглядит так. Когда подписан договор на дом №14, руководитель проекта создаёт Project, выбирает шаблон и дату старта. Появляются пять задач, затем он назначает ответственных: бригадира на фундамент, бригадира на каркас и так далее. На задачах «Фундамент» и «Отделка» ставит вручную флажок Is Milestone, потому что они соответствуют этапам оплаты. Процент выполнения считается по весам: когда фундамент закрыт, проект показывает двадцать процентов.

Что компания проверяет на пилоте. Копируются ли зависимости и вес так, как ожидалось. Сдвигаются ли зависимые задачи при переносе срока. Как ведёт себя гант в их версии при перетаскивании. И что показывают представления для прораба, которому нужен простой список задач на сегодня. По итогам двух проектов шаблон правят: добавили задачу «Приёмка фундамента» перед каркасом. В примере это 20 минут работы, и новые дома получают исправленный набор сразу.

Чего шаблон не делает и что проверить на стенде

Перечень ограничений, который я проговариваю заказчику до запуска. Шаблон не назначает ответственных. Он не копирует флаг вехи. Он не связывает веху с платежом. Он не обновляет уже созданные проекты после изменений. Он не знает о различиях между объектами: если дом на склоне требует дополнительной задачи, её добавляют в проект вручную. И он не заменяет сметы и спецификацию договора: это отдельные документы, и спецификацию договора не стоит путать с производственной спецификацией (BOM) ERPNext.

Ещё одно ограничение, о котором часто забывают: шаблон хранит расписание в днях от старта, а не в датах. Если у вас внутри этапа есть жёсткие даты (поставка кровельных материалов к конкретному числу), их нужно заводить в проектных задачах. И ещё: чем больше задач в шаблоне, тем менее вероятно, что он пригодится как есть. Я держу шаблон на уровне этапов и ключевых работ, а не на уровне каждого гвоздя: сорок задач на дом уже много для бригадира.

Что я проверяю на демостенде перед запуском. Первое: создание проекта из шаблона на вашей версии, с копированием зависимостей и весов. Второе: перенос срока у задачи и сдвиг зависимых. Третье: поведение ганта при перетаскивании. Четвёртое: ручная расстановка Is Milestone и использование в отчётах. Пятое: как выглядит процент выполнения при выборе метода Task Weight. Результаты записываю в короткий протокол и прикладываю к договору внедрения. Показать это могу на демостенде по запросу.

Куда двигаться дальше. Если типовых проектов у вас несколько (дом, баня, гараж), делайте отдельный шаблон на каждый тип и не пытайтесь собрать универсальный: универсальные шаблоны вырождаются в список «на всякий случай». Если нужен контроль перерасхода материалов по спецификации, это уже другая цепочка документов; общий взгляд на системы учёта есть в материале про выбор системы учёта на Linux, а про открытую ERP для производства в статье про ERPNext для производства.

Частые вопросы

Как создать шаблон проекта в ERPNext?

Создайте задачи с галочкой Is Template, заполните Begin On и Duration, затем заведите Project Template, выберите тип проекта и добавьте эти задачи в таблицу Tasks. При создании проекта выберите шаблон в поле From Template, и задачи появятся сами.

Чем Task Template отличается от Project Template?

Отдельного DocType Task Template в версиях 15 и 16 нет: шаблонная задача это обычная Task с флагом Is Template и статусом Template. Project Template собирает такие задачи в таблицу и добавляет тип проекта.

Можно ли задавать зависимости между задачами?

Да: Parent Task, таблица Dependent Tasks и вес Weight переносятся из шаблона. Зависимости и родитель в шаблоне допустимы только между шаблонными задачами. Завершить задачу нельзя, пока её зависимости не завершены или не отменены.

Как в ERPNext показать вехи для оплаты по этапам?

Отдельной сущности вех нет: у задачи есть флаг Is Milestone, который не копируется из шаблона и не связан с графиком оплат. Этапы можно показать родительской задачей с подзадачами, а оплату привязывать вручную.

Работает ли диаграмма Ганта в ERPNext стабильно?

Гант строится по ожидаемым датам задач. В старых версиях (10, 12) были ошибки с датами при перетаскивании, для 15 и 16 стабильность в базе знаний не подтверждена. Меняйте сроки в форме задачи и проверьте перетаскивание на тестовом проекте.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи