//Сохранение периода расчета в ControllerData, saveStartStop = true - сохраняются также время запуска расчета, время останова и т.д. private void SavePeriod(bool saveStartStop) { try { _lastErrorPos = saveStartStop || _lastErrorPos != 1 ? 0 : 2; UpdateTablo(); _sysResult.PutSubValue("PeriodInfo", "PeriodBegin", PeriodBegin.ToString()); _sysResult.PutSubValue("PeriodInfo", "PeriodEnd", PeriodEnd.ToString()); if (_lastErrorTime == PeriodBegin) { _sysResult.PutSubValue("LastErrorInfo", "ErrorText", _lastErrorText); _sysResult.PutSubValue("LastErrorInfo", "ErrorPeriodBegin", _lastErrorTime.ToString()); } if (saveStartStop) { _lastErrorPos = 0; _sysResult.PutSubValue("PeriodInfo", "CalcName", CalcName); _sysResult.PutSubValue("PeriodInfo", "StartMoment", StartMoment.ToString()); _sysResult.PutSubValue("PeriodInfo", "StartTime", StartTime.ToString()); _sysResult.PutSubValue("PeriodInfo", "StopTime", StopTime.ToString()); _sysResult.PutSubValue("PeriodInfo", "IsStopTime", IsStopTime ? "True" : "False"); } } catch (Exception ex) { AddError("Ошибка записи в SysTabl файла результатов", ex); } }
//Чтение среза protected internal override ValuesCount ReadCut() { var vc = new ValuesCount(); DateTime d = ClonerConnect.RemoveMinultes(PeriodBegin); AddEvent("Чтение среза действительных значений из таблицы изменений"); _useStrTable = false; _useCutTable = false; vc += ReadWhole(ObjectsList, d, PeriodBegin, true); if (vc.IsFail) { return(vc); } AddEvent("Чтение среза действительных значений из таблицы срезов"); _useStrTable = false; _useCutTable = true; vc += ReadWhole(ObjectsList, d.AddSeconds(-1), PeriodBegin.AddSeconds(1), true); if (vc.IsFail) { return(vc); } AddEvent("Чтение среза строковых значений из таблицы изменений"); _useStrTable = true; _useCutTable = false; vc += ReadWhole(ObjectsList, d, PeriodBegin, true); if (vc.IsFail) { return(vc); } AddEvent("Чтение среза строковых значений из таблицы срезов"); _useStrTable = true; _useCutTable = true; vc += ReadWhole(ObjectsList, d.AddSeconds(-1), PeriodBegin.AddSeconds(1), true); return(vc); }
/// <summary> /// Return the HashCode of this object. /// </summary> /// <returns>The HashCode of this object.</returns> public override Int32 GetHashCode() { unchecked { return(DayOfWeek.GetHashCode() * 23 ^ PeriodBegin.GetHashCode() * 17 ^ PeriodEnd.GetHashCode()); } }
private void PeriodBegin_Validated(object sender, EventArgs e) { PeriodBegin.ChangePickerValue(PeriodBeginPicker); if (PeriodEnd.Enabled == false) { PeriodEnd.Text = PeriodBegin.Text.ToDateTime().Add(_book.PeriodLength).AddMonths(_book.MonthLengh).ToString(); } }
/// <summary> /// Compares two regular hours objects for equality. /// </summary> /// <param name="RegularHours">A regular hours object to compare with.</param> /// <returns>True if both match; False otherwise.</returns> public Boolean Equals(RegularHours RegularHours) { if ((Object)RegularHours == null) { return(false); } return(DayOfWeek.Equals(RegularHours.DayOfWeek) && PeriodBegin.Equals(RegularHours.PeriodBegin) && PeriodEnd.Equals(RegularHours.PeriodEnd)); }
/// <summary> /// Return a text representation of this object. /// </summary> public override String ToString() { if (DayOfWeek == DayOfWeek.Sunday && PeriodBegin.Hour == 0 && PeriodBegin.Minute == 0 && PeriodEnd.Hour == 0 && PeriodEnd.Minute == 0) { return(""); } return(String.Concat(DayOfWeek.ToString(), "s from ", PeriodBegin.ToString(), " to ", PeriodEnd.ToString())); }
//Чтение среза protected override ValuesCount ReadCut() { var vc = new ValuesCount(); using (Start(0, 50)) //Срез по 4 минутам vc += ReadByParts(OutsId.Values, 200, PeriodBegin.AddMinutes(-4), PeriodBegin, true); if (vc.IsFail) { return(vc); } using (Start(50, 100)) //Срез по 61 минуте vc += ReadByParts(OutsId.Values, 200, PeriodBegin.AddMinutes(-61), PeriodBegin.AddMinutes(-4), true); return(vc); }
//Периодический расчет public void CalcPeriodic() { State = State.Calc; CalcMode = "Запущен"; WriteArchiveType = IntervalType.Periodic; using (StartAtom(Atom.Run)) //Запуск расчета { OpenResult(); SavePeriod(true); } //Подготовка расчета StartView(ViewAtom.PrepareCalc, PrepareCalc, true); if (Projects.Values.Count(x => x.Otm) != 0) { while (State != State.FinishCalc && State != State.FinishWaiting) { while (General.Paused) { Thread.Sleep(1000); //Отладочная пауза для измерения памяти } State = State.Waiting; Start(Waiting);//Ожидание if (State == State.FinishWaiting) { break; } State = State.Calc;//Расчет StartView(ViewAtom.Calc, Cycle, true); //Следующий период расчета PeriodBegin = PeriodBegin.AddMinutes(PeriodLength); using (StartAtom(Atom.Next)) SavePeriod(false); if (State == State.FinishCalc) { break; } //Прерыватся, если достигнуто время остановки расчета if (IsStopTime && StopTime != null && StopTime.Value.Subtract(PeriodBegin).TotalSeconds < 1) { break; } UpdateHistory(true); } } using (StartAtom(Atom.Stop)) //Остановка расчета CloseResult(); State = State.Stopped; CalcMode = "Остановлен"; }
//Обновляет текст и внешний вид табло с ошибкой private void UpdateTablo() { var t = PeriodBegin.Subtract(_lastErrorTime); if (t.TotalSeconds < -1) { TabloVisible = false; } else { TabloVisible = t.TotalDays <= 3; TabloColor = _lastErrorPos > 0 ? Brushes.Salmon : Brushes.White; TabloText = (_lastErrorText ?? "") + (_lastErrorTime == Different.MinDate ? "" : (", расчет от " + _lastErrorTime + "")); } }
private void RunCalc() { bool e; using (StartView(ViewAtom.Calc, true)) { if (Form != null) { Form.Invoke(new FormDelegate(UpdateFormTime)); } //Подготовка рачета Start(PrepareCalc, 0, 25); //Расчет if (!Start(Cycle, 25) && !IsPeriodic) { using (StartAtom(Atom.Stop)) { } } e = Command.IsError; } //Периодический расчет if (IsPeriodic) { while (!e && PeriodEnd.AddSeconds(1) < StopTime) { PeriodBegin = PeriodBegin.AddMinutes(PeriodLength); if (Form != null) { Form.Invoke(new FormDelegate(UpdateFormTime)); } using (StartAtom(Atom.Next)) { } StartView(ViewAtom.Calc, Cycle, true); e |= Command.IsError; } } }
//Чтение среза protected override ValuesCount ReadCut() { return(ReadByParts(OutsId.Values, 2, PeriodBegin.AddMinutes(-5), PeriodBegin, true) + ReadByParts(OutsId2.Values, 2, PeriodBegin.AddDays(-1), PeriodBegin, true, QueryValues2, DefineOut2)); }
//Чтение среза protected override ValuesCount ReadCut() { return(ReadWhole(Outs.Values, PeriodBegin.AddMinutes(-30), PeriodBegin, true)); }
private void FormReportWin_Load(object sender, EventArgs e) { _book = GeneralRep.ActiveBook; var sys = _book.SysPage; using (_book.StartAtom("Открытие формы построения отчета")) { try { _book.AddEvent("Настройка внешнего вида"); panelPeriod.Visible = !_book.OnlyAbsolute; butSaveHandInput.Visible = _book.HandInputProjects.Count > 0; //Загрузка данных с SysPage IntervalName.Text = sys.GetValue("DefaultCalcName"); if (IntervalName.Text.IsEmpty()) { IntervalName.Text = sys.GetValue("CalcName"); } FillPages.Text = sys.GetValue("FillPages"); SaveToArchive.Checked = sys.GetBoolValue("SaveToArchive"); PeriodEnd.Enabled = PeriodEndPicker.Enabled = _book.DifferentLength != DifferentLength.Equals; string s = ""; int d = sys.GetIntValue("DayLength"); if (d != 0) { s += d + " сут "; } d = sys.GetIntValue("HourLength"); if (d != 0) { s += d + " час "; } d = sys.GetIntValue("MinuteLength"); if (d != 0) { s += d + " мин "; } PeriodLength.Text = s; butPreviousInterval.Enabled = butNextInterval.Enabled = s != ""; switch (_book.DefaultPeriod) { case "Previous": _book.SysPage.GetControl(PeriodBegin); _book.SysPage.GetControl(PeriodEnd); PeriodBegin.ChangePickerValue(PeriodBeginPicker); PeriodEnd.ChangePickerValue(PeriodEndPicker); break; case "Now": SetNowPeriod(); break; } UpdateSourcesTime(); } catch (Exception ex) { GeneralRep.ShowError("Ошибка при открытии формы построения отчетов", ex); } } }
//Чтение среза protected override ValuesCount ReadCut() { return(ReadByParts(OutsId.Values, 500, PeriodBegin.AddSeconds(-60), PeriodBegin, true)); }
//Обновление времени в форме индикатора private void UpdateFormTime() { Form.PeriodBegin.Text = PeriodBegin.ToString(); Form.PeriodEnd.Text = PeriodEnd.ToString(); Form.Refresh(); }