2012-04-13 6 views
1

У меня возникли серьезные проблемы с получением отчета Crystal Reports, напечатанного на странице ASP.Net. Вот текущая настройка:Печать отчетов Crystal из Crystal Reports Viewer (ActiveX, ASP.Net)

  • Приложение для просмотра Crystal Reports настроено на странице. Отчет отображается отлично при просмотре отчета.
  • Средство просмотра отчетов PrintMode имеет значение ActiveX
  • Я устанавливаю источник данных отчета из переменной сеанса в соответствии с рекомендацией SAP (найденной в одной из своих статей базы знаний). Источник данных отчета устанавливается вызовом службы WCF. Данные, передаваемые в отчет, прекрасны. (Опять же, отчет отображается просто отлично, показывая весь контент, как он должен).
  • Цель сборки для приложения ASP.Net и связанных с ним услуг - x86.
  • Все использует Crystal Reports версии 13, а веб-приложение ASP.Net использует .Net 4. Оно просматривается в Internet Explorer 8.
  • Я попытался проверить настройки ActiveX в Internet Explorer 8 и ни одна из них не должна быть проблемой (все либо установлено, либо разрешено).
  • Ошибка возникает независимо от ее запуска из среды IDE или с настроенного веб-сайта на отдельном сервере.
  • Установки пула приложений в IIS на другом сервере настроены так, чтобы разрешать 32-разрядные приложения.

Когда я нажимаю на значок печати на средстве просмотра отчетов, я получаю следующее сообщение об ошибке:

«Произошла ошибка связи Печать будет остановлена.»

Эта ошибка возникает при использовании более одной машины. Если я нажму «ОК» в сообщении об ошибке, в диалоговом окне внизу появится надпись «Подождите, пока загрузится« Контроль печати Crystal Reports ». Если я жду, ничего не произойдет. Нет подсказки по установке элемента управления ActiveX, и ничего не появляется, позволяя мне выбрать принтер (из которого я знаю, что несколько из них установлены).

Я пытался делать следующие вещи, ни один из которых работал:

  • Переключить тип отчета в формате PDF. Если я делаю это, и нажмите кнопку печати на средстве просмотра отчетов, я получаю следующее сообщение об ошибке:

Microsoft JScript ошибка выполнения: Требуется объект «

Он разбивает на этой линии, в частности:.

bobj.crv.stateManager.setComponentState (. 'MainContent_reportViewer_ UI', Eval ('(' + document.getElementById (' _CRYSTALSTATEctl00 $ MainContent $ ReportViewer ') значение +')'));

Есть несколько динамического изображения в отчете, но все они отображаются правильно при просмотре отчета. Это единственные двоичные объекты, о которых я могу думать, которые будут связаны с этим отчетом. Ошибка происходит в динамически создаваемом коде для страницы - не то, что я написал.

  • Я попытался вручную установить элемент управления ActiveX из правильного .cab-файла. Это не имело никакого значения ни в одном из сценариев.
  • Я установил последний пакет обновлений Crystal Reports (пакет обновления 3). Опять же, это ничего не изменило.
  • Я попытался настроить виртуальный каталог для CrystalReportViewers13 внутри веб-сайта по умолчанию, как рекомендовано некоторыми сообщениями на форуме, с которыми я столкнулся. Это также не повлияло.
  • Включение ViewState на странице не влияет на работу печати или нет.
  • Я попытался добавить свою собственную кнопку печати и выпадающий список со списком доступных принтеров. Когда я нажимаю мою собственную кнопку печати на заказ и вызвать PrintToPrinter(), я получаю то же сообщение об ошибке, как попытка напечатать отчет в формате PDF:

«ошибка выполнения Microsoft JScript: Требуется объект»

... и он ломается в той же строке, что и при попытке распечатать отчет в формате PDF при нажатии кнопки «Печать».

Я уже бился головой об этом, по крайней мере, через день, и я свеж от идей. Кто-нибудь может понять, что может быть причиной этого?

EDIT:

