Skip to content

Диаграмма Ганта ​

Назначение ​

Панель 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:

НастройкаЗначение пакета по умолчаниюДля чего используется
highlightedArrowColorDefaultblackСтрелки последовательности и маршруты выделения
highlightedArrowColorSupply#06641eСтрелки поставок
highlightedArrowColorProducer#daa520Стрелки операций-производителей

highlightedArrowColor удалён. Для совместимости панель сопоставляет этот старый ключ только с highlightedArrowColorDefault; явно заданный новый ключ имеет приоритет, в том числе явно заданный highlightedArrowColorDefault.

Модель работы ​

  1. Действие открывает расписание и сохраняет его ответ.
  2. Панель нормализует даты для APS и создаёт конфигурацию APS из настроек schedule.*.
  3. APS отрисовывает диаграмму. Действия панели вызывают хранилище расписания; операции, возвращающие полное расписание, заменяют набор данных и повторно монтируют виджет.
  4. Адаптер сохраняет прежнюю область просмотра и восстанавливает только область, записанную для нового GUID расписания.
  5. showUnscheduledOperations открывает вложенный список. APS отвечает за обратную связь при перетаскивании, а панель — за итоговый запрос распределения.
  6. 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, успешное распределение после перетаскивания или появление стрелки зависимости: в текущих демонстрационных данных нет ответа зависимостей.

Точная справка по параметрам ​

Связанные руководства и следующий шаг ​

Далее настройте действие openSchedule и проверьте его с реальным API расписания, прежде чем добавлять необязательные настройки APS.