//Формирование отчета, для вызова в другом потоке private void FormingReport(string fill, //fill - заполнять все листы или выбранный bool saveReport) //saveReport - сохранять отчет в журнал { var beg = _book.Interval.Begin; var en = _book.Interval.End; var cname = _book.Interval.Name; using (_book.StartAtom("Формирование отчета", true, beg + " - " + en + " " + cname)) { try { bool hasCalc = _book.Controller != null; if (hasCalc) { _book.AddEvent("Расчет", beg + " - " + en + " " + cname); var con = _book.Controller; con.SetCalcOperations(true, true, true); con.Calc(beg, en, "Default", cname); if (!con.ErrorMessage.IsEmpty()) { _book.AddError("Ошибки при расчете:\n", null, con.ErrorMessage); } _book.Procent = 50; } //Получение данных из архива using (_book.Start(hasCalc ? 50 : 0, hasCalc ? 60 : 40)) _book.ReadArchiveReport(); //Заполнение отчета using (_book.Start(hasCalc ? 60 : 40, 80)) { _book.OpenFormingBook(beg, en, cname); _book.FillReport(fill); _book.CopySheetsToBook(beg, cname, fill); } //Сохранение результатов в архив if (saveReport) { using (_book.Start(80)) _book.SaveReport(); } try { _book.Workbook.Save(); } catch { } } catch (Exception ex) { _book.AddError("Ошибка заполнения отчета", ex); } _book.ShowError(); } SetCalcMode(false); if (!_book.FormToDir && !_book.FormToFile) { _book.MessageReport("Отчет сформирован"); } }