Ну, вот что я сделал для того, чтобы заставить все работать. Это оказалось намного проще исправить, чем то, о чем я думал:

  • Напечатайте весь отчет ReportDocument на сессии. Ваша страница загрузки должна выглядеть примерно так:

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (Session["report"] != null) 
        { 
         reportViewer.ReportSource = Session["report"]; 
        } 
    
        BuildReport(); 
    } 
    
  • Держите ReportViewer как можно проще - не указать тип отчета (PDF или ActiveX). Постановка на что-либо, казалось, приводила к проблемам. Это то, что она выглядит в исходном коде страницы:

... и это было его. Я не могу поверить, что потратил около дня, пытаясь заставить его работать, когда все закончилось так просто. Надеюсь, этот пост поможет кому-либо еще столкнуться с одной и той же проблемой.

+0

Хорошо, я снова взглянул на более простой отчет и сумел заставить его работать. Мне нужно было сделать следующее: сохранить весь отчетный документ в сеансе, а не только источник данных, не указывать тип отчета (ActiveX или PDF) и всегда устанавливать документ отчета в событии Page_Load, если он был один в сеансе. Я опубликую обновление, как только мне удастся заставить остальных работать с некоторыми образцами кода. –

+0

старайтесь быть точными, задавая вопросы, чтобы получить лучший ответ от сообщества – Tassadaque

ответ

1

Плохая идея хранить весь отчет в сеансе, если вы получаете много запросов пользователей.

При работе с отчетами о кристаллах перед отправкой ответа вы должны повторно инициализировать отчет и его логин и источник данных, параметры и т. Д. В каждом запросе (после обратной связи или без обратной передачи). Отчет Crystal не поддерживает полное viewstate, поэтому он должен каждый раз повторять инициализацию.

Я думаю, что вы не повторно инициализируетесь во время запросов обратной связи, следовательно, это ошибка.

0

Я знаю, что этот вопрос устарел, но я думал, что буду перекликать на всякий случай, если у кого-то другая проблема.

Я нашел this page имел ряд вариантов проблем, которые, как я думаю, очень похожи на ваши. Я получил ошибку «bobj is undefined», но все, что действительно происходит, заключается в том, что IIS не может найти правильный путь к JS-файлам для Crystal.

Для себя я положил некоторые папки в каталог aspnet_client в корень моего сайта (wwwroot) и удостоверился, что NETWORK_SERVICE имеет доступ к папке aspnet_client. Я должен был сделать то же самое с папкой 'crystalreportviewers' из моей папки x86 SAP под

'C: \ Program Files (x86) \ SAP BusinessObjects \ Crystal Reports 20XX \ crystalreportviewers'

Я также должен был добавить config из этого сайта в мой web.config ... и затем зритель начал работать правильно.

Надеюсь, это поможет!

1

Сохраните головную боль и отключите печать ActiveX. Он взрывает ваш веб-сервер с временными файлами, работает только с IE и ограничивается количеством отчетов, которые вы можете распечатать одновременно. Установите режим печати на Pdf и сделайте с ним. Многие браузеры могут напрямую печатать PDF-файлы.

crViewer.PrintMode = PrintMode.Pdf; 
+0

Возможно, я неправильно понял то, что вы говорите, но даже если у меня могут быть отчеты с PrintMode ActiveX, я все же могу использовать другие браузеры. Crystal не обнаружит поддержки ActiveX, а затем вместо этого использует режим PDF. – JustLooking

+0

Правильные, другие браузеры non-activeX будут использовать режим Pdf, даже если он установлен в режим ActiveX. Я говорю, чтобы избежать этого вообще и заставить ВСЕ БРОСЕРСЫ использовать режим Pdf. – dotjoe

0

Я побежал в подобной проблеме, отчет был генерируются правильно на странице, но когда я пытаюсь изменить масштаб изображения, он говорил: «Нет действительный источник отчета не доступен». Чтобы преодолеть эту проблему, я просто загружаю отчет каждый раз, когда загружается страница, не имеет значения. Возврат или нормальная загрузка.

Также убедитесь, что вы правильно размещаете документ Crystal Report, иначе он может начать выдавать ошибку «Ошибка загрузки».