Appearance
Диаграмма Ганта
Назначение
Панель gantt показывает и позволяет обрабатывать производственное расписание, которое уже открыто действием работы с расписанием. На ней видны оборудование, операции, календари, поставки, зависимости и ограничения. Панель не запрашивает произвольный набор данных из JSON-конфигурации.
Когда использовать
Выбирайте диаграмму Ганта для анализа, генерации, распределения и корректировки расписания. Для календаря одного выбранного объекта используйте Calendar, а для обычных записей — Table. Обычно диаграмма Ганта открывается после действия openSchedule в таблице расписаний.
Предварительные условия и ответственность
openSchedule,getScheduleили другое действие расписания получает расписание и сохраняет ответ в хранилище расписания панели.panelActionsформирует панель инструментов и вызывает действия расписания.- Адаптер панели отвечает за нормализацию дат между API и APS, правило часового пояса и локали, безопасные преобразования полей, восстановление области просмотра, перекрытия и список нераспределённых операций.
- Установленный
@mes/aps@1.23.0отвечает за диаграмму, её модель данных, большинство настроекschedule.*, допустимость перетаскивания и отрисовку.
Возможности
| Область | Поддерживаемое поведение |
|---|---|
| Расписание | Строки оборудования, распределённые операции, поставки, календари, зависимости и ограничения из открытого расписания |
| Панель инструментов | Генерация, обновление, сохранение, блокировка, снятие с расписания, переключение слоёв и календарей, вторичные ограничения, движение материалов и список нераспределённых операций |
| Даты | На границе APS значения API нормализуются в строгий UTC ISO; явный IANA часовой пояс имеет приоритет, иначе используется часовой пояс браузера, а UTC остаётся техническим резервом |
| Поля | Подписи, видимость, порядок, шаблоны, форматирование указанных дат и безопасные преобразования valueMap для операций, ограничений, поставок и стрелок зависимостей |
| Область просмотра | Сохранение и восстановление в памяти по ID панели и GUID расписания при повторном монтировании диаграммы |
| Обновления | При замене полного ответа расписания прежняя диаграмма остаётся видимой под блокирующим перекрытием |
| Ограничения | Вторичные ограничения и движение материалов занимают одну область под диаграммой: открытие одной панели закрывает другую. После повторного монтирования открытая панель снова открывается, а её данные запрашиваются заново без уведомления |
| Распределение | Адаптер проверяет операцию, перетаскиваемую из списка нераспределённых, вызывает API распределения и заменяет данные обновлённым ответом |
| Зависимости операций | Когда APS нужны зависимости операции, панель автоматически вызывает GetWorkOrderOperationDependencies и возвращает ответ APS для построения стрелок |
Настройки панели
Адаптер явно отвечает за часовой пояс, локаль, видимость линии текущего времени, автоматическое открытие панелей ограничений (showConstraints, showMaterialConstraints), метаданные полей, преобразования дат и безопасные преобразования valueMap. Остальная поверхность schedule.* передаётся установленному пакету APS и в этом руководстве не считается самостоятельно подтверждённой.
Для constraintsTooltipConfig, supplyTooltipConfig и трёх секций подсказок стрелок состав полей задают настройки. Отсутствующая или пустая секция остаётся пустой. Панель форматирует дату только в явно настроенном поддерживаемом пути без разрешённой функции transform: startDate и finishDate для ограничений, date для поставок, а для стрелки последовательности — fromOp.startDate, fromOp.finishDate, fromOp.workOrder.dueDate, toOp.startDate, toOp.finishDate и toOp.workOrder.dueDate. Возможность форматирования не делает поле видимым. Для supplyArrowTooltipConfig и producerArrowTooltipConfig подтверждённых полей с датой нет, поэтому панель не добавляет в них форматирование дат.
Подсказки стрелок зависимостей
В установленном @mes/aps@1.23.0 при наведении на стрелку зависимости можно показать подсказку. Settings API независимо настраивает три секции:
flowArrowTooltipConfig— сплошная стрелка между операциями. Поля начинаются сfromOp.илиtoOp.; доступны, в частности,name,startDate,finishDateиworkOrder.dueDateкаждой из операций.supplyArrowTooltipConfig— пунктирная стрелка от поставки к операции. Подтверждённые поля:quantity,supplyGuid, а такжеmaterialDefinitionName,materialDefinitionItemIdиmaterialDefinitionUOMтого материала поставки, GUID которого совпадает с зависимостью. Если в поставке из ответа расписания такого материала нет, эти три поля остаются пустыми.producerArrowTooltipConfig— пунктирная стрелка от операции-производителя. Подтверждённые поля:materialDefinitionName,materialDefinitionItemId,materialDefinitionUOMиquantity.
Для каждого настроенного поля действует тот же контракт label, hidden, order, template и декларативного transform, что и для существующих подсказок. Точка внутри имени поля стрелки — часть имени, поэтому в плоском ключе настройки используйте квадратные скобки:
text
schedule.flowArrowTooltipConfig.[fromOp.name].label = "Исходная операция"
schedule.flowArrowTooltipConfig.[fromOp.startDate].label = "Начало исходной"
schedule.flowArrowTooltipConfig.[fromOp.name].transform.type = "valueMap"
schedule.flowArrowTooltipConfig.[fromOp.name].transform.values.Assembly = "Сборочный этап"
schedule.flowArrowTooltipConfig.[toOp.workOrder.dueDate].label = "Срок целевого заказа"
schedule.supplyArrowTooltipConfig.quantity.label = "Требуемое количество"
schedule.supplyArrowTooltipConfig.supplyGuid.hidden = true
schedule.producerArrowTooltipConfig.materialDefinitionName.label = "Производимый материал"
schedule.producerArrowTooltipConfig.quantity.order = 20Панель получает эти плоские настройки вместе с остальными schedule.*, преобразует поддерживаемые декларативные дескрипторы в функции APS и передаёт результат в createConfig. JavaScript из настройки она не выполняет. Для шести указанных путей даты стрелки последовательности без явно заданного transform панель добавляет собственное форматирование даты, сохраняя заданные метаданные, и не добавляет отсутствующие пути.
Нажмите операцию правой кнопкой мыши и выберите Выделить последующие операции, Выделить предыдущие операции или Выделить весь заказ. APS сопоставляет эти команды с получением зависимостей в направлениях next, previous и all соответственно. Пакет передаёт GUID выбранной операции и функцию для приёма ответа. GanttRenderer добавляет направление команды, а хранилище расписания — GUID текущего расписания, записывает GUID операции в operation и отправляет POST /Schedule/GetWorkOrderOperationDependencies. Полный ответ хранилище возвращает через функцию APS. Отдельное действие на панели инструментов или дополнительное действие в JSON панели не нужно. После успешного ответа панель показывает уведомление, а APS строит стрелки зависимостей и использует настроенные подсказки при наведении.
Цвета выделенных стрелок
Настройте три значения APS 1.20 в schedule.appSettings.drawPreferences:
| Настройка | Значение пакета по умолчанию | Для чего используется |
|---|---|---|
highlightedArrowColorDefault | black | Стрелки последовательности и маршруты выделения |
highlightedArrowColorSupply | #06641e | Стрелки поставок |
highlightedArrowColorProducer | #daa520 | Стрелки операций-производителей |
highlightedArrowColor удалён. Для совместимости панель сопоставляет этот старый ключ только с highlightedArrowColorDefault; явно заданный новый ключ имеет приоритет, в том числе явно заданный highlightedArrowColorDefault.
Модель работы
- Действие открывает расписание и сохраняет его ответ.
- Панель нормализует даты для APS и создаёт конфигурацию APS из настроек
schedule.*. - APS отрисовывает диаграмму. Действия панели вызывают хранилище расписания; операции, возвращающие полное расписание, заменяют набор данных и повторно монтируют виджет.
- Адаптер сохраняет прежнюю область просмотра и восстанавливает только область, записанную для нового GUID расписания.
showUnscheduledOperationsоткрывает вложенный список. APS отвечает за обратную связь при перетаскивании, а панель — за итоговый запрос распределения.toggleSecondaryConstraintsиtoggleMaterialConstraintsоткрывают или закрывают панель ограничений APS под диаграммой. Когда панель ограничений APS открывается, панель Ганта отправляет{ "scheduleGuid": "<текущее расписание>" }вPOST /Schedule/GetSecondaryConstraintsилиPOST /Schedule/GetMaterialConstraints, показывает уведомление об успехе, пустом ответе или ошибке и передаёт ответ в эту панель ограничений APS. Если была открыта другая панель ограничений APS, панель Ганта закрывает её. После следующего повторного монтирования панель Ганта снова открывает ту панель ограничений APS, что была открыта, и повторяет её запрос без уведомления.
Варианты, значения по умолчанию и приоритеты
schedule.appSettings.timezone: корректно заданное значение, затем IANA часовой пояс браузера, затемUTC.schedule.appSettings.locale: заданная локаль; сейчас панель используетru-RUпо умолчанию.schedule.appSettings.equipmentAreaSettings.showTerminator: по умолчаниюtrue; явно заданное серверное значение имеет приоритет.- Серверные настройки преобразуются из плоских ключей
schedule.*. Безопасные преобразования и преобразования дат панели разрешаются доcreateConfig. - В установленном
@mes/aps@1.23.0нет значений полей по умолчанию для подсказок ограничений и поставок. Нужные поля задаются явно; панель не восстанавливает удалённые значения пакета. schedule.showConstraints: trueоткрывает панель вторичных ограничений, аschedule.showMaterialConstraints: true— панель движения материалов, когда диаграмма готова и в текущем сеансе панели для этой панели ещё нет состояния «открыта» или «закрыта». Состояние записывают её действие на панели инструментов, открытие другой панели, закрытие вторичных ограничений внутри APS и предыдущее автоматическое открытие. Если обе настройки равныtrue, открывается только панель вторичных ограничений.schedule.materialConstraintsTooltipConfigиschedule.materialConstraintsListInfoConfigпередаются в APS без изменений. В@mes/aps@1.23.0обе секции по умолчанию пусты: безschedule.materialConstraintsListInfoConfigу строк движения материалов нет подписей. Панель не добавляет к этим секциям форматирование дат и преобразованияvalueMap.- Другие ключи
schedule.*остаются настройками@mes/aps. Не переносите произвольный ключ пакета в JSON приложения, не проверив установленный пакет.
Ограничения
- Диаграмма Ганта не является самостоятельной поверхностью запросов: без открытого расписания у неё нет данных.
schedule.appSettings.timezoneучаствует в отображении и в части расчётов APS, но другие пути установленного пакета всё ещё используют локальный браузерныйDate. Это не доказывает одинаковость вычислений в разных браузерах.- Поставки с датой-маркером ранее 1900 года исключаются на границе APS, а не получают выдуманную дату.
equipmentInfoConfigиconstraintsListInfoConfigв установленном пакете пусты по умолчанию. Если нужны подписи, набор полей передаётся через проверенные настройкиschedule.*.- Если закрыть вторичные ограничения кнопкой закрытия внутри APS, подпись действия на панели инструментов обновится. О таком же закрытии движения материалов
@mes/aps@1.23.0панели не сообщает: подпись остаётся в состоянии «открыто», а следующее повторное монтирование снова откроет панель. Следующее нажатие действия тоже откроет её. - Область просмотра и видимость ограничений относятся к сеансу браузера, а не к сохраняемой конфигурации приложения.
- Область просмотра и намерение видимости привязаны к ID панели, но открытое расписание, ссылка на диаграмму и данные ограничений всё ещё принадлежат единственному хранилищу расписания. Независимая работа нескольких одновременно смонтированных панелей Ганта не подтверждена.
Минимальная конфигурация
Минимальный фрагмент содержит только общие идентификаторы, вариант панели и необязательную поверхность действий.
json
{
"id": "schedule-gantt",
"type": "gantt",
"panelActions": []
}Этот фрагмент корректен, но становится полезным только после того, как другое действие откроет расписание.
Сценарий: открыть расписание и работать с диаграммой
json
{
"version": "1.0.0",
"panel": {
"id": "schedule-workspace",
"type": "group",
"groupLayout": { "type": "rows", "resizable": true },
"panels": [
{
"id": "schedules",
"type": "table",
"request": { "metaTypeName": "Schedule" },
"columns": [
{ "attribute": "name", "label": "Расписание" },
{ "attribute": "startDate", "label": "Начало" }
],
"pagination": { "rowsPerPage": [10] },
"itemActions": [
{
"id": "open-schedule",
"method": "openSchedule",
"label": "Открыть диаграмму Ганта",
"setVisibilityVariable": { "schedule-view": "gantt" }
}
]
},
{
"id": "schedule-gantt",
"type": "gantt",
"panelActions": [
{
"id": "gantt-actions",
"renderType": "dropdown",
"label": "Расписание",
"actions": [
{ "id": "generate-schedule", "method": "generateSchedule", "label": "Сформировать" },
{ "id": "toggle-calendar-layer", "method": "toggleLayerOrCalendar", "label": "Переключить слой календаря" }
]
}
]
}
]
}
}Ожидаемый результат: после открытия строки таблицы загружается расписание, и диаграмма Ганта показывает только действия, работающие с этим активным расписанием.
Запускаемые демонстрации
Открыть диаграмму Ганта с правилом часового пояса браузера Открыть диаграмму Ганта с явным правилом UTCВ любой демонстрации откройте Gantt → Нераспределённые операции, чтобы увидеть список Schedule Operations из строк unscheduledOperations открытого расписания. Gantt → Показать движение материалов открывает панель движения материалов с демонстрационными событиями по двум материалам; подписи строк в демонстрации не настроены, а строки открываются минимальной высоты.
Демонстрации проверяют открытие расписания, отрисовку пакета, действия панели, список нераспределённых операций, открытие панели движения материалов с её данными, преобразования полей и две ветви приоритета часового пояса. Они не доказывают работу каждого непрозрачного параметра APS, успешное распределение после перетаскивания или появление стрелки зависимости: в текущих демонстрационных данных нет ответа зависимостей.
Точная справка по параметрам
gantt.panelActions[]schedule.appSettings.timezoneschedule.appSettings.localeshowTerminatorshowConstraintsиshowMaterialConstraintshighlightedArrowColorDefault,highlightedArrowColorSupplyиhighlightedArrowColorProducer- поля
hidden,label,order,templateиtransform - непрозрачная граница
schedule.*
Связанные руководства и следующий шаг
- Настроить список нераспределённых операций
- Настроить преобразования отображения диаграммы Ганта
- Настроить Calendar
- Настроить действия панели
Далее настройте действие openSchedule и проверьте его с реальным API расписания, прежде чем добавлять необязательные настройки APS.