예제 #1
0
 private void FormGroupReportWin_FormClosed(object sender, FormClosedEventArgs e)
 {
     using (var sys = new SysTabl(General.ReporterFile))
     {
         sys.PutSubValue("FormGroupReports", "BeginPeriod", BeginPeriod.Text);
         sys.PutSubValue("FormGroupReports", "EndPeriod", EndPeriod.Text);
     }
     GeneralRep.CloseForm(ReporterCommand.GroupReports);
 }
예제 #2
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);
     }
 }
예제 #3
0
 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     using (var sys = new SysTabl(Different.GetInfoTaskDir() + @"Controller\ControllerData.accdb"))
     {
         sys.PutSubValue("DebugWriteOPC", "OpcServerName", OpcServerName.Text);
         sys.PutSubValue("DebugWriteOPC", "Node", Node.Text);
         sys.PutSubValue("DebugWriteOPC", "OpcTag", OpcTag.Text);
         sys.PutSubValue("DebugWriteOPC", "DataType", DataType.Text);
         sys.PutSubValue("DebugWriteOPC", "TagValue", TagValue.Text);
     }
 }
예제 #4
0
        //Загрузить проект projectFile, compileDir - каталог для компиляции
        public string LoadProject(string projectFile)
        {
            StartAtom(Atom.LoadProject, true, projectFile);
            CountsToZero();
            if (State == State.Closed)
            {
                AddError("Копилятор уже был закрыт");
            }
            else
            {
                try
                {
                    if (!DaoDb.Check(projectFile, new[] { "CalcParams", "CalcSubParams", "CalcParamsArchive", "Objects", "Signals", "SignalsInUse", "GraficsList", "GraficsValues" }))
                    {
                        AddError("Указан неправильный файл проекта", null, projectFile);
                    }
                    else
                    {
                        using (var db = new DaoDb(projectFile))
                        {
                            using (var rec = new RecDao(db, "SELECT * FROM Providers WHERE (ProviderCode='HandInputSource') OR (ProviderCode='HandInputSqlSource')"))
                                if (rec.HasRows())
                                {
                                    HandInputSource = rec.GetString("ProviderName");
                                }
                            using (var sys = new SysTabl(db))
                            {
                                _code = sys.SubValue("ProjectInfo", "Project");
                                _name = sys.SubValue("ProjectInfo", "ProjectName");
                                sys.PutSubValue("ProjectInfo", "HandInputSource", HandInputSource);

                                //ab
                                _objectsFile = sys.Value("ObjectsFile");
                                if (string.IsNullOrEmpty(_objectsFile))
                                {
                                    _objectsFile = projectFile;
                                }
                                if (_objectsFile != projectFile)
                                {
                                    if (!DaoDb.Check(projectFile, new[] { "CalcParams", "CalcSubParams", "CalcParamsArchive", "Objects", "Signals", "SignalsInUse", "GraficsList", "GraficsValues" }))
                                    {
                                        AddError("В проекте указан неправильный файл списка объектов", null, projectFile);
                                        _objectsFile = projectFile;
                                    }
                                }
                                //\ab
                            }
                        }
                        _projectFile = projectFile;
                    }
                }
                catch (Exception ex)
                {
                    AddError("Указан неправильный файл проекта", ex, projectFile);
                }
            }
            return(FinishAtom(State.Project, State.Empty, "Проект:" + _code + ", " + _name));
        }
