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); }
//Сохранение периода расчета в 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); } }
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); } }
//Загрузить проект 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)); }
//Компиляция проекта, возвращает количество ошибок компиляции 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)); }
//Отметка используемых провайдеров и ручного ввода 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); } }
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(); }
//Запись в 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); } }
//Обновляет указаный файл указанного типа то текущей версии, 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(); } }