|
|
|
Crystal reports VS 2005
|
|||
|---|---|---|---|
|
#18+
Всем привет Народ, помогите с информацией по использованию Crystal Reports отчетов в C++ (unmanaged). Интересует загрузка шаблона отчета RPT в коде и печать. Какие библиотеки использовать? Поиск дает только ссылки на примеры работы с полной версией CR. Меня интересует встроенная в VS2005. спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2006, 15:49 |
|
||
|
Crystal reports VS 2005
|
|||
|---|---|---|---|
|
#18+
_traveller_Всем привет Народ, помогите с информацией по использованию Crystal Reports отчетов в C++ (unmanaged). Интересует загрузка шаблона отчета RPT в коде и печать. Какие библиотеки использовать? Поиск дает только ссылки на примеры работы с полной версией CR. Меня интересует встроенная в VS2005. спасибо! Дык потому они и даются, с полной версией, т.к. пользоваться API ты можешь только приобретя CR. Не хочешь покупать - пользуйся Управляемым С++. В моей практике была след. работа... 1. Первый попавшийся магазин, приобретение книги с названием Crystal Report. 2. Был полный CR 7-ой версии. Под него всё компилировал и линковал... 3. Немного шаманя, уже трудно вспомнить, прикручивал его к той версии, что идёт с VS2003. Всё что требуется лежало у меня в C:\Program Files\Seagate Software\Crystal Reports Примеры работы следующие (на CR 7.0 или идущем с VS2003) //БАШКА // CCrystalView view //классы Crystal Report #include "crpe.h" #include "peplus.h" //Перечисление возможных отчётов enum enmReports //перечисление-предопределённые отчёты { //бла бла бла }; class CCrystalView { protected: // afx_msg void OnDestroy(){} public: CCrystalView(); virtual ~CCrystalView(); void Empty(); BOOL SetPrintReport(CPrintInfo* pInfo); CString m_CRpFilePath; //Путь к файлу отчёта /*#ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif*/ protected: CRPEngine m_Engine;//Менеджер задач печати CRPEJob *m_pJob;//Указатель на Тек задачу печати // DECLARE_MESSAGE_MAP() // Завершение задания на печать void ClosePrintJob(void); // Имеется-ли задание на печать bool isPrintJobStarted(void); public: // Старт вывода на печать (поале Print Report) BOOL StartPrintJob(void); }; //РЕАЛИЗАЦИЯ // CrystalView.cpp : implementation file // #include "stdafx.h" //#include "CrystalView.h" #include ".\crystalview.h" // CCrystalView //IMPLEMENT_DYNCREATE(CCrystalView, CView) CCrystalView::CCrystalView() { m_CRpFilePath.Empty(); m_pJob=NULL; } CCrystalView::~CCrystalView() { } //BEGIN_MESSAGE_MAP(CCrystalView, CView) // ON_WM_DESTROY() //END_MESSAGE_MAP() // CCrystalView drawing /* void CCrystalView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } // CCrystalView diagnostics #ifdef _DEBUG void CCrystalView::AssertValid() const { CView::AssertValid(); } void CCrystalView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG */ // Имеется-ли задание на печать bool CCrystalView::isPrintJobStarted(void) { return (m_pJob!=NULL); } // Завершение задания на печать void CCrystalView::ClosePrintJob(void) { if (isPrintJobStarted()) { // m_pJob->IsJobFinished() m_pJob->Close(); m_Engine.RemoveJob(m_pJob); m_pJob=NULL; } } //Вывод отчёта на печать из OnPreparePrinting BOOL CCrystalView::SetPrintReport(CPrintInfo* pInfo) { BOOL retval=pInfo->m_bContinuePrinting; if (!retval){return retval;} retval=!retval; pInfo->m_bContinuePrinting=retval;//Подавелние MFC вывода на печать //Очистка тек. Печати ClosePrintJob(); m_Engine.Close(); retval=m_Engine.Open(); if (retval) { m_pJob=m_Engine.OpenJob(m_CRpFilePath); if (m_pJob==NULL){retval=FALSE;return retval;}//Проверка открытия задачи { retval=TRUE; //Настройка параметров печати CRPEPrintOptions PrintOptions; m_pJob->GetPrintOptions(&PrintOptions); LPDEVMODE pDevMode=pInfo->m_pPD->GetDevMode(); PrintOptions.m_nReportCopies=(pDevMode!=NULL)?pInfo->m_pPD->GetCopies():1; PrintOptions.m_startPageN=pInfo->GetMinPage(); PrintOptions.m_stopPageN=pInfo->GetMaxPage(); m_pJob->SetPrintOptions(&PrintOptions); //Установка принтера m_pJob->SelectPrinter( pInfo->m_pPD->GetDriverName() //Драйвер ,pInfo->m_pPD->GetDeviceName() //Принтер ,pInfo->m_pPD->GetPortName() //Порт ,pDevMode //Параметры принтера );//Конец "Установка принтера" // pJob->SetPrintDate(2010,2,15); //m_pJob->SetReportTitle("Заголовок отчёта HEADER OF REPORT"); } //Конец "Настройка параметров печати" if (pInfo->m_bPreview)//Предварительный просмотр? { {//Настройка окна предв. просмотра CRPEWindowOptions RPEOptions; m_pJob->GetWindowOptions(&RPEOptions); RPEOptions.m_hasPrintSetupButton=1; RPEOptions.m_hasSearchButton=1; RPEOptions.m_hasProgressControls=1; RPEOptions.m_hasRefreshButton=1; //RPEOptions.m_canDrillDown=1; RPEOptions.m_hasGroupTree=1; m_pJob->SetWindowOptions(&RPEOptions); m_pJob->ShowPrintControls(TRUE);//Выяснить RECT rctSize,rctSize2; rctSize.bottom=rctSize2.bottom=0; rctSize.left=rctSize2.left=0; rctSize.right=rctSize2.right=0; rctSize.top=rctSize2.top=0; DWORD wndStyle=NULL; CWnd* pMainWnd=NULL; try{ pMainWnd=AfxGetMainWnd(); }catch(...) {pMainWnd=NULL;} if (pMainWnd!=NULL) { pMainWnd->GetWindowRect(&rctSize); rctSize.left=rctSize.left<0?0:rctSize.left;//Если окно Распахнуто координаты угла м.б.<0 rctSize.top=rctSize.top<0?0:rctSize.top; pMainWnd->GetClientRect(&rctSize2); wndStyle=pMainWnd->GetStyle(); } pMainWnd=NULL; retval=m_pJob->OutputToWindow(_T("")//_T("Заголовок") ,rctSize.left,rctSize.top,rctSize2.right,rctSize2.bottom ,wndStyle,pMainWnd); }//Конец "Настройка окна предв. просмотра" } else//Печать на принтер {retval=m_pJob->OutputToPrinter((pInfo->m_pPD->GetDevMode()!=NULL)?pInfo->m_pPD->GetCopies():1);} CRPEPrintOptions PrintOptions; m_pJob->GetPrintOptions(&PrintOptions); } return retval; } void CCrystalView::Empty() { m_CRpFilePath.Empty(); m_pJob=NULL; } // Старт вывода на печать (поале Print Report) BOOL CCrystalView::StartPrintJob(void) { BOOL retval=isPrintJobStarted(); if (retval) {retval=m_pJob->Start();}//Печать/Предв. просмотр return retval; } //ПРИМЕР ВЫЗОВА if (retval)//Форирование, в памяти, DBF-файла прошло без проблем {retval=StartReport(&DbfCreator,IDS_PRINT_BALLS_FILENAME/*Идентификатор строки содержащей имя .rpt - файла выводимого на печать*/,pInfo);} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 09:58 |
|
||
|
Crystal reports VS 2005
|
|||
|---|---|---|---|
|
#18+
Я тут поковырял... Походу все что нужно лежит в C:\Program Files\Common Files\Business Objects\2.7\Bin\ Пока смог только запустить готовый отчет. Делал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Все отлично. Отображается отчет с предустановленным рекордсетом. Но мне в идеале нужно строить отчет динамически (определять поля). Или хотябы подставлять в отчет свой ADODB::Recordset. Делал через IDatabase интерфейс: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Выдает ошибку о том что сервер не существует. Вопрос. Помогите кто нибудь с инфой по этим интерфейсам. Неверю что никто не сталкивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 21:50 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34011185&tid=2030444]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 440ms |

| 0 / 0 |