예제 #5
0
        //Компиляция проекта, возвращает количество ошибок компиляции
        public string CompileProject()
        {
            //OnlyOn = true;
            CountsToZero();
            if (State == State.Project || State == State.Empty)//Если не загружены, то загружаем сигналы
            {
                string s = LoadSignals();
                if (s != "")
                {
                    return(s);
                }
            }
            else
            {
                foreach (var sig in SignalsList)
                {
                    sig.InUse         = false;
                    sig.InUseSource   = false;
                    sig.InUseReceiver = false;
                }
            }
            StartAtom(Atom.CompileProject);
            if (State == State.Closed)
            {
                AddError("Копилятор уже был закрыт");
            }
            else
            {
                try
                {
                    //Обнуления поля Expr и т.п.
                    using (var daodb = new DaoDb(_projectFile))
                    {
                        //daodb.Execute("UPDATE CalcParams SET CalcParams.Expr = Null, CalcParams.ErrMess = Null, CalcParams.UsedUnits = Null, CalcParams.CalcNumber = 0;");
                        foreach (string tab in new[] { "CalcParams", "CalcSubParams" })
                        {
                            using (var rec = new RecDao(daodb, tab))
                                while (rec.Read())
                                {
                                    rec.Put("Expr", (string)null);
                                    try { rec.Put("UsedUnits", (string)null); } catch { }
                                    rec.Put("CalcNumber", 0);
                                    rec.Put("ErrMess", (string)null);
                                    rec.Update();
                                }
                        }
                        CalcParams.Clear();
                        CalcParamsId.Clear();
                        CalcParamsAll.Clear();
                        Grafics.Clear();
                        ArchiveParams.Clear();
                        Prevs.Clear();
                        HandSignals.Clear();
                        CalcParamNumber = 0;

                        Procent = 10;
                        AddEvent("Загрузка графиков");
                        using (var rec = new RecDao(daodb, "SELECT GraficsList.Code, GraficsList.Dimension FROM GraficsList"))
                            while (rec.Read())
                            {
                                var gr = new Grafic(rec.GetString("Code"), rec.GetInt("Dimension"));
                                Grafics.Add(gr.Code, gr);
                            }

                        Procent = 15;
                        AddEvent("Загрузка параметров");
                        string spar = OnlyOn ? "WHERE (CalcOn = True) And (TaskOn = True)" : "";
                        using (var rec = new RecDao(daodb, "SELECT CalcParams.* FROM CalcParams " + spar + " ORDER BY CalcParamId"))
                            while (rec.Read())
                            {
                                new CalcParam(rec, this);
                            }

                        Procent = 25;
                        AddEvent("Загрузка подпараметров");
                        string ssub = OnlyOn ? "WHERE (CalcParams.CalcOn = True) And (CalcParams.TaskOn = True) And (CalcSubParams.CalcOn = True)" : "";
                        using (var rec = new RecDao(daodb, "SELECT CalcSubParams.* FROM CalcParams INNER JOIN CalcSubParams ON CalcParams.CalcParamId = CalcSubParams.OwnerId " + ssub))
                            while (rec.Read())
                            {
                                new CalcParam(rec, this, true);
                            }

                        Procent = 35;
                        AddEvent("Разбор выражений");
                        foreach (var cp in CalcParamsId.Values)
                        {
                            cp.Parse();
                        }

                        IsPrevAbs     = false;
                        IsLastBase    = false;
                        IsLastHour    = false;
                        IsLastDay     = false;
                        IsManyBase    = false;
                        IsManyHour    = false;
                        IsManyDay     = false;
                        IsManyMoments = false;

                        Procent = 45;
                        AddEvent("Компиляция выражений");
                        foreach (var cp in CalcParamsId.Values)
                        {
                            if (cp.Stage == CompileStage.NotStarted)
                            {
                                cp.Compile(null);
                            }

                            /*foreach (var d in cp.MethodsId.Values)
                             *  if (d.Stage == CompileStage.NotStarted)
                             *      d.Compile(null);*/
                        }

                        FindCycleLinks();

                        ErrorsCount   = 0;
                        UsedProviders = new SetS();
                        IsAbsolute    = false;
                        IsPeriodic    = false;
                        IsMoments     = false;

                        Procent = 60;
                        AddEvent("Сохранение результатов компиляции параметров");
                        using (var rec = new RecDao(daodb, "SELECT CalcParams.* FROM CalcParams " + spar + " ORDER BY CalcParamId"))
                            SaveCompile(rec, false);

                        Procent = 70;
                        AddEvent("Сохранение результатов компиляции подпараметров");
                        using (var rec = new RecDao(daodb, "SELECT CalcSubParams.* FROM CalcParams INNER JOIN CalcSubParams ON CalcParams.CalcParamId = CalcSubParams.OwnerId " + ssub + " ORDER BY CalcParams.CalcParamId;"))
                            SaveCompile(rec, true);
                    }

                    Procent = 80;
                    AddEvent("Сохранение списка используемых сигналов и графиков");
                    SaveInUse();

                    Procent = 90;
                    AddEvent("Сохранение архивных параметров");
                    SaveArchive();

                    Procent = 96;
                    AddEvent("Сохранение параметров функций Пред");
                    SavePrevs();

                    Procent = 99;
                    SaveUsedProviders();
                    using (var sys = new SysTabl(_projectFile))
                    {
                        sys.PutSubValue("CompileStatus", "LastTimeCompile", DateTime.Now.ToString());
                        sys.PutSubValue("CompileStatus", "ErrorsCount", ErrorsCount.ToString());
                    }
                }
                catch (Exception ex)
                {
                    AddError("Ошибка компилятора", ex);
                }
            }
            return(FinishAtom(State.Compiled, State.Signals, "Проект: " + _code + ";  Ошибок: " + ErrorsCount + ";" + Different.NewLine
                              + "Параметров: " + CalcParamsId.Count + "; Архивных параметров:" + ArchiveParams.Count + ";  Сигналов: " + SignalsInUseCount));
        }
