Задачи и график
Задачите са основният инструмент за планиране и проследяване на работата по проект. Системата поддържа йерархична структура с два вида задачи — контейнери (групиращи задачи) и листови задачи (конкретна работа).
Видове задачи
Контейнер
Контейнерът групира подзадачи. Използва се за организиране на работата по фази, раздели или зони на строежа.
- Може да съдържа листови задачи и под-контейнери
- Не изисква мерна единица или количество
- Процент на завършване се изчислява автоматично: действителни разходи / бюджет × 100
- Датите (начало/край) се извличат автоматично от датите на подзадачите
- Може да бъде свързан с етап от продажбите (строителна фаза)
Листова задача
Листовата задача представлява конкретна работа с измеримо количество.
- Изисква мерна единица, количество и единична цена
- Процент на завършване се въвежда ръчно (изпълнено количество)
- Има конкретни начална и крайна дата
- Може да има зависимости от други задачи
Йерархия и дълбочина
Задачите се организират в дърво с ограничена дълбочина:
Ниво 0: Контейнер А ← корен (без родител)
Ниво 1: Контейнер А-1 ← под-контейнер
Ниво 2: Листова задача ← конкретна работа
Ниво 1: Листова задача ← конкретна работа
Ниво 0: Листова задача ← без контейнер
| Тип | Максимална дълбочина |
|---|---|
| Контейнер | Ниво 0 или 1 |
| Листова задача | Ниво 0, 1 или 2 |
Жизнен цикъл на задача
При промяна на статус се записва история с дата и потребител.
Каскадна промяна на статус при контейнери
Когато маркирате контейнер като Завършен, системата предлага автоматично да завърши всички подзадачи. Появява се диалог за потвърждение, показващ:
- Засегнати контейнери и листови задачи
- Незавършени листови задачи (изпълненото количество е по-малко от планираното)
Промяната на статус не се разпространява обратно — ако повторно отворите контейнер, подзадачите запазват своя статус.
Gantt диаграма
Задачите се визуализират като Gantt диаграма, която показва:
- Времевата линия на всяка задача
- Зависимости между задачи (стрелки)
- Планирани срещу фактически дати
- Процент на завършване
Зависимости в Gantt диаграмата
Задачите могат да зависят от завършването на предходни задачи. Зависимостите са от тип завърши→започни: задача Б може да започне едва когато задача А приключи.
Създаване на зависимост чрез плъзгане:
- Задръжте курсора над лентата на дадена задача — появява се кръгъл маркер вдясно.
- Кликнете и плъзнете маркера към целевата задача.
- Системата проверява за циклични зависимости и отказва невалидни връзки.
Изтриване на зависимост:
- Кликнете върху стрелката на зависимостта — тя се маркира в червено.
- Появява се бутон ×. Кликнете върху него, за да изтриете зависимостта.
Предупреждение при незавършени зависимости:
Ако се опитате да смените статуса на задача на „Започната", а нейните предходни задачи не са завършени, системата показва предупреждение с техния списък. Можете да продължите и да игнорирате зависимостта.
Преместване на задачи в Gantt диаграмата
Задачите могат да бъдат преместени в йерархията чрез плъзгане:
- Плъзнете задача отляво или надясно от друга задача, за да я направите съседна (на същото ниво).
- Плъзнете задача над друга задача, за да я направите дъщерна (дете).
- Ако плъзнете задача върху листова задача, системата ще предложи да конвертира целевата задача в контейнер.
Таблица с план на задачите
Режими на изглед
Таблицата предлага два режима, избираеми от падащото меню в лентата с инструменти:
| Режим | Описание |
|---|---|
| Своден изглед | Показва само задачите на текущото ниво. Кликването върху контейнер „пробива" навътре. |
| Плосък изглед | Показва всички задачи наведнъж (контейнери и листови). |
Навигация в сводния изглед
При „Своден изглед" таблицата показва само задачите на избраното ниво:
- Кликване върху контейнер — показва неговите дъщерни задачи.
- Хлебни трохи (breadcrumbs) над таблицата показват текущия път и позволяват навигация нагоре.
- Кликване върху листова задача — отваря страницата за редакция.
Колони в таблицата
| Колона | Контейнер | Листова задача |
|---|---|---|
| Наименование | получер текст | нормален текст |
| Статус | статус + каскадна промяна | статус |
| Начало | мин. от дъщерните задачи | начална дата |
| Край | макс. от дъщерните задачи | крайна дата |
| Бюджет | estimatedTotalCost (с индикатор ↘ при превишаване) | estimatedTotalCost |
| Бюджет на деца | withChildren.estimatedTotalCost | — |
| Мерна единица | — | мерна единица |
| Планирано кол. | — | estimatedAmount |
| Завършване | % (авт. изчислен) — само за четене | завършено кол. / планирано кол. |
| Действителна стойност | собствени + дъщерни разходи | действителни разходи |
| Зависимости | имена на предходни задачи | имена на предходни задачи |
| Строителна фаза | свързана фаза | — |
Индикатор за превишен бюджет (↘)
Показва се в колона „Бюджет" при контейнери и листови задачи, когато:
- Зададен е ръчен бюджет (Override), И
- Бюджетът е по-малък от сумата на подзадачите
Формат: 100,000 ↘20,000 (червен текст). При задържане на курсора: „Бюджет: 100,000 / Бюджет на деца: 120,000 / Превишение: 20,000".
Създаване на задача
- Отворете проекта и отидете в секция Задачи.
- По избор изберете задача в списъка/Gantt диаграмата, за да зададете къде да се добави новата задача (вижте по-долу).
- Натиснете "Нова задача".
- Изберете типа: Контейнер или Листова задача.
- Попълнете полетата.
- Натиснете "Запази".
Къде се добавя новата задача
Позицията на новата задача зависи от това коя задача е избрана в момента на създаване:
| Избрана задача | Къде се добавя новата задача |
|---|---|
| Дъщерна задача (под контейнер) | Като съседна задача — на същото ниво и под същия родител, непосредствено след избраната задача. |
| Коренова задача (без родител) | На корен ниво (без родител). |
| Няма избрана задача | На корен ниво, в края на списъка. |
Новата задача никога не се създава вътре в (като дете на) избраната задача. За да преместите задача в друг контейнер, използвайте плъзгане в Gantt диаграмата (вижте Преместване на задачи).
Полета на контейнер
| Поле | Описание | Задължително |
|---|---|---|
| Наименование | Името на контейнера | Да |
| Код | Кратък идентификатор (до 10 символа) | Не |
| Статус | Текущо състояние | Да |
| Планирана начална дата | Автоматично изчислена от дъщерните задачи (минимум). Само за четене. | — |
| Планирана крайна дата | Автоматично изчислена от дъщерните задачи (максимум). Само за четене. | — |
| Фактическа начална дата | Автоматично изчислена (вижте Планирани и фактически дати). Само за четене. | — |
| Фактическа крайна дата | Автоматично изчислена (максимум от децата). Само за четене. | — |
| Бюджет | Вижте Бюджет на задача | Не |
| Описание | Допълнителен текст (до 2000 символа). Видим само в страницата за редакция. | Не |
| Строителна фаза | Свързване с фаза от продажбите | Не |
| Родителска задача | Контейнер, под който се създава (или корен) | Не |
Полета на листова задача
| Поле | Описание | Задължително |
|---|---|---|
| Наименование | Името на задачата | Да |
| Код | Кратък идентификатор (до 10 символа) | Не |
| Статус | Текущо състояние | Да |
| Планирана начална дата | Дата, на която планирате да започнете | Да |
| Планирана крайна дата | Дата, на която планирате да завършите. Не може да е преди началната. | Да |
| Фактическа начална дата | Автоматично изчислена (вижте Планирани и фактически дати). Само за четене. | — |
| Фактическа крайна дата | Автоматично при статус „Завършена". Ръчно редактируема само за вече завършени задачи (ретроактивна корекция). | — |
| Мерна единица | Единица за измерване | Да |
| Планирано количество | Очаквано количество работа | Да |
| Единична цена | Цена за единица | Да |
| Планирани часове | Очаквани работни часове | Да |
| Описание | Допълнителен текст (до 2000 символа). Видим само в страницата за редакция. | Не |
| Бюджет | Вижте Бюджет на задача | Не |
| Родителска задача | Контейнер, под който се създава (или корен) | Не |
Бюджет на задача
Всяка задача (контейнер или листова) има поле Бюджет, което контролира стойността на estimatedTotalCost.
Автоматично изчисление (по подразбиране)
Когато квадратчето „Замяна на автоматично изчисления бюджет" не е отметнато:
| Тип задача | Формула за бюджет |
|---|---|
| Контейнер | Сума от бюджетите на всички дъщерни задачи |
| Листова задача | Планирано количество × Единична цена |
Ръчно задаване на бюджет (Override)
Когато квадратчето „Замяна на автоматично изчисления бюджет" е отметнато:
- Въведете желания бюджет в полето Бюджет.
- За листови задачи: полетата „Планирано количество", „Единична цена" и „Мерна единица" стават само за четене — те не влияят върху бюджета.
- За контейнери: бюджетът е фиксиран и не се актуализира при промяна на подзадачите.
За да върнете автоматичното изчисление: махнете отметката от квадратчето — бюджетът мигновено се изчислява отново.
Редакция и изтриване
- За редакция кликнете върху задачата в списъка или Gantt диаграмата.
- Промените в бюджета, статуса, зависимостите и другите полета се запазват след натискане на "Запази".
- За изтриване използвайте бутона "Изтрий" в детайлите на задачата.
Конвертиране на типа задача
Съществуваща задача може да бъде конвертирана от листова в контейнер и обратно от страницата за редакция (бутон "Конвертирай"):
| Конвертиране | Ефект |
|---|---|
| Листова → Контейнер | Изчистват се количество, единична цена и часове. Задачата може да приема дъщерни задачи. |
| Контейнер → Листова | Изчистват се всички връзки към дъщерни задачи. Възстановяват се полетата за количество/цена. Задачата не трябва да има деца. |
Зависимости между задачи
Зависимостите се управляват от секцията Зависимости при редакция на задача или чрез плъзгане в Gantt диаграмата.
- Всяка задача може да зависи от произволен брой предходни задачи.
- Системата открива и отказва циклични зависимости.
- Самозависимост не е разрешена.
Проследяване на разходи
За всяка задача системата автоматично изчислява и обобщава:
| Показател | Контейнер | Листова задача |
|---|---|---|
| Изработени часове | сума от дъщерните | от часовите отчети |
| Разходи за материали | сума от дъщерните | от фактури |
| Разходи за услуги | сума от дъщерните | от фактури |
| Разходи за труд | сума от дъщерните | от часовите отчети |
| Действителна обща стойност | собствени + дъщерни | собствена |
| Действителна единична цена | — | изчислена |
| Процент завършване | авт. (разходи/бюджет×100) | ръчно (кол./план.кол.) |
Bulk създаване от CSV
За бързо добавяне на много задачи наведнъж можете да импортирате от CSV файл.
- Подгответе CSV файл с колони за наименование, код, дати и другите полета.
- В секцията Задачи натиснете "Импорт от CSV".
- Изберете файла и прегледайте данните.
- Потвърдете импорта.
Импортираните задачи се създават като листови задачи на корен ниво.
Импорт на задачи от рецепта
За бързо създаване на групи от свързани задачи може да използвате библиотеката с рецепти. Рецептите са предварително дефинирани шаблони с йерархия, мерни единици, продължителности и ориентировъчни цени.
Достъп: само потребители с роля Собственик или Администратор.
Стъпка 1 — Избор на рецепта
- Отворете секция Задачи в проекта.
- В лентата с инструменти натиснете "Импортирай рецепта".
- Появява се диалог с дърво от всички налични рецепти (скритите не се показват):
- Рецепти с деца — показани с икона на папка.
- Листови рецепти (без деца) — показани с икона на документ.
- Кликнете върху желаната рецепта, за да я маркирате.
- Натиснете "Напред".
Стъпка 2 — Преглед и редакция
В стъпка 2 се показват всички задачи, които ще бъдат създадени:
| Поле | Описание |
|---|---|
| Родителска задача | Контейнер в проекта, под който да се добавят новите задачи (по избор). |
| Начална дата | Датата, от която стартира първата задача от рецептата. |
| Наименование | Предварително попълнено от рецептата. Редактируемо. |
| Код | Автоматично генериран от първите три съгласни на наименованието. Редактируем. |
| Описание | Автоматично попълнено от описанието на рецептата и бележките към под-елементите. Редактируемо. |
| Количество | Задължително за листови задачи — въвеждате го ръчно. |
| Единична цена | Предварително попълнена от рецептата. Редактируема. |
| Планирани часове | Изчислени от продължителността на рецептата (дни × 8). Редактируеми. |
| Начална/крайна дата | Автоматично каскадно изчислени от началната дата. Редактируеми. |
Включи/Изключи задача: всеки ред има чекбокс. При изключване на контейнер автоматично се изключват и всичките му деца.
Проверка на дълбочина: ако при избраната родителска задача някоя задача би надвишила максималната дълбочина, тя се маркира в червено. Бутонът „Импортирай" е деактивиран докато има нарушения.
Дати при импорт (каскадно изчисление)
- Контейнерът получава началната дата, зададена в диалога.
- Всяка следваща задача започва когато завършва предходната (последователно планиране).
- Крайната дата на контейнера е максималната крайна дата от всички деца.
Автоматично генериране на код
Кодът се генерира от първите три съгласни на наименованието (поддържат се латиница и кирилица, в горен регистър). При съвпадение с вече съществуващ код в проекта се добавя числов суфикс: „ФНД", „ФНД2", „ФНД3".
Завършване на импорта
Натиснете "Импортирай". При успех диалогът се затваря, таблицата с задачи се обновява и се показва съобщение с броя на импортираните задачи.
Бюджетът на новосъздадените контейнери първоначално показва 0 и се изчислява автоматично от системата след няколко секунди.
Планирани и фактически дати
Всяка задача има четири дати: две планирани (задават се ръчно при създаване/редакция) и две фактически (изчисляват се автоматично от извършената работа).
В интерфейса двете полета са етикетирани „Фактическа начална дата" и „Фактическа крайна дата". (По-стари материали може да ги наричат „действителни" — става въпрос за същите полета.)
| Дата | Произход | Редакция |
|---|---|---|
| Планирана начална дата | Ръчно — при създаване/редакция на задачата | Винаги редактируема (със съответните права). Само за листови задачи — при контейнери е само за четене. |
| Планирана крайна дата | Ръчно — при създаване/редакция на задачата | Винаги редактируема. Само за листови задачи. Не може да бъде преди планираната начална дата. |
| Фактическа начална дата | Системно изчислена от доказателства | Само за четене |
| Фактическа крайна дата | Листова: при маркиране „Завършена". Контейнер: максимум от децата. | Листова: ретроактивна корекция върху завършени задачи. Контейнер: само за четене. |
Фактическа начална дата — източници на доказателства
За листови задачи фактическата начална дата е най-ранната от следните събития, свързани със задачата:
- Дата на първата покупка на материал (
Дата на доставкаот записа за покупка) - Дата на първия отчетен работен час (
hours > 0) - Дата на първата услуга, фактурирана към задачата (датата на издаване на фактурата за покупка)
- Дата на ръчно превключване на статус на „В процес" (ако горните три липсват)
- Планираната начална дата — ако задачата е маркирана „Завършена" и няма никакви доказателства (покупки/часове/услуги), а фактическата начална дата все още е празна. Това е резервен вариант само за попълване: ако фактическата начална дата вече е изчислена от доказателство или замразена, тя се запазва.
За контейнери: минималната от собствените доказателства (директни покупки/услуги/часове на контейнера) и фактическите начални дати на дъщерните задачи.
Винаги се преизчислява, не само при първо събитие. Ако добавите назад-датирано доказателство (по-стар работен час, по-стара покупка), фактическата начална дата автоматично се „издърпва" към по-ранна стойност, за да отрази реалния старт на работата.
Замразяване при завършени задачи: ако задача вече е със статус „Завършена" и изтриете последното доказателство, фактическата начална дата не се изчиства — запазва се историческата информация.
Фактическа крайна дата
| Тип задача | Поведение |
|---|---|
| Листова | Попълва се при смяна на статус на „Завършена" (записва се текущата дата и час). При връщане на статуса обратно (повторно отваряне на задачата) полето автоматично се изчиства. При повторно завършване — се записва нова текуща дата. Може да бъде коригирана ръчно само за вече завършени задачи (ретроактивна корекция). |
| Контейнер | Автоматично се изчислява като максималната от фактическите крайни дати на дъщерните задачи. Не може да бъде задавана ръчно. Изчиства се автоматично, когато никое дете няма крайна дата. |
Каскадно завършване на контейнер автоматично записва фактическа крайна дата (текущата дата) на всички дъщерни листови задачи едновременно. При повторно отваряне на контейнера тези дати се изчистват.
Валидация
При запис системата отказва задачи, в които планираната крайна дата е преди планираната начална дата — формата показва грешка веднага и бутонът „Запази" се деактивира до отстраняване на проблема.
Поведение в Gantt диаграмата
| Състояние на задачата | Начало на лентата | Край на лентата |
|---|---|---|
| Не е започната (липсва фактическа начална дата) | планирана начална дата | планирана крайна дата |
| В процес | фактическа начална дата | планирана крайна дата |
| Завършена | фактическа начална дата | фактическа крайна дата |
Лентата винаги покрива фактическия диапазон (начало → край от таблицата по-горе). Дължината ѝ е консистентна във всички мащаби на диаграмата — ден, седмица, месец, тримесечие и година: при смяна на изгледа лентата се преоразмерява пропорционално, така че винаги съответства на същия период. Точките за зависимости, дръжките за влачене и стрелките се закачат за видимите краища на лентата.
Закъснели задачи (планирана крайна дата е минала и статусът не е „Завършена") се рендират с диагонална червена щриховка. Планираната крайна дата не се удължава автоматично — отклонението остава видимо.
Обобщения на ниво проект
Детайлът на проекта показва обобщените стойности Планирано начало/край и Фактическо начало/край, изчислени от задачите на най-горно ниво.
Вижте също
- Библиотека с рецепти — създаване и управление на шаблони за задачи