protected override List <CustomCell> GetListViewSubItems(AircraftFlight item) { //TODO (Evgenii Babak) : Вся логика должна быть в классе Calculator var subItems = new List <CustomCell>(); var dateString = item.FlightDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); var date = item.FlightDate.Date.AddMinutes(item.OutTime); var atlb = _atbs.GetItemById(item.ATLBId); var author = GlobalObjects.CasEnvironment.GetCorrector(item); if (item.AtlbRecordType == AtlbRecordType.Flight) { var route = item.StationFromId.ShortName + " - " + item.StationToId.ShortName; var flightTimeString = UsefulMethods.TimeToString(new TimeSpan(0, 0, item.FlightTimeTotalMinutes, 0)); Color flightTimeColor; if (item.FlightTime.TotalMinutes == item.BlockTime.TotalMinutes) { flightTimeColor = Color.Black; } else { double persent = Math.Abs(1 - (item.FlightTime.TotalMinutes / item.BlockTime.TotalMinutes)) * 100; if (persent <= 3) { flightTimeColor = Color.FromArgb(Highlight.Green.Color); } else if (persent <= 10) { flightTimeColor = Color.FromArgb(Highlight.Yellow.Color); } else { flightTimeColor = Color.FromArgb(Highlight.Red.Color); } } var perDaysFlight = Lifelength.Zero; var perDaysBlock = Lifelength.Zero; var flights = _flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date.AddMinutes(f.TakeOffTime) <= item.FlightDate.Date.AddMinutes(item.TakeOffTime)).ToList(); foreach (AircraftFlight aircraftFlight in flights) { perDaysFlight.Add(aircraftFlight.FlightTimeLifelength); perDaysBlock.Add(aircraftFlight.BlockTimeLifelenght); } subItems.Add(CreateRow(item.PageNo, item.PageNo)); subItems.Add(CreateRow(dateString, date)); subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber)); subItems.Add(CreateRow(route, route)); subItems.Add(CreateRow(flightTimeString, item.FlightTime, flightTimeColor)); #region колонки для отображения наработок по двигателям и ВСУ foreach (BaseComponent baseComponent in _enginesAndAPU.Where(i => i.BaseComponentType == BaseComponentType.Engine)) { bool shouldFillSubItems = false; var baseComponentFlightLifeLenght = Lifelength.Null; var lastKnownTransferRecBeforFlight = baseComponent.TransferRecords.GetLastKnownRecord(item.FlightDate.Date); if (lastKnownTransferRecBeforFlight != null && lastKnownTransferRecBeforFlight.DestinationObjectType == SmartCoreType.Aircraft && lastKnownTransferRecBeforFlight.DestinationObjectId == _parentAircraft.ItemId) { shouldFillSubItems = true; var flightsWhichOccuredAfterInstallationOfBd = flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date >= lastKnownTransferRecBeforFlight.RecordDate).ToList(); var perDaysFlightForBd = Lifelength.Zero; var perDaysBlockForBd = Lifelength.Zero; foreach (var flight in flightsWhichOccuredAfterInstallationOfBd) { perDaysFlightForBd.Add(flight.FlightTimeLifelength); perDaysBlockForBd.Add(flight.BlockTimeLifelenght); } baseComponentFlightLifeLenght = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight( baseComponent, item); } Color baseComponentTimeColor = Color.Black; if (baseComponent.BaseComponentType == BaseComponentType.Engine) { if (!last.ContainsKey(baseComponent.ItemId)) { last.Add(baseComponent.ItemId, new List <AircraftFlight>()); } if (shouldFillSubItems) { subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght)); var cp = WorkParams.FirstOrDefault(i => i.ComponentId == baseComponent.ItemId && i.GroundAir == GroundAir.Air); var cc = OilConditions.FirstOrDefault(i => i.ComponentId == baseComponent.ItemId && i.FlightId == item.ItemId); var oilFlowMin = cp?.OilFlowMin ?? 0; var oilFlowNorm = cp?.OilFlowRecomended ?? 0; var oilFlowMax = cp?.OilFlowMax ?? 0; var oilAdded = cc?.OilAdded ?? 0; var q = _flights .Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date.AddMinutes(f.TakeOffTime) <= item.FlightDate.Date.AddMinutes(item.TakeOffTime)) .OrderByDescending(i => i.FlightDate).ThenByDescending(i => i.TakeOffTime) .ToList(); var spent = cc?.Spent ?? 0; double consumption = 0; double consumptionMean = 0; if (oilAdded > 0) { if (last[baseComponent.ItemId].Any()) { if (last[baseComponent.ItemId].Last().ItemId != item.ItemId) { var temp = new List <AircraftFlight>(); bool flag = false; foreach (var aircraftFlight in q) { if (aircraftFlight.ItemId == last[baseComponent.ItemId].Last().ItemId) { flag = true; } if (flag) { temp.Add(aircraftFlight); } } foreach (var aircraftFlight in temp) { q.Remove(aircraftFlight); } } } var sumTime = q.Sum(i => i.FlightTime.TotalMinutes); spent = oilAdded / sumTime; consumption = spent * 60.0; if (!last[baseComponent.ItemId].Any(i => i.ItemId == item.ItemId)) { last[baseComponent.ItemId].Add(item); } } if (!_consumptionMeans.ContainsKey(baseComponent.ItemId)) { _consumptionMeans.Add(baseComponent.ItemId, new List <dynamic>()); } _consumptionMeans[baseComponent.ItemId].Add(new { UpLift = cc?.OilAdded * 60 ?? 0, FlightTime = item.FlightTime.TotalMinutes }); consumptionMean = _consumptionMeans[baseComponent.ItemId].Sum(i => (double)i.UpLift) / _consumptionMeans[baseComponent.ItemId].Sum(i => (double)i.FlightTime); subItems.Add(CreateListViewSubItem(oilAdded.ToString())); subItems.Add(CreateListViewSubItem(oilFlowMin.ToString())); subItems.Add(CreateListViewSubItem(oilFlowNorm.ToString())); subItems.Add(CreateListViewSubItem(oilFlowMax.ToString())); subItems.Add(CreateListViewSubItem(consumption.ToString("F"))); subItems.Add(CreateListViewSubItem(consumptionMean.ToString("F"))); subItems.Add(CreateListViewSubItem(GetStatus(oilFlowMin, oilFlowNorm, oilFlowMax, consumption) .ToString())); if (item.AtlbRecordType == AtlbRecordType.Flight && oilAdded > 0) { if (!_graph.Limits.ContainsKey(baseComponent)) { _graph.Limits.Add(baseComponent, new OilLimits() { Max = oilFlowMax, Min = oilFlowMin, Normal = oilFlowNorm }); } if (!_graph.Graph.ContainsKey(baseComponent)) { _graph.Graph.Add(baseComponent, new Dictionary <Lifelength, dynamic>()); } if (!_graph.Graph[baseComponent].ContainsKey(baseComponentFlightLifeLenght)) { _graph.Graph[baseComponent].Add(baseComponentFlightLifeLenght, new { Consumption = consumption, ConsumptionMean = consumptionMean }); } //else throw new Exception("Такая наработка уже есть!"); } } else { subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); } } } #endregion subItems.Add(CreateRow(atlb?.ATLBNo ?? "AtlB deleted", atlb?.ATLBNo)); subItems.Add(CreateRow(author, author)); } else { subItems.Add(CreateRow(item.PageNo, item.PageNo)); subItems.Add(CreateRow(dateString, date)); subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber)); subItems.Add(CreateRow(item.StationToId.ShortName, item.StationToId.ShortName)); subItems.Add(CreateRow("", "")); #region колонки для отображения наработок по двигателям и ВСУ foreach (var baseComponent in _enginesAndAPU) { if (baseComponent.BaseComponentType == BaseComponentType.Engine) { subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); } } #endregion subItems.Add(CreateRow(atlb?.ATLBNo, atlb?.ATLBNo)); subItems.Add(CreateRow(author, author)); } return(subItems); }
protected override List <CustomCell> GetListViewSubItems(AircraftFlight item) { //TODO (Evgenii Babak) : Вся логика должна быть в классе Calculator var subItems = new List <CustomCell>(); var dateString = item.FlightDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); var date = item.FlightDate.Date.AddMinutes(item.OutTime); var atlb = _atbs.GetItemById(item.ATLBId); var author = GlobalObjects.CasEnvironment.GetCorrector(item); if (item.AtlbRecordType == AtlbRecordType.Flight) { var route = item.StationFromId.ShortName + " - " + item.StationToId.ShortName; var flightTimeString = UsefulMethods.TimeToString(new TimeSpan(0, 0, item.FlightTimeTotalMinutes, 0)) + " (" + UsefulMethods.TimePeriodToString(new TimeSpan(0, 0, item.TakeOffTime, 0), new TimeSpan(0, 0, item.LDGTime, 0)) + ")"; Color flightTimeColor; if (item.FlightTime.TotalMinutes == item.BlockTime.TotalMinutes) { flightTimeColor = Color.Black; } else { double persent = Math.Abs(1 - (item.FlightTime.TotalMinutes / item.BlockTime.TotalMinutes)) * 100; if (persent <= 3) { flightTimeColor = Color.FromArgb(Highlight.Green.Color); } else if (persent <= 10) { flightTimeColor = Color.FromArgb(Highlight.Yellow.Color); } else { flightTimeColor = Color.FromArgb(Highlight.Red.Color); } } var perDaysFlight = Lifelength.Zero; var perDaysBlock = Lifelength.Zero; var flights = _flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date.AddMinutes(f.TakeOffTime) <= item.FlightDate.Date.AddMinutes(item.TakeOffTime)).ToList(); foreach (AircraftFlight aircraftFlight in flights) { perDaysFlight.Add(aircraftFlight.FlightTimeLifelength); perDaysBlock.Add(aircraftFlight.BlockTimeLifelenght); } var aircraftFlightLifelenght = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight(item); var aircraftBlockLifelenght = aircraftFlightLifelenght + (perDaysBlock - perDaysFlight); subItems.Add(CreateRow(item.PageNo, item.PageNo)); subItems.Add(CreateRow(dateString, date)); subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber)); subItems.Add(CreateRow(route, route)); subItems.Add(CreateRow(flightTimeString, item.FlightTime, flightTimeColor)); subItems.Add(CreateRow(UsefulMethods.TimeToString(item.BlockTime), item.BlockTime, flightTimeColor)); subItems.Add(CreateRow(perDaysFlight.ToHoursMinutesAndCyclesFormat("", ""), perDaysFlight)); subItems.Add(CreateRow(perDaysBlock.ToHoursMinutesAndCyclesFormat("", ""), perDaysBlock)); subItems.Add(CreateRow(aircraftFlightLifelenght.ToHoursMinutesAndCyclesFormat("", ""), aircraftFlightLifelenght)); subItems.Add(CreateRow(aircraftBlockLifelenght.ToHoursMinutesAndCyclesFormat("", ""), aircraftFlightLifelenght)); #region колонки для отображения наработок по двигателям и ВСУ foreach (BaseComponent baseComponent in _enginesAndAPU) { bool shouldFillSubItems = false; var baseComponentFlightLifeLenght = Lifelength.Null; var baseComponentBlockLifeLenght = Lifelength.Null; var lastKnownTransferRecBeforFlight = baseComponent.TransferRecords.GetLastKnownRecord(item.FlightDate.Date); if (lastKnownTransferRecBeforFlight != null && lastKnownTransferRecBeforFlight.DestinationObjectType == SmartCoreType.Aircraft && lastKnownTransferRecBeforFlight.DestinationObjectId == _parentAircraft.ItemId) { shouldFillSubItems = true; var flightsWhichOccuredAfterInstallationOfBd = flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date >= lastKnownTransferRecBeforFlight.RecordDate).ToList(); var perDaysFlightForBd = Lifelength.Zero; var perDaysBlockForBd = Lifelength.Zero; foreach (var flight in flightsWhichOccuredAfterInstallationOfBd) { perDaysFlightForBd.Add(flight.FlightTimeLifelength); perDaysBlockForBd.Add(flight.BlockTimeLifelenght); } baseComponentFlightLifeLenght = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight(baseComponent, item); baseComponentBlockLifeLenght = baseComponentFlightLifeLenght + (perDaysBlockForBd - perDaysFlightForBd); } Color baseComponentTimeColor = Color.Black; if (shouldFillSubItems && baseComponent.BaseComponentType != BaseComponentType.Apu) { var baseDetailFlightWorkTime = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelength(item, baseComponent); if (item.FlightTime.TotalMinutes == Convert.ToDouble(baseDetailFlightWorkTime.TotalMinutes)) { baseComponentTimeColor = Color.Black; } else { double persent = Math.Abs(1 - (Convert.ToDouble(baseDetailFlightWorkTime.TotalMinutes) / item.FlightTime.TotalMinutes)) * 100; if (persent <= 3) { baseComponentTimeColor = Color.FromArgb(Highlight.Green.Color); } else if (persent <= 10) { baseComponentTimeColor = Color.FromArgb(Highlight.Yellow.Color); } else { baseComponentTimeColor = Color.FromArgb(Highlight.Red.Color); } } } var baseDetailHaveOverhaulDirective = BaseDetailHaveOverhaul(baseComponent); var lastOverhaul = GetLastOverhaul(baseComponent); if (baseComponent.BaseComponentType == BaseComponentType.Engine) { if (shouldFillSubItems) { subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght)); subItems.Add(CreateListViewSubItem(Color.Black, baseComponentBlockLifeLenght)); if (baseDetailHaveOverhaulDirective) { if (lastOverhaul != null) { var sinceOverhaulFlight = baseComponentFlightLifeLenght.IsGreater(lastOverhaul.OnLifelength) ? baseComponentFlightLifeLenght - lastOverhaul.OnLifelength : Lifelength.Null; subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulFlight)); var sinceOverhaulBlock = baseComponentBlockLifeLenght.IsGreater(lastOverhaul.OnLifelength) ? baseComponentBlockLifeLenght - lastOverhaul.OnLifelength : Lifelength.Null; subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulBlock)); } else { subItems.Add(CreateListViewSubItem("N/A")); subItems.Add(CreateListViewSubItem("N/A")); } } } else { subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); if (baseDetailHaveOverhaulDirective) { subItems.Add(CreateListViewSubItem(string.Empty)); subItems.Add(CreateListViewSubItem(string.Empty)); } } } else if (baseComponent.BaseComponentType == BaseComponentType.Apu) { if (shouldFillSubItems) { subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght)); if (baseDetailHaveOverhaulDirective) { if (lastOverhaul != null) { var sinceOverhaulFlight = baseComponentFlightLifeLenght - lastOverhaul.OnLifelength; subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulFlight)); } else { subItems.Add(CreateListViewSubItem("N/A")); } } } else { subItems.Add(CreateListViewSubItem(string.Empty)); if (baseDetailHaveOverhaulDirective) { subItems.Add(CreateListViewSubItem(string.Empty)); } } } } #endregion subItems.Add(CreateRow(atlb?.ATLBNo ?? "AtlB deleted", atlb?.ATLBNo)); subItems.Add(CreateRow(item.ListViewChecksPerformed, item.ListViewChecksPerformed)); subItems.Add(CreateRow(author, author)); } else { subItems.Add(CreateRow(item.PageNo, item.PageNo)); subItems.Add(CreateRow(dateString, date)); subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber)); subItems.Add(CreateRow(item.StationToId.ShortName, item.StationToId.ShortName)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); #region колонки для отображения наработок по двигателям и ВСУ foreach (var baseComponent in _enginesAndAPU) { if (baseComponent.BaseComponentType == BaseComponentType.Engine) { subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); if (baseComponent.ComponentDirectives.Count(dd => dd.DirectiveType == ComponentRecordType.Overhaul) > 0) { subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); } } else if (baseComponent.BaseComponentType == BaseComponentType.Apu) { subItems.Add(CreateRow("", "")); if (baseComponent.ComponentDirectives.Count(dd => dd.DirectiveType == ComponentRecordType.Overhaul) > 0) { subItems.Add(CreateRow("", "")); } } } #endregion subItems.Add(CreateRow(atlb?.ATLBNo, atlb?.ATLBNo)); subItems.Add(CreateRow(item.ListViewChecksPerformed, item.ListViewChecksPerformed)); subItems.Add(CreateRow(author, author)); } return(subItems); }
protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e) { _initialDirectiveArray.Clear(); _resultDirectiveArray.Clear(); AnimatedThreadWorker.ReportProgress(0, "load directives"); try { if (_currentForecast == null) { var aircrafts = GlobalObjects.AircraftsCore.GetAllAircrafts(); foreach (var aircraft in aircrafts) { _initialDirectiveArray.AddRange(GlobalObjects.DirectiveCore.GetDeferredItems(null, aircraft)); } } else { AnimatedThreadWorker.ReportProgress(20, "calculation directives"); GlobalObjects.AnalystCore.GetDirectives(_currentForecast, _currentPrimaryDirectiveType); DirectiveCollection dirC = _currentForecast.DirectiveCollections[_currentPrimaryDirectiveType]; foreach (Directive directive in dirC) { _initialDirectiveArray.Add(directive); } } } catch (Exception ex) { Program.Provider.Logger.Log("Error while loading directives", ex); } AnimatedThreadWorker.ReportProgress(40, "filter directives"); if (_adType != ADType.None) { List <Directive> forDeleting = _initialDirectiveArray.Where(primaryDirective => primaryDirective.ADType != _adType).ToList(); foreach (Directive directive in forDeleting) { _initialDirectiveArray.Remove(_initialDirectiveArray.GetItemById(directive.ItemId)); } } #region Калькуляция состояния директив AnimatedThreadWorker.ReportProgress(60, "calculation of directives"); foreach (Directive pd in _initialDirectiveArray) { //GlobalObjects.PerformanceCalculator.GetNextPerformance(pd); GlobalObjects.MTOPCalculator.CalculateDirectiveNew(pd); } AnimatedThreadWorker.ReportProgress(70, "filter directives"); FilterItems(_initialDirectiveArray, _resultDirectiveArray); if (AnimatedThreadWorker.CancellationPending) { e.Cancel = true; return; } if (AnimatedThreadWorker.CancellationPending) { e.Cancel = true; return; } #endregion #region Сравнение с рабочими пакетами AnimatedThreadWorker.ReportProgress(90, "comparison with the Work Packages"); //загрузка рабочих пакетов для определения //перекрытых ими выполнений задач if (_openPubWorkPackages == null) { _openPubWorkPackages = new CommonCollection <WorkPackage>(); } _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Opened)); _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Published)); //сбор всех записей рабочих пакетов для удобства фильтрации List <WorkPackageRecord> openWPRecords = new List <WorkPackageRecord>(); foreach (WorkPackage openWorkPackage in _openPubWorkPackages) { openWPRecords.AddRange(openWorkPackage.WorkPakageRecords); } foreach (Directive task in _resultDirectiveArray) { if (task == null || task.NextPerformances == null || task.NextPerformances.Count <= 0) { continue; } //Проход по всем след. выполнениям чека и записям в рабочих пакетах //для поиска перекрывающихся выполнений List <NextPerformance> performances = task.NextPerformances; foreach (NextPerformance np in performances) { //поиск записи в рабочих пакетах по данному чеку //чей номер группы выполнения (по записи) совпадает с расчитанным WorkPackageRecord wpr = openWPRecords.Where(r => r.PerformanceNumFromStart == np.PerformanceNum && r.WorkPackageItemType == task.SmartCoreObjectType.ItemId && r.DirectiveId == task.ItemId).FirstOrDefault(); if (wpr != null) { np.BlockedByPackage = _openPubWorkPackages.GetItemById(wpr.WorkPakageId); } } } if (AnimatedThreadWorker.CancellationPending) { e.Cancel = true; return; } #endregion #region Загрузка Котировочных ордеров AnimatedThreadWorker.ReportProgress(95, "Load Quotations"); //загрузка рабочих пакетов для определения //перекрытых ими выполнений задач if (_openPubQuotations == null) { _openPubQuotations = new CommonCollection <RequestForQuotation>(); } _openPubQuotations.Clear(); _openPubQuotations.AddRange(GlobalObjects.PurchaseCore.GetRequestForQuotation(CurrentAircraft, new[] { WorkPackageStatus.Opened, WorkPackageStatus.Published })); if (AnimatedThreadWorker.CancellationPending) { e.Cancel = true; return; } #endregion AnimatedThreadWorker.ReportProgress(100, "Complete"); }
public Aircraft GetAircraftById(int aircraftId) { return(_aircrafts.GetItemById(aircraftId)); }
/// <summary> /// Загружает все элементы рабочего пакета /// </summary> /// <param name="package"></param> public void LoadDirectivePackageItems <T, TV>(T package) where T : AbstractDirectivePackage <TV>, new() where TV : BaseDirectivePackageRecord, new() { package.CanPublish = package.CanClose = true; package.BlockPublishReason = ""; package.MinClosingDate = null; package.MaxClosingDate = null; // Компоненты package.PackageRecords.Clear(); package.PackageRecords.AddRange(_loader.GetObjectListAll <TV>(BaseDirectivePackageRecord.ParentIdProperty, package.ItemId)); foreach (TV record in package.PackageRecords) { record.ParentPackage = package; } IEnumerable <IGrouping <SmartCoreType, TV> > groupedRecordsByTaskType = package.PackageRecords.GroupBy(pr => pr.PackageItemType); foreach (IGrouping <SmartCoreType, TV> groupedRecords in groupedRecordsByTaskType) { #region загрузка Базовых деталей if (groupedRecords.Key == SmartCoreType.BaseComponent) { foreach (TV adWpr in groupedRecords) { IDirective d = _componentCore.GetBaseComponentById(adWpr.DirectiveId); if (d != null) { adWpr.Task = d; } else { package.PackageRecords.RemoveById(adWpr.ItemId); } } continue; } #endregion if (groupedRecords.Key.ObjectType == null) { continue; } Type objectType = groupedRecords.Key.ObjectType; ICommonFilter filter = new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, groupedRecords.Select(wpr => wpr.DirectiveId).ToArray()); ICommonCollection directiveCollection = _loader.GetObjectCollection(objectType, new[] { filter }, true, true); if (directiveCollection.Count > 0) { foreach (TV adWpr in groupedRecords) { IDirective d = directiveCollection.GetItemById(adWpr.DirectiveId) as IDirective; if (d != null) { adWpr.Task = d; } else { package.PackageRecords.RemoveById(adWpr.ItemId); } } } } // ставим флаг о том, что все элементы рабочего пакета считаны package.PackageItemsLoaded = true; }