예제 #1
0
 //Записывает в текущую ячейку значение свойства выделенного параметра, 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 {}
 }
예제 #2
0
 //Удаляет ячейки в выделенном диапазоне
 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);
     }
 }
예제 #3
0
 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;
 }
예제 #4
0
 //Добавляет ссылку типа Сохранение
 //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 { }
 }
예제 #5
0
        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();
            }
        }
예제 #6
0
 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);
     }
 }
예제 #7
0
        //Добавляет ссылки по шаблону, 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);
            }
        }
예제 #8
0
        //Добавляет в текущую ячейку ссылку на выделенный параметр, 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 { }
        }