private void butOK_Click(object sender, EventArgs e) { using (_book.StartAtom("Сохранение настроек")) { _book.AddEvent("Сохранение настроек отчета"); if (CodeReport.Text.IsEmpty()) { Different.MessageError("Код отчета должен быть заполнен"); return; } int res; bool er = (!MonthLength.Text.IsEmpty() && (!int.TryParse(MonthLength.Text, out res) || res < 0)); er |= (!DayLength.Text.IsEmpty() && (!int.TryParse(DayLength.Text, out res) || res < 0)); er |= (!HourLength.Text.IsEmpty() && (!int.TryParse(HourLength.Text, out res) || res < 0)); er |= (!MinuteLength.Text.IsEmpty() && (!int.TryParse(MinuteLength.Text, out res) || res < 0)); er |= (!DayStart.Text.IsEmpty() && (!int.TryParse(DayStart.Text, out res) || res < 0)); er |= (!HourStart.Text.IsEmpty() && (!int.TryParse(HourStart.Text, out res) || res < 0)); er |= (!MinuteLength.Text.IsEmpty() && (!int.TryParse(MinuteLength.Text, out res) || res < 0)); if (er) { Different.MessageError("Указана недопустимая длительность или начало интеравала"); return; } var sys = _book.SysPage; bool isInternal = false; try { sys.PutValue("Report", CodeReport.Text); sys.PutValue("ReportName", NameReport.Text); sys.PutValue("ReportDescription", DescriptionReport.Text); sys.PutControl(MonthLength); sys.PutControl(DayLength); sys.PutControl(HourLength); sys.PutControl(MinuteLength); sys.PutControl(DayStart); sys.PutControl(HourStart); sys.PutControl(MinuteStart); sys.PutValue("DifferentLength", radioDifferent.Checked ? "True" : (radioLess.Checked ? "Less" : "Equals")); if (radioNow.Checked) { sys.PutValue("DefaultPeriod", "Now"); } if (radioPrevious.Checked) { sys.PutValue("DefaultPeriod", "Previous"); } sys.PutValue("DifferentBegin", DifferentBegin.Checked); sys.PutValue("DefaultCalcName", CalcName.Text); sys.PutValue("AllowProjectsRepetitions", AllowProjectsRepetitions.Checked); var list = new List <ReportProjectSetup>(); foreach (DataGridViewRow r in Projects.Rows) { if (!r.IsNewRow) { try { var cmode = r.Get("ProjectCalcMode").ToCalcModeType(); isInternal |= cmode == CalcModeType.Internal; list.Add(new ReportProjectSetup(r.Get("Project"), AllowProjectsRepetitions.Checked ? r.Get("ProjectCode2") : null, cmode)); } catch { } } } sys.PutProjects(list); } catch (Exception ex) { GeneralRep.ShowError("Текущий файл не является файлом отчета InfoTask или был поврежден", ex); } try { tabMain.Select(); } catch {} _codes.Clear(); _infs.Clear(); foreach (DataGridViewRow row in Providers.Rows) { string name = row.Get("ProviderName"); _codes.Add(name, row.Get("ProviderCode")); _infs.Add(name, row.Get("ProviderInf")); } int tid; if (!int.TryParse(ThreadId.Text, out tid)) { tid = 0; } if (isInternal) { try { _book.AddEvent("Сохранение настроек в ControllerData"); using (var db = new DaoDb(General.ControllerFile)) { using (var rec = new RecDao(db, "SELECT * FROM Threads WHERE ThreadId=" + tid)) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("ApplicationType", "Excel"); rec.Put("IsImit", IsImit.Checked); rec.Put("ImitMode", ImitMode.Text); tid = rec.GetInt("ThreadId"); } db.Execute("DELETE * FROM Providers WHERE ThreadId=" + tid); db.Execute("DELETE * FROM Projects WHERE ThreadId=" + tid); using (var rec = new RecDao(db, "Projects")) using (var recc = new RecDao(db, "Providers")) { foreach (DataGridViewRow row in Projects.Rows) { if (!row.IsNewRow && row.Get("ProjectCalcMode").ToCalcModeType() == CalcModeType.Internal) { rec.AddNew(); rec.Put("ThreadId", tid); rec.PutFromDataGrid("Project", row); rec.PutFromDataGrid("ProjectFile", row); } } foreach (DataGridViewRow row in Providers.Rows) { if (row.Get("TypeProvider") != "Архив" || row.Get("ProviderName") == "CalcArchive" || (row.Get("ProviderName") == "Report_Archive" && UseOneArchive.Checked)) { recc.AddNew(); recc.Put("ThreadId", tid); recc.PutFromDataGrid("ProviderType", row, "TypeProvider"); recc.PutFromDataGrid("ProviderCode", row); if (row.Get("ProviderName") != "Report_Archive") { recc.PutFromDataGrid("ProviderName", row); } else { recc.Put("ProviderName", "CalcArchive"); } recc.PutFromDataGrid("ProviderInf", row); recc.Update(); } } } } } catch (Exception ex) { GeneralRep.ShowError("Неправильный файл ControllerData.accdb", ex); return; } } _book.AddEvent("Сохранение настроек в ReporterData"); try //Настройки отчета в ReporterData { using (var db = new DaoDb(General.ReporterFile)) { using (var rec = new RecDao(db, "SELECT * FROM Reports WHERE Report = '" + CodeReport.Text + "'")) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("Report", CodeReport.Text); rec.Put("ReportName", NameReport.Text); rec.Put("ReportDescription", DescriptionReport.Text); rec.Put("ReportFile", GeneralRep.Application.ActiveWorkbook.FullName); rec.Put("ThreadId", isInternal ? tid : 0); rec.Put("UseOneArchive", UseOneArchive.Checked); rec.Put("CodeArchive", _codes["Report_Archive"]); rec.Put("InfArchive", _infs["Report_Archive"]); string s = "FormTo=" + (FormToTemplate.Checked ? "Template" : (FormToDir.Checked ? "Dir" : "File")) + ";"; s += "ResultDir=" + ResultDir.Text + ";"; s += "ResultFileName=" + ResultFileName.Text + ";"; s += "ResultFile=" + ResultFile.Text + ";"; s += "AddDateToName=" + (AddDateToName.Checked ? "True" : "False") + ";"; var df = DateNameFormat.Text; if (AddDateToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "DateNameFormat=" + df + ";"; s += "AddBeginToName=" + (AddBeginToName.Checked ? "True" : "False") + ";"; df = BeginNameFormat.Text; if (AddBeginToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "BeginNameFormat=" + df + ";"; s += "AddEndToName=" + (AddEndToName.Checked ? "True" : "False") + ";"; df = EndNameFormat.Text; if (AddEndToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "EndNameFormat=" + df + ";"; s += "AddCalcNameToName=" + (AddCalcNameToName.Checked ? "True" : "False") + ";"; s += "AddSheetToName=" + (AddSheetToName.Checked ? "True" : "False") + ";"; s += "SetFocusToFormed=" + (SetFocusToFormed.Checked ? "True" : "False") + ";"; rec.Put("FormInf", s); rec.Put("ServerReport", ServerReport.Text); if (!ServerReport.Text.IsEmpty()) { var file = new FileInfo(ServerReport.Text); if (!file.Exists || file.Extension != ".xlsx") { Different.MessageError("Указанный файл контрольного экземпляра не существует или не является файлом Excel, " + ServerReport.Text); } else if (ServerReport.Text == _book.Workbook.FullName) { Different.MessageError("Файл контрольного бланка расчета не должен совпадать с файлом бланка отчета, " + ServerReport.Text); } } int rid = rec.GetInt("ReportId"); rec.Update(); db.Execute("DELETE * FROM Projects WHERE ReportId=" + rid); using (var recp = new RecDao(db, "Projects")) foreach (DataGridViewRow r in Projects.Rows) { if (!r.IsNewRow) { recp.AddNew(); recp.Put("ReportId", rid); recp.PutFromDataGrid("Project", r); if (AllowProjectsRepetitions.Checked) { recp.PutFromDataGrid("ProjectCode2", r); } recp.PutFromDataGrid("ProjectName", r); recp.PutFromDataGrid("ProjectFile", r); if (UseOneArchive.Checked) { recp.Put("CodeArchive", _codes["Report_Archive"]); recp.Put("InfArchive", _infs["Report_Archive"]); } else if (r.Get("ProjectCalcMode").ToCalcModeType() == CalcModeType.Internal) { recp.Put("CodeArchive", _codes["CalcArchive"]); recp.Put("InfArchive", _infs["CalcArchive"]); } else { var proj = r.Get("Project"); if (AllowProjectsRepetitions.Checked && !r.Get("ProjectCode2").IsEmpty()) { proj = r.Get("ProjectCode2"); } proj += "_Archive"; recp.Put("CodeArchive", _codes[proj]); recp.Put("InfArchive", _infs[proj]); } } } } } } catch (Exception ex) { GeneralRep.ShowError("Неправильный файл ReporterData.accdb", ex); } _book.ClearReportDataFromMemory(); CheckProviders(); Close(); } }