예제 #6
0
        //Отметка используемых провайдеров и ручного ввода
        private void SaveUsedProviders()
        {
            try
            {
                using (var db = new DaoDb(_projectFile))
                {
                    using (var rec = new RecDao(db, "Providers"))
                        while (rec.Read())
                        {
                            switch (rec.GetString("ProviderType").ToProviderType())
                            {
                            case ProviderType.Communicator:
                                rec.Put("IsUsed", true);
                                break;

                            case ProviderType.Source:
                            case ProviderType.Receiver:
                                rec.Put("IsUsed", UsedProviders.Contains(rec.GetString("ProviderName")));
                                break;

                            case ProviderType.Archive:
                                rec.Put("IsUsed", UsedProviders.Contains("Archive"));
                                break;
                            }
                        }

                    using (var sys = new SysTabl(db))
                    {
                        sys.PutSubValue("ArchiveOptions", "IsAbsolute", IsAbsolute ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsPeriodic", IsPeriodic ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsMoments", IsMoments ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsPrevAbs", IsPrevAbs ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsLastBase", IsLastBase ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsLastHour", IsLastHour ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsLastDay", IsLastDay ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsManyBase", IsManyBase ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsManyHour", IsManyHour ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsManyDay", IsManyDay ? "True" : "False");
                        sys.PutSubValue("ArchiveOptions", "IsManyMoments", IsManyMoments ? "True" : "False");
                    }
                }
            }
            catch (Exception ex)
            {
                AddError("Ошибка сохранения признаков использования провайдеров и ручного ввода", ex);
            }
        }
예제 #7
0
        public void InstanceFuns()
        {
            using (var sys = new SysTabl(CopyFile(""), false))
            {
                Assert.IsNotNull(sys);
                Assert.AreEqual("OptionsValue", sys.Value("FileOptions"));
                Assert.AreEqual("ParamValue", sys.Value("Param"));
                Assert.AreEqual("OptionsTag", sys.Tag("FileOptions"));
                Assert.AreEqual("ParamTag", sys.Tag("Param"));
                sys.PutValue("Param", "s1", "t1");
                Assert.AreEqual("s1", sys.Value("Param"));
                Assert.AreEqual("t1", sys.Tag("Param"));
                sys.PutValue("Param", 22, "t2");
                Assert.AreEqual("22", sys.Value("Param"));
                Assert.AreEqual("t2", sys.Tag("Param"));
                sys.PutValue("Param", 33.3, "t3");
                Assert.AreEqual("33,3", sys.Value("Param"));
                Assert.AreEqual("t3", sys.Tag("Param"));
                sys.PutValue("Param", new DateTime(2000, 1, 1));
                Assert.AreEqual("01.01.2000 0:00:00", sys.Value("Param"));
                Assert.AreEqual("t3", sys.Tag("Param"));
                sys.PutValue("Param", true, "");
                Assert.AreEqual("True", sys.Value("Param"));
                Assert.AreEqual("", sys.Tag("Param"));
                sys.PutTag("Param", "Tag", "Value");
                Assert.AreEqual("Value", sys.Value("Param"));
                Assert.AreEqual("Tag", sys.Tag("Param"));
            }

            var db = new DaoDb(CopyFile(""));

            using (var sys = new SysTabl(db))
            {
                Assert.IsNotNull(sys);
                Assert.AreEqual("OptionsValue", sys.Value("FileOptions"));
                Assert.AreEqual("ParamValue", sys.Value("Param"));
                Assert.AreEqual("OptionsTag", sys.Tag("FileOptions"));
                Assert.AreEqual("ParamTag", sys.Tag("Param"));

                Assert.AreEqual("Тестовый файл", sys.SubValue("FileOptions", "FileDescription"));
                Assert.AreEqual("DaoTest", sys.SubValue("FileOptions", "FileType"));
                Assert.AreEqual("2.0.0", sys.SubValue("FileOptions", "FileVersion"));
                Assert.AreEqual("11.07.2016", sys.SubValue("FileOptions", "FileVersionDate"));
                Assert.AreEqual("SubValue", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual(null, sys.SubTag("FileOptions", "FileDescription"));
                Assert.AreEqual("SubTag", sys.SubTag("Param", "SubParam"));
                sys.PutSubValue("Param", "SubParam", "s1", "t1");
                Assert.AreEqual("s1", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("t1", sys.SubTag("Param", "SubParam"));
                sys.PutSubValue("Param", "SubParam", 22, "t2");
                Assert.AreEqual("22", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("t2", sys.SubTag("Param", "SubParam"));
                sys.PutSubValue("Param", "SubParam", 33.3, "t3");
                Assert.AreEqual("33,3", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("t3", sys.SubTag("Param", "SubParam"));
                sys.PutSubValue("Param", "SubParam", new DateTime(2000, 1, 1));
                Assert.AreEqual("01.01.2000 0:00:00", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("t3", sys.SubTag("Param", "SubParam"));
                sys.PutSubValue("Param", "SubParam", true, "");
                Assert.AreEqual("True", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("", sys.SubTag("Param", "SubParam"));
                sys.PutSubTag("Param", "SubParam", "Tag", "Value");
                Assert.AreEqual("Value", sys.SubValue("Param", "SubParam"));
                Assert.AreEqual("Tag", sys.SubTag("Param", "SubParam"));
            }
            db.Dispose();
        }
예제 #8
0
        //Запись в SysTabl ведомости
        private void WriteSysTabl()
        {
            using (var sys = new SysTabl(_vedDb))
            {
                sys.PutSubValue("ProjectOptions", "Project", _project.Code);
                sys.PutSubValue("ProjectOptions", "ProjectName", _project.Name);
                sys.PutSubValue("ProjectOptions", "ProjectDescription", _project.Description);
                sys.PutSubValue("ProjectOptions", "ProjectFile", _project.File);
                sys.PutSubValue("TaskOptions", "Task", _task);
                sys.PutSubValue("TaskOptions", "TaskDescription", _taskDescription);

                sys.PutSubValue("VedOptions", "VedName", _task.IsEmpty() ? _project.Name : _task);
                sys.PutSubValue("VedOptions", "VedDescription", _task.IsEmpty() ? _project.Description : _taskDescription);
                sys.PutSubValue("VedOptions", "PeriodBegin", _project.ThreadCalc.PeriodBegin.ToString());
                sys.PutSubValue("VedOptions", "PeriodEnd", _project.ThreadCalc.PeriodEnd.ToString());
                sys.PutSubValue("VedOptions", "CreationTime", DateTime.Now.ToString());

                string tag = _project.VedTag;
                if (!tag.IsEmpty() && !tag.EndsWith(";"))
                {
                    tag += ";";
                }
                sys.PutTag("VedTag", tag + _taskTag);
            }
        }
예제 #9
0
        //Обновляет указаный файл указанного типа то текущей версии, silentMode - не выводить сообщение о несовместимости
        private string UpdateVersion(DbMode dbmode, string dbPath, bool silentMode)
        {
            try
            {
                if (dbPath.IsEmpty())
                {
                    return("");
                }
                var dbFile = new FileInfo(dbPath);
                if (!dbFile.Exists)
                {
                    return("");
                }
                int status = VersionStatus(dbPath, dbmode);
                DefineConstants(dbmode);
                string mess = _fileTypeStr + " " + dbPath + " имеет устаревшую версию. ";
                if (status <= 0)
                {
                    return("");
                }
                if (status == 2 && !silentMode && !Different.MessageQuestion("В случае обновления данный файл будет некорректно работать на более старых версиях системы InfoTask\nОбновить версию файла автоматически?"))
                {
                    return("");
                }
                var tmpPath = dbFile.Directory + @"\tmp__" + dbFile.Name;
                try { dbFile.CopyTo(tmpPath, true); }
                catch
                {
                    Different.MessageError(mess += "\nНе удается скопировать файл в " + tmpPath);
                    return(mess);
                }
                using (_db = new DaoDb(tmpPath))
                    foreach (var d in _delegates)
                    {
                        if (d.Version > _dbVersion)
                        {
                            try
                            {
                                d.Action();
                                _dbVersion = d.Version;
                            }
                            catch (Exception ex)
                            {
                                return(ex.MessageError(mess + "\nОшибка обновления файла"));
                            }
                        }
                    }
                using (var sys = new SysTabl(tmpPath))
                {
                    sys.PutSubValue("AppOptions", "AppVersionDate", _dbVersion.Date);
                    sys.PutSubValue("AppOptions", "AppVersion", _dbVersion.ToString());
                }

                var tmpFile = new FileInfo(tmpPath);
                try
                {
                    dbFile.Delete();
                    Thread.Sleep(300);
                    tmpFile.CopyTo(dbPath, true);
                }
                catch
                {
                    Different.MessageError(mess += "При обновлении произошла ошибка, файл занят. Файл не был обновлен. Обновленная версия содержится в файле " + @"\tmp__" + dbFile.Name);
                    return(mess);
                }
                try
                {
                    Thread.Sleep(400);
                    tmpFile.Delete();
                }
                catch (Exception ex)
                {
                    ex.MessageError("");
                }
                return("");
            }
            finally { GC.Collect(); }
        }