Как вывести "Отклонение базового плана" и "Статус отклонения" в Диаграмму Ганта

  • LINQ (Language Integrated Query) – простой SQL-подобный язык запросов к источнику данных.
  • БП – Базовый план.
  • ПДО – Плановая дата окончания.
  • УДО – Утвержденная дата окончания по БП.
  • ФДО – Фактическая дата окончания
  1. Перейдите на страницу «Администрирование».
  2. Перейдите на страницу «Источники LINQ» создания источников данных с помощью LINQ-запросов.
    Также возможно перейти по прямой ссылке, указав после адреса системы (~/cmn.aspx?pageName=DataSources.List.
  3. Нажмите «Пересоздать контекст».
  4. Нажмите «Новый источник данных», после того как она станет активной.
  5. В поле «Название» на странице создания источника данных через LINQ-запрос укажите «Расчет отклонения от базового плана» (без кавычек).
  6. В поле «Запрос» полностью удалите код тестового запроса.
  7. В поле «Запрос» полностью скопируйте код запроса:
    /*
    Поле "deviationPlan" с отклонением от БП. 
    Содержит разницу (отклонение) в РАБОЧИХ днях между соответствующими плановой или фактической датой окончания (ПДО или ФДО соответственно) и утвержденной датой окончания (УДО) по последней версии БП. Логика расчета для каждого соответствующего объекта:
    - Если у объекта есть УДО и ФДО, то отклонение = ФДО – УДО.
    - Если у объекта есть УДО, но нет ФДО, то отклонение = ПДО – УДО.
    - Если у объекта нет УДО, то расчет не производится. В соответствующей ячейке поля содержится пустое значение (не 0, а именно пустое значение).
    - Положительные значения говорят о просрочке, отрицательные – об опережении утвержденного срока в БП.
     
    Поле "deviationStatus" с числовым значением индикатора отклонения от БП. Логика расчета для каждого соответствующего объекта:
    - Если значение поля "deviationPlan" в диапазоне (-∞; 7], то в поле записывается значение = 1.
    - Если значение поля "deviationPlan" в диапазоне (7; 14], то в поле записывается значение = 2.
    - Если значение поля "deviationPlan" в диапазоне (14; +∞], то в поле записывается значение = 3.
    - Если значение поля "deviationPlan" пустое, то в поле "deviationStatus" ничего не записывается (остается пустое значение).
    */
     
    var objectID = parameters.GetValueOrDefault<Guid>("RootProjectId", new Guid("9443d7de-f036-4367-b51b-5c47d8f85a01")); // ID объекта из Ганта
    var deviation = dataContext.Projects
      .Where(p => p.BaselinePlanEndDate != null && p.GetParentHierarchy<Project>(true).Any(a => a.Id == objectID) )
      .OrderBy(p => p.Name)
      .Select(a => new {a.Id,  
                        a.Name, 
                        a.SystemEndDate, 
                        a.BaselinePlanEndDate, 
                        a.ActualEndDate,
                        a.CalendarId
                        })
      .ToList()
      .Select(b => new {b.Id,  
                        b.Name, 
                        b.SystemEndDate, 
                        b.BaselinePlanEndDate, 
                        b.ActualEndDate,
                        deviationPlan = Math.Round(b.ActualEndDate != null ? workCalendars.GetWorkCalendar(b.CalendarId).GetWorktimeDays(b.BaselinePlanEndDate.Value.Date, b.ActualEndDate.Value.Date) : workCalendars.GetWorkCalendar(b.CalendarId).GetWorktimeDays(b.BaselinePlanEndDate.Value.Date, b.SystemEndDate.Value.Date))
                       }
              )
      .ToList()
      .Select(c => new {c.Id,  
                        c.Name, 
                        c.SystemEndDate, 
                        c.BaselinePlanEndDate, 
                        c.ActualEndDate,
                        c.deviationPlan,
                        deviationStatus1 = c.deviationPlan <= 7 ? 1 : 0,
                        deviationStatus2 = c.deviationPlan > 7 && c.deviationPlan <= 14 ? 2 : 0,
                        deviationStatus3 = c.deviationPlan > 14 ? 3 : 0})
     
      .ToList()
      .Select(d => new {ObjectId = d.Id,  
                        d.Name, 
                        d.SystemEndDate, 
                        d.BaselinePlanEndDate, 
                        d.ActualEndDate,
                        deviationPlan = d.deviationPlan,
                        deviationStatus = d.deviationStatus1 + d.deviationStatus2 + d.deviationStatus3})
      .ToList();
    return deviation;


  8. Во второй вкладке браузера перейдите в карточку любого объекта системы, имеющего дочерние объекты. Желательно в родительскую задачу или небольшой проект с малым количеством дочерних объектов.
  9. Скопируйте в адресной строке ID этого объекта (после uid=).
  10. Переключитесь обратно на первую вкладку браузера, на страницу создания источника данных, где ранее был скопирован код запроса (шаг 7).
  11. Замените ID из строки кода на скопированный вами ID ранее (шаг 9). Это необходимо для первичного запуска кода запроса, что в свою очередь необходимо для возможности его привязки к диаграмме Ганта.
  12. Активируйте опцию «Может использоваться в диаграмме Ганта»
  13. Нажмите кнопку «Сделать запрос и сохранить».
  14. Дождитесь, пока запрос выполнится и сохранится.
  15. Убедитесь, что запрос выполнился успешно. Об этом будут свидетельствовать отсутствие ошибок и аналогичная таблица с результатами запроса.
  16. Закройте страницу сохраненного источника данных «Расчет отклонения от базового плана».
  17. Перейдите на страницу «Администрирование» → «Диаграмма Ганта».
  18. В разделе «Настройка полей из LINQ-запроса» → запрос «Расчет отклонения от базового плана» → «Настроить».
  19. Произведите следующие настройки:
    1. Активируйте чекбоксы в поле у полей «deviationPlan» и «deviationStatus».
      • deviationPlan:
        • Псевдоним - «Отклонение от БП» (без кавычек). Можете указать свое название поля с количеством дней отклонения, которое вы хотите увидеть в диаграмме Ганта.
        • Тип – Число.
        • Формат – Число.
      • deviationStatus:
        • Псевдоним - «Статус отклонения» (без кавычек). Можете указать свое название поля с индикатором отклонения, которое вы хотите увидеть в диаграмме Ганта.
        • Тип – Индикатор.
        • Добавьте 3 индикатора:
          • Для зеленого индикатора укажите условие «= 1» (без кавычек). Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (-∞; 7].
          • Для оранжевого индикатора укажите условие «= 2» (без кавычек) Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (7; 14].
          • Для красного индикатора укажите условие «= 3» (без кавычек) Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (14; +∞].
  20. Нажмите кнопку «Сохранить».
  21. Убедитесь, что настройки успешно сохранены:


    На странице «Настройка диаграммы Ганта» должны быть отображены два поля «Отклонение от БП» и «Статус отклонения», которые теперь можно отобразить в диаграмме Ганта.

  1. Перейдите в диаграмму Ганта любого объекта системы.
  2. Раскройте выпадающий список у любой из колонок диаграммы Ганта, наведя курсор мыши на шапку колонки и нажав на .
  3. Наведите курсор мыши на команду «Пользовательские столбцы» и активируйте чекбоксы «Отклонение от БП» и «Статус отклонения».
  4. Убедитесь, что указанные колонки добавились в табличную часть диаграммы Ганта.
  1. Настройте порядок новых полей среди других колонок табличной части диаграммы Ганта.
  2. При необходимости сохраните настройки представления, чтобы данные колонки отображались по умолчанию при открытии страницы Диаграммы Ганта.
  3. Если данные в колонках полностью отсутствуют, значит у вас не создан ни 1 БП для объекта, с карточки которого была открыта диаграмма Ганта.
  4. Данные в колонках LINQ-запросов («Отклонение от БП» и «Статус отклонения») обновляются в 3 случаях:
    1. При открытии страницы Диаграммы Ганта.
    2. При обновлении страницы Диаграммы Ганта.
    3. При сохранении диаграммы Ганта (по нажатию на кнопку «Сохранить»).