У меня возникли серьезные проблемы с получением отчета 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). Постановка на что-либо, казалось, приводила к проблемам. Это то, что она выглядит в исходном коде страницы:
... и это было его. Я не могу поверить, что потратил около дня, пытаясь заставить его работать, когда все закончилось так просто. Надеюсь, этот пост поможет кому-либо еще столкнуться с одной и той же проблемой.
Хорошо, я снова взглянул на более простой отчет и сумел заставить его работать. Мне нужно было сделать следующее: сохранить весь отчетный документ в сеансе, а не только источник данных, не указывать тип отчета (ActiveX или PDF) и всегда устанавливать документ отчета в событии Page_Load, если он был один в сеансе. Я опубликую обновление, как только мне удастся заставить остальных работать с некоторыми образцами кода. –
старайтесь быть точными, задавая вопросы, чтобы получить лучший ответ от сообщества – Tassadaque