Проблемы большого отчета!

Обсуждение Stimulsoft Reports.Silverlight
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Проблемы большого отчета!

Сообщение kin123456789 » 30 дек 2014, 13:35

Добрый день ! подскажите, как лучше решить проблему: Создается большой отчет (200-250 страниц), при report.Render() происходит длительное зависание! Как устранить это зависание! Спасибо!
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 30 дек 2014, 13:59

В данном случае необходимо реализовать обработку в другом потоке! Может уже есть варианты данной реализации! Для визуализации длительной операции используется viewer.progress.SetLabelProgress, однако при report.Render() он зависает и не обновляется! Спасибо!
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 05:16

Re: Проблемы большого отчета!

Сообщение Anton Lozovskiy » 31 дек 2014, 07:53

Здравствуйте,

Готовых вариантов нету. Вы можете попробовать рендеринг через BackgroundWorker, возможно он сможет помочь.

Спасибо.
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 31 дек 2014, 08:36

Здравствуйте! Это вариант и использую, но выдает ошибку на строке report.Render() - осуществляется многопоточный доступ!
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 05:16

Re: Проблемы большого отчета!

Сообщение Anton Lozovskiy » 31 дек 2014, 08:49

Здравствуйте,

Других вариантов пока предложить не можем. Возможно есть ограничение в самом Silvelight.

Спасибо.
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 25 мар 2015, 12:06

Здравствуйте!
Есть код:

Код: Выделить всё

 void CreateReport()
 { 
   StiReport report = new StiReport();
    report.Load(reportTemplate.ReportInf);
   report.RegBusinessObject("paymentsByRegDate", "paymentsByRegDate", paymentsByRegDate);   
   worker.RunWorkerAsync(report);
}
 void worker_DoWork(object sender, DoWorkEventArgs e)
       {
           StiReport report= (StiReport)e.Argument;
          
           report.Render();  // в этой строке вылетает Exception Недопустимый межпотоковый доступ.
            // Инициализатор типа "Stimulsoft.Report.SL.Helpers.StiFontHelper" выдал исключение.
       }

       void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
         viewer.Report = (StiReport)e.Result;
       }
Спасибо!
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 05:16

Re: Проблемы большого отчета!

Сообщение Anton Lozovskiy » 25 мар 2015, 12:47

Здравствуйте,

Класс StiFontHelper используется для того, чтобы расчитывать точный размер, который нужен для вывода текста.
Для этого используется компонент TextBlock. В сильверлайте другого способа просто нету, и исключить этот код мы никак не можем.
Поэтому советуем не использовать worker для рендеринга отчета. Конешно главный поток немного подвисает, если отчет занимает длительное время на построение - но по другому никак.

Спасибо.
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 25 мар 2015, 12:59

Спасибо! Данная ошибка выдается всегда, когда осуществляется регистрация бизнес-объектов в отчете!
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 25 мар 2015, 13:26

Так все-таки проблема именно в классе StiFontHelper?
kin123456789
Сообщения: 98
Зарегистрирован: 14 окт 2014, 08:29

Re: Проблемы большого отчета!

Сообщение kin123456789 » 25 мар 2015, 14:21

в отчетах нужно просто убрать свойство "Может расти". Все работает только отчеты стали с обрезанными значениями в полях!
Ответить