//Записывает в текущую ячейку значение свойства выделенного параметра, field - имя поля //Транзакция создается из одной ячейки и добавляется в Transactions public void WriteValue(LinkField field, Transaction tlist) { try { if (!GeneralRep.CheckOneSheet(true)) { return; } var v = CurParam.GetField(field); var shape = _book.ActiveShape(); if (shape == null) { Range cell = GeneralRep.Application.ActiveCell; var t = new TransactionCell(cell) { NewValue = v, Value = v }; tlist.AddCell(t); } else if (shape.Type == MsoShapeType.msoTextBox) { var t = new TransactionShape(shape) { NewValue = v, Value = v }; tlist.AddShape(t); } } catch {} }
//Удаляет ячейки в выделенном диапазоне public void DeleteLinks() { try { if (!GeneralRep.CheckOneSheet(true)) { return; } var sh = ActiveShape(); if (sh != null) { BeforeTransaction(); var list = new Transaction(); list.AddShape(new TransactionShape(sh) { NewLink = null }); sh.Title = ""; LastChangeLinks = DateTime.Now; AddTransaction(list); } else { Range range = GeneralRep.Application.ActiveWindow.RangeSelection; bool many = true; try { many = range.Cells.Count > 10000; } catch { } if (MessageReportQuestion((!many ? "" : "Выделенный фрагмент очень большой, отмена удаления будет невозможна. ") + "Удалить все ссылки в выделенном фрагменте?")) { var list = new Transaction(); BeforeTransaction(); if (!many) { foreach (Range cell in range.Cells) { if (cell.Comment != null) { list.AddCell(new TransactionCell(cell) { NewLink = null }); } } } range.ClearComments(); LastChangeLinks = DateTime.Now; ClearReportDataFromMemory(); if (!many) { AddTransaction(list); } } } } catch (Exception ex) { AddError("Ошибка при удалении ссылок", ex); } }
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; }
//Добавляет ссылку типа Сохранение //tlist - список операций текущей транзакции, если не задан то транзакция создается из одной ячейки и добавляется в Transactions public void AddLinkSave(Transaction tlist = null, Range cell = null) { try { if (!GeneralRep.CheckOneSheet(true)) { return; } string res = "Project=Сохранение;Field=" + LinkField.Value.ToEnglish() + ";AllowEdit=True;"; res += "LinkType=" + LinkType.Save.ToEnglish() + ";"; res += "CellComment=" + CellComment.Text + ";"; string scode = GetSaveCode(); res += "Code=" + scode + ";SaveCode=" + scode; AddCellLink(res, tlist, cell); } catch { } }
private void butFormReport_Click(object sender, EventArgs e) { if (!GeneralRep.CheckOneSheet(false)) { return; } var d = DateTime.Now; var t = new TimeInterval(Different.MinDate.AddYears(1), d.AddMilliseconds(-d.Millisecond)); if (!_book.OnlyAbsolute) { t = _book.CheckPeriodTime(PeriodBegin.Text, PeriodEnd.Text); if (t == null) { return; } } var fill = FillPages.Text; var save = SaveToArchive.Checked; _book.IsReportForming = true; _book.Interval = new ArchiveInterval(IntervalType.Single, t.Begin, t.End, IntervalName.Text); GeneralRep.Application.Visible = false; SetCalcMode(true); if (_book.ThreadId == 0) { FormingReport(fill, save); } else { if (!_book.PrepareController()) { Different.MessageError("Ошибка запуска расчета"); } _task = new Thread(() => FormingReport(fill, save)) { Priority = ThreadPriority.AboveNormal }; _task.Start(); } }
private void butOtmLinks_Click(object sender, EventArgs e) { if (!GeneralRep.CheckOneSheet(true)) { return; } if (_book.ActiveShape() != null) { return; } if (CurProject != null) { var tlist = new Transaction(); _book.BeforeTransaction(); foreach (DataGridViewRow row in Params.Rows) { if (row.GetBool("Otm")) { AddLinksTemplate(CurProject.Params[row.Get("Code")], tlist); } } _book.AddTransaction(tlist); } }
//Добавляет ссылки по шаблону, rp - параметр по которому устанавливать ссылки, tlist - текущая транзакция public void AddLinksTemplate(ReportParam rp = null, Transaction tlist = null) { var trans = tlist ?? new Transaction(); try { if (!GeneralRep.CheckOneSheet(true)) { return; } var param = rp ?? CurParam; if (CurProject == null || param == null) { return; } if (tlist == null) { _book.BeforeTransaction(); } var page = (Worksheet)_book.Workbook.ActiveSheet; var acell = GeneralRep.Application.ActiveCell; foreach (var dic in _book.CurLinkTemplate) { var action = dic["CellAction"].ToCellAction(); string code = dic["CodeForming"];//Способ формирования кода или текст для записи, если action=Записать текст if (action != CellActionType.Text) { code = code.Replace("<Код параметра>", param.ArchiveParam.FirstParam.Code).Replace("<Полный код>", param.FullCode); int n1 = param.FullCode.IndexOf("."); if (n1 > 0) { int n2 = param.FullCode.IndexOf(".", n1 + 1); if (n2 > 0) { code = code.Replace("<Код 2 параметра>", param.FullCode.Substring(0, n2)); } } } int x = acell.Column, y = acell.Row; x += dic.GetInt("X"); y += dic.GetInt("Y"); var field = dic["Field"].ToLinkField(); var cell = (Range)page.Cells[y, x]; var dicl = dic.Keys.Where(prop => prop != "X" && prop != "Y" && prop != "CellAction" && prop != "CodeForming").ToDictionary(prop => prop, prop => dic[prop]); if (action == CellActionType.Save) { AddLinkSave(trans, cell); } if (action == CellActionType.Text) { trans.AddCell(new TransactionCell(page, x, y) { NewValue = code }); page.PutCellValue(y, x, code); } else if (!CurProject.Params.ContainsKey(code)) { trans.NotFound.Add(code); } else { var par = CurProject.Params[code]; if (action == CellActionType.Value) { string s = par.GetField(field); if (s != null) { trans.AddCell(new TransactionCell(page, x, y) { NewValue = s }); page.PutCellValue(y, x, s); } } else { dicl.Add("Project", CurProject.CodeFinal); dicl.Add("Code", par.FullCode); dicl.Add("CellComment", CellComment.Text ?? ""); dicl.Add("SaveCode", GetSaveCode()); if (field == LinkField.CodeSubParam || field == LinkField.SubName || field == LinkField.SubComment) { if (par.ArchiveParam.LastParam != null) { AddCellLink(dicl.ToPropertyString(), trans, cell); } } else if (field == LinkField.Min || field == LinkField.Max) { if (par.ArchiveParam.DataType == BaseLibrary.DataType.Real || par.ArchiveParam.DataType == BaseLibrary.DataType.Integer) { AddCellLink(dicl.ToPropertyString(), trans, cell); } } else if (!field.IsValueField() || CanAddLinkType(par, dicl["LinkType"].ToLinkType())) { AddCellLink(dicl.ToPropertyString(), trans, cell); } else { trans.NotFound.Add(code); } } } } ((Range)page.Cells[acell.Row + _book.CurTemplateShiftY, acell.Column + _book.CurTemplateShiftX]).Activate(); } catch (Exception ex) { GeneralRep.ShowError("Ошибка при установке ссылки по шаблону", ex); } if (tlist == null) { _book.AddTransaction(trans); } }
//Добавляет в текущую ячейку ссылку на выделенный параметр, field - имя поля //Транзакция создается из одной ячейки и добавляется в Transactions public void AddLink(LinkField field) { try { if (!GeneralRep.CheckOneSheet(true)) { return; } Shape sh = _book.ActiveShape(); var lt = _book.CurLinkType.ToLinkType(); if (sh != null && (lt != LinkType.Absolute && lt != LinkType.AbsoluteCombined && lt != LinkType.Combined && lt != LinkType.Result && lt != LinkType.System || (sh.Type != MsoShapeType.msoTextBox && sh.Type != MsoShapeType.msoGroup))) { return; } var tlist = new Transaction(); string res = "Project=" + CurProject.Code + ";Field=" + field.ToEnglish() + ";Code=" + CurParam.FullCode + ";" + "CellComment=" + CellComment.Text + ";SaveCode=" + GetSaveCode() + ";"; if (!field.IsValueField()) { WriteValue(field, tlist); } else { if (PropForm != null) { res += PropForm.PropsString; if (!PropForm.PropsError.IsEmpty()) { Different.MessageError(PropForm.PropsError, "Не правильно заполнены свойства ссылки"); return; } } else { res += _book.CurLinkProps; if (_book.CurLinkProps.IsEmpty()) { Different.MessageError("Нужно заполнить свойства устанавливаемой ссылки"); return; } } } if (field != LinkField.Code && field != LinkField.CodeParam && field != LinkField.CodeSubParam) { if (sh != null) { AddShapeLink(res, tlist, sh); } else { AddCellLink(res, tlist, GeneralRep.Application.ActiveCell); } } if (sh == null) { _book.BeforeTransaction(); MoveAfterLink(); } _book.AddTransaction(tlist); } catch { } }