public void TablsList() { var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\TablsList\"; var tdb = new DaoDb(tdir + "Project1GenData.accdb"); { var tlist = new TablsList(tdb); Assert.IsNotNull(tlist.Tabls); Assert.IsTrue(tlist.Tabls.ContainsKey("T1")); var t = tlist.Tabls["T1"]; Assert.AreEqual("T1", t.Code); Assert.AreEqual(1, t.MaxLevel); Assert.AreEqual(2, t.Fields.Count); Assert.AreEqual(2, t.Fields[0].Count); Assert.AreEqual(2, t.FieldsNums[0].Count); Assert.IsTrue(new TablField("StringField", 0, DataType.String).IsEquals(t.FieldsNums[0][0])); Assert.IsTrue(new TablField("IntField", 1, DataType.Integer).IsEquals(t.FieldsNums[0][1])); Assert.AreEqual(2, t.Fields[1].Count); Assert.AreEqual(2, t.FieldsNums[1].Count); Assert.IsTrue(new TablField("StringSub", 0, DataType.String).IsEquals(t.FieldsNums[1][0])); Assert.IsTrue(new TablField("IntSub", 1, DataType.Integer).IsEquals(t.FieldsNums[1][1])); Assert.IsTrue(tlist.Tabls.ContainsKey("T2")); t = tlist.Tabls["T2"]; Assert.AreEqual("T2", t.Code); Assert.AreEqual(0, t.MaxLevel); Assert.AreEqual(1, t.Fields.Count); Assert.AreEqual(1, t.Fields[0].Count); } }
private void butBreak_Click(object sender, EventArgs e) { if (Different.MessageQuestion("Прервать заполнение отчета?")) { try { _task.Abort(); _task = null; } catch { } Thread.Sleep(1000); try { _book.Controller = null; if (_book.CommandLog != null) { _book.AddEvent("Выполнение прервано"); } while (_book.Command != null) { _book.Finish("Выполнение прервано", true); } } catch { } SetCalcMode(false); } }
private void butArchiveRanges_Click(object sender, RoutedEventArgs e) { foreach (var p in ThreadC.Providers) { if (p.ProviderType == ProviderType.Archive) { var ar = (IArchive)General.RunProvider(p.Code, p.Name, p.Inf, (ThreadCalc)DataContext); string s = "Диапазоны архива результатов\n"; foreach (var proj in ThreadC.Projects.Values) { var ranges = ar.ReadRanges(proj.Code, ReportType.Calc); s += "\nПроект: " + proj.Code + "\n"; if (ranges.Count == 0) { s += "Архив пустой\n"; } foreach (var range in ranges) { s += range.Key.ToRussian() + ": " + range.Value.Begin + " - " + range.Value.End + "\n"; } } Different.MessageInfo(s); } } }
//Выводит сообщение c ошибкой текущей комманды public void ShowError() { if (Command != null && Command.IsError) { Different.MessageError(Command.ErrorMessage()); } }
private void butDeleteThread_Click(object sender, RoutedEventArgs e) { if (gridThreads.SelectedItem == null) { return; } var t = (ThreadController)gridThreads.SelectedItem; if (t.Projects.Count > 0) { Different.MessageError("Для удаления потока нужно сначала удалить из него все проекты"); return; } try { t.HandInputWindow.Close(); t.HandInputWindow = null; } catch {} try { t.SetupWindow.Close(); t.SetupWindow = null; } catch { } try { t.ThreadWindow.Close(); t.ThreadWindow = null; } catch { } App.ThreadsDic.Remove(t.Id); App.Threads.Remove(t); t.DeleteThread(); }
//Сдигает выделение после установки ссылки, isValue - производится запись свойства в ячейку, иначе установка ссылки public void MoveAfterLink() { try { var acell = GeneralRep.Application.ActiveCell; Range rcell = null; int d; if (int.TryParse(NextCellStep.Text, out d)) { if (NextCellShift.Text == "Вправо") { rcell = (Range)acell.Worksheet.Cells[acell.Row, acell.Column + d]; } if (NextCellShift.Text == "Вниз") { rcell = (Range)acell.Worksheet.Cells[acell.Row + d, acell.Column]; } if (rcell != null) { rcell.Activate(); } } else { Different.MessageError("Недопустимое значение шага перехода после установки ссылки: " + NextCellStep.Text); } } catch { } }
private void butDeleteAll_Click(object sender, RoutedEventArgs e) { if (Different.MessageQuestion("Удалить все сообщения из списка?")) { ThreadC.GridErrors.Clear(); } }
//Сохранение шаблона, templateName - имя шаблона private void SaveTemplate() { if (_template.IsEmpty()) { return; } if (Template.Text.IsEmpty()) { Different.MessageError("Не указано имя шаблона"); return; } int tmp; if (NextCellShift.Text != "Нет" && (!int.TryParse(NextCellStep.Text, out tmp) || tmp < -1000 || tmp > 1000)) { Different.MessageError("Не корректно заполнена величина сдвига после установки ссылки"); } SaveParam(); var list = new List <string>(); foreach (DataGridViewRow row in TemplateGrid.Rows) { var p = row.Get("Props"); if (p != null) { list.Add(p); } } _book.SysPage.PutTemplate(_template, "NextCellShift=" + NextCellShift.Text + ";NextCellStep=" + NextCellStep.Text, list); if (!Template.Items.Contains(_template)) { Template.Items.Add(_template); } UpdateTemplateInBook(_template); }
private void ButBreak_Click(object sender, EventArgs e) { if (Different.MessageQuestion("Вы действительно хотите прервать расчет?")) { ThreadApp.BreakCalc(); } }
private void butOK_Click(object sender, EventArgs e) { if (GroupCode.Text.IsEmpty()) { Different.MessageError("Не заполнено имя группы"); return; } ChangeReportsRow(); using (var db = new DaoDb(General.ReporterFile)) { //Сохранение в ReporterData using (var rec = new RecDao(db, "SELECT * FROM GroupReports WHERE GroupId=" + _groupId)) { rec.Put("GroupCode", GroupCode.Text); rec.Put("GroupName", GroupName.Text); ((FormGroupReports)GeneralRep.CommonBook.Forms[ReporterCommand.GroupReports]).EditItem(rec, _groupId); } db.Execute("DELETE * FROM ReportsForGroup WHERE GroupId=" + _groupId); using (var rec = new RecDao(db, "ReportsForGroup")) foreach (DataGridViewRow row in Reports.Rows) { if (!row.IsNewRow) { rec.AddNew(); rec.Put("GroupId", _groupId); rec.PutFromDataGrid("Report", row); rec.PutFromDataGrid("ReportName", row); rec.PutFromDataGrid("ReportFile", row); rec.PutFromDataGrid("ReportTag", row); } } } Close(); }
private void ButWriteOpc_Click(object sender, RoutedEventArgs e) { try { var dt = DataType.Text.ToDataType(); if (!TagValue.Text.IsOfType(dt)) { Different.MessageError("Недопустимое значение для указанного типа данных"); } else { var opc = new DebugOpcServer(OpcServerName.Text, Node.Text); opc.Logger.Start(); opc.Connect(); opc.AddGroup("Check"); opc.AddSignalByTag(OpcTag.Text, dt, TagValue.Text); opc.Prepare(); opc.WriteValues(); if (!opc.Logger.Command.IsError) { MessageBox.Show("Значение успешно записано"); } else { Different.MessageError("Ошибка при записи значения." + Environment.NewLine + opc.Logger.Command.ErrorMessage()); } opc.Dispose(); } } catch (Exception ex) { ex.MessageError("Ошибка при записи значения"); } }
private void butDeleteIntervals_Click(object sender, EventArgs e) { if (Different.MessageQuestion("Удалить отмеченные интервалы?")) { using (_book.StartAtom("Удаление интервалов из журнала")) { var intervals = new List <ArchiveInterval>(); int n = 0; var t = dataSet1.Tables["IntervalsTable"]; foreach (DataRow row in t.Rows) { try { if ((bool)row["Otm"]) { var interval = new ArchiveInterval(IntervalType.Single, (DateTime)row["PeriodBegin"], (DateTime)row["PeriodEnd"], (string)row["IntervalName"]); intervals.Add(interval); n++; } } catch { } } _book.AddEvent("Удаление интервалов", n + " интервалов"); using (_book.Start(30, 65)) _book.Archive.DeleteIntervals(_book.CodeAsProject, ReportType.Excel, intervals); using (_book.Start(65)) UpdateIntervals(); _book.ShowError(); } } }
private void Window_Loaded(object sender, RoutedEventArgs e) { using (var rec = new RecDao(Different.GetInfoTaskDir() + @"General\Config.accdb", "SELECT SysSubTabl.SubParamRowSource FROM SysTabl INNER JOIN SysSubTabl ON SysTabl.ParamId = SysSubTabl.ParamId " + "WHERE ((SysTabl.ParamValue='Приемник') AND (SysSubTabl.SubParamName='OPCServerName'));")) while (rec.Read()) { var set = rec.GetString("SubParamRowSource").ToPropertyHashSet(); foreach (var s in set.Values) { if (!OpcServerName.Items.Contains(s)) { OpcServerName.Items.Add(s); } } } OpcServerName.Items.Add("Matrikon.OPC.Simulation.1"); using (var sys = new SysTabl(Different.GetInfoTaskDir() + @"Controller\ControllerData.accdb")) { OpcServerName.Text = sys.SubValue("DebugWriteOPC", "OpcServerName"); Node.Text = sys.SubValue("DebugWriteOPC", "Node"); OpcTag.Text = sys.SubValue("DebugWriteOPC", "OpcTag"); DataType.Text = sys.SubValue("DebugWriteOPC", "DataType"); TagValue.Text = sys.SubValue("DebugWriteOPC", "TagValue"); } }
//Сохранение предыдущего выбранного параметра в таблицу private void SaveParam() { if (_cells != null) { try { var ac = LinkCellAction.Text.ToCellAction(); string field = ac != CellActionType.Text ? CellField.Text : ""; int ix = LinkX.Text.ToInt(); int iy = LinkY.Text.ToInt(); _cells["CellAction"].Value = LinkCellAction.Text; _cells["Field"].Value = ac != CellActionType.Text ? CellField.Text : ""; _cells["X"].Value = ix.ToString(); _cells["Y"].Value = iy.ToString(); string codeForming = (WriteText.Visible ? WriteText.Text : LinkCodeForming.Visible ? LinkCodeForming.Text : "") ?? "<Полный код>"; _cells["CodeForming"].Value = codeForming; string s = "CodeForming=" + codeForming + ";CellAction=" + LinkCellAction.Text + ";Field=" + field + ";X=" + ix + ";Y=" + iy + ";"; if (ac == CellActionType.Save) { s += "LinkType=Сохранение"; } else if (ac != CellActionType.Text && field.ToLinkField().IsValueField()) { s += LinkPropsPanel.PropsString(); if (LinkPropsPanel.LinkPropsError != "") { Different.MessageError(LinkPropsPanel.LinkPropsError, "Не правильно заполнены поля"); } } _cells["Props"].Value = s; _cells["LinkType"].Value = !LinkPropsPanel.Visible ? "" : LinkPropsPanel.CellLinkType.Text; } catch { } } }
public IHttpActionResult AddDifferent([FromBody] JObject value) { int uid = (int)value["UserId"]; decimal price = (decimal)value["Price"]; int type = (int)value["Type"]; string link = value["Link"].ToString(); int estimateNumber = (int)value["EstimateNumber"]; int actualNumber = (int)value["ActualNumber"]; Different different = new Different { UserId = uid, State = 1, Type = type, Price = price, Link = link, EstimateNumber = estimateNumber, ActualNumber = actualNumber, AddTimes = DateTime.Now }; entities.Different.Add(different); int result = entities.SaveChanges(); if (result > 0) { return(Ok(Respone.Success("提交成功"))); } else { return(Ok(Respone.No("发生了点问题,请稍后再试"))); } }
private void butCompile_Click(object sender, EventArgs e) { string itd = Different.GetInfoTaskDir(); var t = new TablikCompiler { ShowIndicator = true }; t.SetHistoryFile(itd + @"Constructor\TablikHistory\TablikHistory.accdb"); t.SetCompiledDir(itd + @"Compiled"); //t.LoadProject(itd + @"ProjectsReal\Тутаев\TutElectro.accdb"); //t.LoadProject(itd + @"ProjectsReal\Сургут2-3\Electro3.accdb"); //t.LoadProject(itd + @"ProjectsReal\Курган\Ktec2_Tep.accdb"); //t.LoadProject(itd + @"Projects\PrSignals.accdb"); //t.LoadProject(itd + @"Analyzer\ArhAnalyzerProject.accdb"); t.LoadProject(itd + @"Projects\ClassTest.accdb"); //t.LoadProject(itd + @"ProjectsReal\СУГРЭС-11\Sugres11_PN.accdb"); //t.LoadProject(itd + @"Projects\ApdControl.accdb"); //MessageBox.Show(t.ProjectFile + " " + t.ProjectCode + " " + t.ProjectName); t.LoadSignals(); string res = t.CompileProject(); if (!res.IsEmpty()) { MessageBox.Show(res); } t.Close(); }
//Выполнение транцзакции public void AddTransaction(Transaction t) { if (!t.ErrMess().IsEmpty()) { Different.MessageError(t.ErrMess()); } if (t.Cells.Count == 0 && t.TrShape == null) { return; } if (CurTransactionNum != _transactions.Count) { _transactions.RemoveRange(CurTransactionNum, _transactions.Count - CurTransactionNum); _afterTransCells.RemoveRange(CurTransactionNum, _transactions.Count - CurTransactionNum); } if (_transactions.Count >= 200) { _transactions.RemoveRange(0, _transactions.Count - 100); _afterTransCells.RemoveRange(0, _transactions.Count - 100); CurTransactionNum = _transactions.Count; } _transactions.Add(t); if (t.TrShape == null) { _afterTransCells.Add(GeneralRep.Application.ActiveCell); } CurTransactionNum++; }
private void ButSyntax_Click(object sender, EventArgs e) { bool er = false; var sh = _book.ActiveShape(); if (sh != null) { try { var rs = new ReportShapeDebug(sh, ShapeFormula.Text); if (!rs.ErrMess.IsEmpty()) { Different.MessageError(rs.ErrMess); er = true; } } catch (Exception ex) { ex.MessageError("Ошибка синтаксиса или применения формулы"); er = true; } } if (!er) { Different.MessageInfo("Формула корректна"); } }
//Открывает окно потока private void OpenThreadWindow() { if (gridThreads.SelectedItem == null) { Different.MessageInfo("Не выбран поток"); return; } var t = (ThreadController)gridThreads.SelectedItem; if (App.ThreadWindows.ContainsKey(t.Id)) { App.ThreadWindows[t.Id].Focus(); } else { var w = new ThreadWindow { DataContext = t, App = App }; t.ThreadWindow = w; App.ThreadWindows.Add(t.Id, w); w.Show(); t.UpdateState(); } gridThreads.UnselectAllCells(); }
public TablikGenerator() { _infoTaskDir = Different.GetInfoTaskDir(); OpenHistory(_infoTaskDir + @"Constructor\TablikHistory\GeneratorHistory.accdb", _infoTaskDir + @"General\HistoryTemplate.accdb"); using (StartLog("Открытие")) _isClosed = false; }
private void ButExit_Click(object sender, EventArgs e) { if (Different.MessageQuestion("Выйти из приложения?")) { Close(); Environment.Exit(0); } }
private void ButDelete_Click(object sender, EventArgs e) { if (Different.MessageQuestion("Удалить все ошибки потока " + _thread.Id + "?")) { SqlDb.Execute(Program.MonitorHistory.SqlProps, "TRUNCATE TABLE ErrorsList" + _thread.Id); LoadErrors(_thread); } }
public void GenerateRasKurgan() { var tdir = Different.GetTestInfoTaskDir() + @"Tablik\Generator\RasKurgan\"; var generator = new TablikGenerator(); generator.Generate(tdir + "RasProjectGen.accdb", tdir + "RasProjectGenData.accdb", tdir + "RasProject.accdb"); generator.Close(); }
public void Generate() { var tdir = Different.GetTestInfoTaskDir() + @"Tablik\Generator\"; var generator = new TablikGenerator(); generator.Generate(tdir + "Project1Gen.accdb", tdir + "Project1GenData.accdb", tdir + "Project1Result.accdb"); generator.Close(); }
private void butRun_Click(object sender, RoutedEventArgs e) { try { DateTime beg, en; bool b = DateTime.TryParse(periodBegin.Text, out beg); b &= DateTime.TryParse(periodEnd.Text, out en); if (b && ThreadC.State == State.Stopped) { if (ThreadC.IsPeriodic) { if (ThreadC.PeriodLength <= 0 || ThreadC.PeriodLength > 60) { b = false; } else { b &= CorrectTime(ThreadC.PeriodLength, 60.0); b &= CorrectTime(ThreadC.PeriodLength, beg.TimeOfDay.Minutes + beg.TimeOfDay.Seconds / 60.0); b &= CorrectTime(ThreadC.PeriodLength, en.TimeOfDay.Minutes + en.TimeOfDay.Seconds / 60.0); if (b && (ThreadC.PeriodBegin < ThreadC.SourcesBegin) && !Different.MessageQuestion("Указанный интервал расчета не попадает в диапазон источников. Все равно запустить расчет?")) { return; } } } else { var dlen = Convert.ToInt32(ThreadC.PeriodEnd.Subtract(ThreadC.PeriodBegin).TotalDays); if (dlen > 5 && !Different.MessageQuestion("Задан очень длинный интервал расчета (" + dlen + " суток). Вы уверены, что хотите провести расчет за этот интервал?")) { return; } if ((ThreadC.PeriodEnd > ThreadC.SourcesEnd || ThreadC.PeriodBegin < ThreadC.SourcesBegin) && !Different.MessageQuestion("Указанный интервал расчета не попадает в диапазон источников. Все равно провести расчет?")) { return; } } } if (b) { ThreadC.StartCalc(); } else { Different.MessageError("Недопустимые границы или длительность периода расчета"); } } catch (Exception ex) { ex.MessageError("Ошибка при запуске расчета"); } }
private void butLoadInterval_Click(object sender, EventArgs e) { try { if (Intervals.Rows.Count == 0) { return; } if (!GeneralRep.CheckOneSheet(false)) { return; } GeneralRep.Application.Visible = false; _book.IsReportForming = true; var row = Intervals.Rows[Intervals.SelectedCells[0].RowIndex]; var beg = row.Get("PeriodBegin").ToDateTime(); var en = row.Get("PeriodEnd").ToDateTime(); var cname = row.Get("IntervalName"); _book.Interval = new ArchiveInterval(IntervalType.Single, beg, en, cname); using (_book.StartAtom("Заполнение отчета из журнала", true, beg + " - " + en + " " + cname)) { try { _book.AddEvent("Загрузка интервала", beg + " - " + en + " " + cname); using (_book.Start(10, 40)) _book.ReadReportProject(); using (_book.Start(40)) { _book.FormingBook = _book.Workbook; _book.FillReport("Все листы"); } if (_book.Forms.ContainsKey(ReporterCommand.Report)) { var f = (FormReport)_book.Forms[ReporterCommand.Report]; f.PeriodBegin.Text = beg.ToString(); f.PeriodEnd.Text = en.ToString(); f.IntervalName.Text = cname; } } catch (Exception ex) { _book.AddError("Ошибка заполнения отчета", ex); } _book.ShowError(); } Different.MessageInfo("Отчет загружен из журнала.\nОтчет: " + _book.Code + ", " + _book.Name + "\nПериод: " + beg.ToString() + " - " + en.ToString()); } catch (Exception ex) { GeneralRep.ShowError("Ошибка заполнения отчета", ex); } GeneralRep.Application.Visible = true; _book.Workbook.Activate(); _book.IsReportForming = false; }
public void LoadValues() { var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\LoadValues\"; var tdb = new DaoDb(tdir + "Project2GenData.accdb"); { var tlist = new TablsList(tdb); tlist.LoadValues(); var t = tlist.Tabls["T1"]; var rnums = t.TablValues.SubNums; var rcodes = t.TablValues.SubCodes; Assert.IsTrue(rnums.ContainsKey(1)); Assert.AreEqual("aa", rnums[1].Code); Assert.AreEqual("sssa", rnums[1]["stringfield"].String); Assert.AreEqual(10, rnums[1]["intfield"].Integer); Assert.AreEqual(2, rnums[1].SubCodes.Count); Assert.AreEqual(2, rnums[1].SubNums.Count); Assert.AreEqual("a1", rnums[1].SubNums[1].Code); Assert.AreEqual(2, rnums[1].SubCodes["a2"].Num); Assert.AreEqual("sa1", rnums[1].SubNums[1]["StringSub"].String); Assert.AreEqual("sa2", rnums[1].SubNums[2]["StringSub"].String); Assert.AreEqual("sa1", rnums[1].SubNums[1][0].String); Assert.AreEqual("sa2", rnums[1].SubNums[2][0].String); Assert.AreEqual(11, rnums[1].SubNums[1][1].Integer); Assert.AreEqual(12, rnums[1].SubNums[2][1].Integer); Assert.IsTrue(rcodes.ContainsKey("aa")); Assert.AreEqual(1, rcodes["aa"].Num); Assert.AreEqual("sssa", rcodes["aa"]["stringfield"].String); Assert.AreEqual("sa2", rcodes["aa"].SubNums[2]["StringSub"].String); Assert.IsTrue(rnums.ContainsKey(2)); Assert.AreEqual("bb", rnums[2].Code); Assert.AreEqual("Sssb", rnums[2]["StringField"].String); Assert.AreEqual(20, rnums[2]["IntField"].Integer); Assert.AreEqual(1, rnums[2].SubCodes.Count); Assert.AreEqual(1, rnums[2].SubNums.Count); Assert.AreEqual("b1", rnums[2].SubNums[1].Code); Assert.AreEqual("sb1", rnums[2].SubNums[1]["StringSub"].String); Assert.IsTrue(rnums.ContainsKey(3)); Assert.AreEqual("cc", rnums[3].Code); Assert.AreEqual("SSSC", rnums[3]["StringField"].String); Assert.AreEqual(30, rnums[3]["IntField"].Integer); Assert.AreEqual(3, rnums[3].SubCodes.Count); Assert.AreEqual(3, rnums[3].SubNums.Count); Assert.AreEqual("c2", rnums[3].SubNums[2].Code); Assert.AreEqual("sc3", rnums[3].SubNums[3]["StringSub"].String); Assert.AreEqual(33, rnums[3].SubNums[3]["IntSub"].Integer); t = tlist.Tabls["T2"]; Assert.AreEqual(0, t.TablValues.SubNums.Count); Assert.AreEqual(0, t.TablValues.SubCodes.Count); } }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { bool stop = true; foreach (var t in App.Threads) { stop &= t.State != State.Calc && t.State != State.FinishCalc && t.State != State.Waiting && t.State != State.FinishWaiting && t.State != State.GetTime; } if (!stop) { Different.MessageInfo("Для закрытия контроллера расчетов нужно чтобы все потоки были остановлены"); e.Cancel = true; } else { try { if (AppInfoWindow != null) { AppInfoWindow.Close(); } } catch {} foreach (var tt in App.Threads) { try { var t = (ThreadController)tt; if (t.HandInputWindow != null && t.HandInputWindow.IsVisible) { var vw = t.HandInputWindow.ValuesVindow; if (vw != null && vw.Visibility == Visibility.Visible) { ((GridInputParam)vw.DataContext).SaveHandValues(); vw.Close(); } t.HandInputWindow.ValuesVindow = null; if (t.HandInputWindow.IsVisible) { t.HandInputWindow.Close(); } } if (t.SetupWindow != null && t.SetupWindow.IsVisible) { t.SetupWindow.Close(); } if (t.ThreadWindow != null && t.ThreadWindow.IsVisible) { t.ThreadWindow.Close(); } t.CloseThread(); } catch {} } try { DaoDb.Compress(General.ControllerFile, 100000000, General.TmpDir); } catch { } } }
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); } }
private void ButExport_Click(object sender, EventArgs e) { if (Template.Text.IsEmpty()) { Different.MessageError("Не указано имя шаблона"); return; } SaveTemplate(); var f = new DialogCommand(DialogType.OpenExcel) { DialogTitle = "Файл отчета для экспорта шаблона", ErrorMessage = "Указан недопустимый файл отчета" }.Run(); try { if (!f.IsEmpty()) { var t = _book.SysPage.GetTemplate(Template.Text); var p = _book.SysPage.GerTemplateGeneralProps(Template.Text); Workbook rbook = null; ReportBook book = null; bool notb = true; foreach (var b in GeneralRep.Books.Values) { try { if (b.Workbook.FullName == f) { notb = false; book = b; rbook = b.Workbook; } } catch { } } if (notb) { rbook = GeneralRep.Application.Workbooks.Open(f); book = GeneralRep.ActiveBook; } if (book.SysPage.TemplateX(Template.Text) == -1 || Different.MessageQuestion("В отчете " + book.Code + " уже есть шаблон " + Template.Text + ". Заменить?")) { book.SysPage.PutTemplate(Template.Text, p.ToPropertyString(), t); rbook.Save(); } if (notb) { rbook.Close(); } } } catch { Different.MessageError("Ошибка при экспорте шаблона в файл " + f); } }