Для работы с иерархической структурой работ (ИСР) проекта используется сущность ProjectTask и набор OData ProjectTasks. Это элементы плана проекта: работы, группы работ и вехи.
Для собственных интеграций рекомендуется использовать обычные операции OData: читать структуру, добавлять задачи, обновлять их описательные свойства и удалять задачи с учётом ограничений системы.
Календарно-сетевым планированием управляет Schedule Engine. Он рассчитывает сроки с учётом длительности, зависимостей, ограничений, иерархии и календарей. Для изменения входных данных планирования предусмотрены отдельные команды.
Команды планирования в собственных интеграциях
Использовать команды планирования в собственных интеграциях не рекомендуется. Это API для Schedule Engine, цель которого — обеспечение полноценного, быстрого и стабильного календарно-сетевого планирования в Timetta.
Состав команд, их параметры и формат результатов могут меняться по мере развития движка. Если интеграция всё же использует эти команды, необходимо быть готовыми адаптировать её при обновлениях Timetta.
Для добавления задач и изменения их обычных свойств используйте CRUD OData. Прямое редактирование календарного плана через CRUD не поддерживается.
| Операция | Запрос | Возможности и ограничения |
|---|---|---|
| Чтение | GET /odata/ProjectTasks или GET /odata/ProjectTasks(<taskId>) |
Получить задачи, их свойства, структуру и рассчитанные сроки. Для отбора задач проекта используйте фильтр по projectId. |
| Создание | POST /odata/ProjectTasks |
Добавить задачу в проект под существующего родителя. После создания система нормализует структуру и пересчитывает план. |
| Обновление | PATCH /odata/ProjectTasks(<taskId>) |
Изменить обычные свойства задачи, а также допустимые структурные свойства. Изменение полей планирования существующей задачи ограничено — см. следующий раздел. |
| Удаление | DELETE /odata/ProjectTasks(<taskId>) |
Удалить задачу, если это допускают права доступа и бизнес-правила. Удаление затрагивает структуру и связанные зависимости и может изменить сроки оставшихся задач. |
В примерах <taskId>, <projectId> и <parentTaskId> обозначают реальные GUID соответствующих объектов.
Через PATCH можно обновлять, в частности:
name и description — название и описание;allowTimeEntry — разрешение ввода времени;categoryId — категорию;lookupValue1Id, lookupValue2Id и другие доступные дополнительные свойства — с учётом их типов и настройки;leadTaskId и number — родителя и порядок задачи в допустимой структуре проекта.Это примеры доступных свойств, а не разрешение записывать любое поле, полученное при чтении. Системные и вычисляемые свойства, например structNumber, indent и fullPath, формируются системой.
Изменение родителя или порядка запускает нормализацию структуры и пересчёт плана. Простое изменение названия или описания не является командой перепланирования.
Для технической корневой задачи название, описание и разрешение ввода времени синхронизируются с проектом: их следует менять через свойства проекта. Для наследуемых проектов и защищённых версий действуют дополнительные ограничения. Корневую задачу нельзя удалить.
GET https://api.timetta.com/odata/ProjectTasks?$filter=projectId eq <projectId>&$select=id,name,leadTaskId,number,structNumber,startDate,endDate,duration
Значения startDate и endDate в результате показывают рассчитанные сроки. Возможность прочитать поле не означает, что его можно изменить через PATCH.
POST https://api.timetta.com/odata/ProjectTasks
Content-Type: application/json
{
"projectId": "<projectId>",
"leadTaskId": "<parentTaskId>",
"name": "Подготовить исходные данные",
"description": "Собрать материалы для выполнения работ",
"allowTimeEntry": true
}
Перед отправкой замените значения в угловых скобках на GUID. Родитель должен принадлежать выбранному плану. Для добавления задачи первого уровня укажите корневую задачу проекта.
Ограничение на изменение полей планирования относится к обновлению существующей задачи. Создание допускает начальные значения полей, разрешённые моделью и бизнес-правилами, но не гарантирует сохранение произвольного интервала дат. Новая обычная задача по умолчанию получает ограничение ASAP, после чего движок определяет её допустимые сроки.
Структурные изменения могут изменить сроки
CRUD позволяет добавлять задачи и поддерживать структуру проекта, но не служит способом обойти Schedule Engine. Создание, удаление, изменение родителя или порядка могут вызвать пересчёт дат задач и групп. После таких операций перечитайте актуальное состояние плана.
PATCH https://api.timetta.com/odata/ProjectTasks(<taskId>)
Content-Type: application/json
{
"name": "Подготовить и согласовать исходные данные",
"lookupValue1Id": "55256e63-ea27-4aaf-a744-70d29f6539d0",
"lookupValue2Id": "a725f7cb-35e2-43cc-ab9d-fc5fec5e927d",
"allowTimeEntry": false
}
Идентификаторы значений справочников в примере необходимо заменить на доступные в вашей системе. Логические значения передаются без кавычек: false, а не "false".
Передавайте только изменяемые свойства. Не отправляйте обратно весь объект из GET: он содержит рассчитанные и системные поля.
У существующей задачи через CRUD нельзя менять следующие поля планирования:
| Поля | Назначение |
|---|---|
startDate, endDate |
Даты начала и окончания |
duration |
Длительность |
type |
Тип задачи для ресурсного планирования |
isMilestone |
Признак вехи |
constraintType, constraintDate |
Тип и дата ограничения планирования |
dependencies |
Зависимости: предшественники, типы связей и отступы |
Ограничение действует как при автоматическом, так и при ручном планировании проекта. Переключение isAutoPlanning не разрешает прямую запись дат: этот флаг влияет на ресурсное планирование, а правила календарных ограничений и зависимостей остаются общими.
Например, попытка изменить даты через PATCH:
{
"startDate": "2026-10-30",
"endDate": "2026-11-23"
}
приведёт к ошибке TmtArgumentException:
Use an explicit scheduling command to change dates, duration, type, milestone, constraints, or dependencies. Argument name: StartDate.
В текущей реализации имя аргумента StartDate используется для всей этой проверки. Поэтому сообщение может появиться и при изменении другого поля из таблицы.
Если интеграция должна обновить только справочники, описание или разрешение ввода времени, удалите поля планирования из запроса. Если требуется изменить сам календарный план, используйте интерфейс планирования Timetta либо учитывайте ограничения использования команд Schedule Engine.
Даты задачи — результат расчёта. Движок учитывает начало проекта, рабочие календари, длительность, зависимости и ограничения задачи и её родительских групп.
Поддерживаются два ограничения:
Более сильная зависимость или нерабочий день могут сдвинуть задачу позже запрошенного срока. Даты и длительность группы рассчитываются по её подзадачам; прямое изменение её длительности или границ не поддерживается.
Команда меняет свои входные данные и запускает общий пересчёт. Он может затронуть другие задачи и группы. Неизменяемые командой зависимости и явные ограничения сохраняются.
Ниже приведён обзор текущего API задач Schedule Engine. Он помогает понять назначение операций и не является гарантией неизменности их контракта.
Команды выполняются HTTP-методом POST. Для команды конкретной задачи используется форма:
POST /odata/ProjectTasks(<taskId>)/<Command>
Команды коллекции AddTask и RemoveAssignments вызываются без идентификатора задачи в URL:
POST /odata/ProjectTasks/AddTask
POST /odata/ProjectTasks/RemoveAssignments
Во всех перечисленных ниже командах передаётся expectedRevision — ожидаемая ревизия выбранного плана. В таблицах указаны остальные основные параметры.
| Команда | Основные параметры | Назначение |
|---|---|---|
MoveTo |
newStartDate |
Задать SNET и пересчитать размещение. Для обычной задачи сохраняется длительность; для группы пересчитывается поддерево, а не выполняется жёсткий сдвиг всех подзадач. |
ChangeStartDate |
newStartDate |
Задать SNET и определить длительность до прежнего окончания, затем пересчитать план. Прежнее окончание не становится фиксированным ограничением. |
ChangeEndDate |
newEndDate |
Определить длительность от текущего начала до запрошенного окончания с учётом календаря, затем пересчитать план. Итоговое окончание может отличаться от введённого. |
ChangeDuration |
newDuration |
Изменить длительность в рабочих днях и пересчитать сроки по правилам типа задачи. |
ChangeConstraint |
constraintType, constraintDate |
Установить ASAP или SNET. Для SNET нужна дата; переход к ASAP снимает собственное ограничение начала. |
ChangeIsMilestone |
isMilestone, duration |
Превратить задачу в веху или обратно. Веха имеет нулевую длительность; при обратном преобразовании задаётся длительность обычной задачи. |
Для вехи изменение начала или окончания работает как перенос. Снятие SNET может сдвинуть задачу и её преемников раньше.
| Команда | Основные параметры | Назначение |
|---|---|---|
ChangeHours |
newHours |
Изменить плановые трудозатраты и пересчитать связанные ресурсные и календарные показатели. |
ChangeType |
type |
Изменить тип задачи, определяющий правила пересчёта длительности, трудозатрат и загрузки. |
AssignResource |
id, projectTeamMemberId, isAllTeamRole, isUnassigned, units, projectTariffId |
Добавить назначение на задачу. id — идентификатор назначения. |
ChangeAssignment |
Те же параметры назначения | Изменить существующее назначение и пересчитать план. |
RemoveAssignment |
id |
Удалить указанное назначение. |
ClearAssignments |
Нет дополнительных параметров | Удалить все назначения выбранной задачи. |
RemoveAssignments |
ids |
Удалить несколько назначений по их идентификаторам; команда коллекции. |
| Команда | Основные параметры | Назначение |
|---|---|---|
AddDependency |
predecessorId, type, offset |
Добавить связь с предшественником. |
ChangeDependency |
predecessorId, type, offset |
Изменить тип или отступ выбранной связи. |
RemoveDependency |
predecessorId |
Удалить выбранную связь и пересчитать оставшиеся ограничения. |
Поддерживаются связи «окончание — начало» (FS), «начало — начало» (SS), «окончание — окончание» (FF) и «начало — окончание» (SF). При пересчёте учитываются все действующие связи. Удаление связи может освободить задачу для более раннего начала.
| Команда | Основные параметры | Назначение |
|---|---|---|
AddTask |
projectTask |
Добавить задачу через командный API с контролем ревизии плана; команда коллекции. |
RemoveTask |
Нет дополнительных параметров | Удалить задачу или поддерево с обработкой зависимостей и пересчётом. |
ChangeLeadTask |
leadTaskId |
Изменить родителя задачи и пересчитать затронутую иерархию. |
ChangeNumber |
number |
Изменить порядок задачи в структуре. |
Наличие этих команд не отменяет CRUD для создания, удаления и допустимых изменений структуры. Для обычной интеграции предпочтителен CRUD.
Если интеграция всё же использует команды планирования, ей недостаточно отправить новые значения и сохранить ответ одной задачи.
GetPlanSnapshot проекта или версии. Используйте его revision как expectedRevision следующей команды. Это ревизия всего плана, а не rowVersion отдельной задачи.projectPlanChanges либо сам является конвертом изменений плана. Изменения могут затронуть несколько задач, назначения и ресурсный план.requestedStartAdjusted означает, что рассчитанное начало отличается от запрошенного, а plannedFinishExceeded — превышение планового окончания проекта.Помимо команд задач, контур Schedule Engine включает операции ресурсного плана, изменения календарей и режима планирования, а также Undo/Redo. Отмена восстанавливает сохранённое состояние плана: обратный перенос даты не равнозначен Undo.
Похоже, вам удобнее русский язык. Перейти на русскую версию?