Example #1
0
 //Сохранение периода расчета в 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);
     }
 }
Example #2
0
        //Чтение среза
        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);
        }
Example #3
0
 /// <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());
     }
 }
Example #4
0
 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();
     }
 }
Example #5
0
        /// <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));
        }
Example #6
0
        /// <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()));
        }
Example #7
0
        //Чтение среза
        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);
        }
Example #8
0
        //Периодический расчет
        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 = "Остановлен";
        }
Example #9
0
        //Обновляет текст и внешний вид табло с ошибкой
        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 + ""));
            }
        }
Example #10
0
        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;
                }
            }
        }
Example #11
0
 //Чтение среза
 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));
 }
Example #12
0
 //Чтение среза
 protected override ValuesCount ReadCut()
 {
     return(ReadWhole(Outs.Values, PeriodBegin.AddMinutes(-30), PeriodBegin, true));
 }
Example #13
0
        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);
                }
            }
        }
Example #14
0
 //Чтение среза
 protected override ValuesCount ReadCut()
 {
     return(ReadByParts(OutsId.Values, 500, PeriodBegin.AddSeconds(-60), PeriodBegin, true));
 }
Example #15
0
 //Обновление времени в форме индикатора
 private void UpdateFormTime()
 {
     Form.PeriodBegin.Text = PeriodBegin.ToString();
     Form.PeriodEnd.Text   = PeriodEnd.ToString();
     Form.Refresh();
 }