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. Произведите следующие настройки:
Активируйте чекбоксы в поле
у полей «deviationPlan» и «deviationStatus»:
20. Нажмите кнопку «Сохранить».
21. Убедитесь, что настройки успешно сохранены:
На странице «Настройка диаграммы Ганта» должны быть отображены два поля «Отклонение от БП» и «Статус отклонения», которые теперь можно отобразить в диаграмме Ганта.