2017-01-23 2 views
0

My PrintReport funtion работает, но я хочу распечатать отчет непосредственно с PowerBuilder до принтера по умолчанию без, создавая диалоговое окно. Как я могу это сделать? Также я могу указать диапазон страниц одновременно?Печать отчета без диалогового окна

Я использую Crystal Reports 11.5 и PowerBuilder 12.5.

ответ

0

У PowerBuilder нет метода PrintReport. Не уверен, что это что-то в коде приложения или в Crystal. Если вы печатаете окно данных, вы можете проверить параметр «Технические характеристики печати - подсказка перед печатью».

+0

Для Crystal Reports в PowerBuilder я нахожусь используя OleObject и использовать ConnectToNewObject для CrystalRuntime.Application. Соединение выполнено успешно, и отчет просматривается. На панели инструментов по умолчанию имеется кнопка печати, которая поставляется со встроенным программой просмотра отчетов. Эта кнопка панели инструментов отлично работает и открывает диалоговое окно для выбора принтера и отправки печати на выбранный принтер. Я хотел распечатать отчет без диалогового окна печати. Я нашел решение этой проблемы. Осталось только 133 символов, поэтому мне нужно опубликовать детали в разделе ответа на этой странице. – Berka

+0

PrintReport - это метод для вставки Crystal Reports ActiveX. Он не будет работать с PowerBuilder без элемента управления ActiveX. Есть еще одна проблема, которую я хочу решить. Как я могу получить общее количество страниц хрустального отчета? – Berka

0

1- экземпляра Объявите переменные в окне вы работаете

String module 
String Folder, FileName 
Datawindow theDw 

OLEObject g_ole_crx_application 
OLEObject g_ole_crx_report 
OLEObject g_ole_crx_connection_info 
OLEObject g_ole_crx_export_options 
OLEObject g_ole_crx_report_controls 

String gs_rpt_filename, queryString, report_folder, report_file 

OLEObject myoleobject 

Long gi_return 

//Please remove those variables you dont need 

2- Paste следующие в любом управления (например, кнопки)

String LoadFrom, LoadFile="C:\BT\SVN\Crystal\PB\app_reports_by_company_module.rpt" 
Integer Object_Id 

g_ole_crx_application = CREATE OLEObject 

gi_return = g_ole_crx_application.ConnectToNewObject('CrystalDesignRunTime.Application.11') 

if gi_return < 0 then 

     MessageBox("Error", "Not connected to Crystal report") 
     return 

else 

     gs_rpt_filename = LoadFile 
     g_ole_crx_report = g_ole_crx_application.OpenReport(gs_rpt_filename) 

//Returns 0 if the report file does not exist or if an error occurs. 

end if 

queryString = g_ole_crx_report.ApplicationName 
g_ole_crx_connection_info = 
g_ole_crx_report.database.tables[1].ConnectionProperties 
g_ole_crx_connection_info.deleteAll 


//g_ole_crx_report_controls = g_ole_crx_report.PageGenerator.Pages 

String ConnectInfo = "" 

//after deleting connection properties , add new connection properties 
g_ole_crx_connection_info.add("Data Source", SQLCA.ServerName) 
g_ole_crx_connection_info.add("Initial Catalog", SQLCA.Database) 
g_ole_crx_connection_info.add("Database Type", "OLE DB (ADO)") 
g_ole_crx_connection_info.add("Provider", "SQLNCLI10") 
g_ole_crx_connection_info.add("User ID", SQLCA.logid) 
g_ole_crx_connection_info.add("Password", SQLCA.logpass) 
ConnectInfo += "Provider='SQLNCLI10';Data Source='" + SQLCA.ServerName + "';" 
ConnectInfo += "Initial Catalog='" + SQLCA.Database + "';DatabaseType='OLE DB (ADO)';" 
ConnectInfo += "User ID=" + SQLCA.logid + ";Password=" + SQLCA.logpass 
g_ole_crx_connection_info.add("ConnectInfo", ConnectInfo) 

g_ole_crx_report.database.Verify 

//add parameters if there are any 

//g_ole_crx_report.ParameterFields.GetItemByName("comp_code").AddCurrentValue('C001') 

// here is the way how you can send print to the printer without print dialog box 

// first set printer 

g_ole_crx_report.SelectPrinter("HP LaserJet 2200 Series PCL 5","HP LaserJet 2200 Series PCL 5", "LPT1") 

// now use the PrintOut method 

g_ole_crx_report.PrintOut (FALSE, 1, TRUE, 1, 1) 

// if you have insertable control to view crystal report you can use ReportSource and ViewReport 

// i have it in a tab page with the name ole_view 

// make sure you also set the source 

//tab_1.tp_preview.ole_view.object.ReportSource(g_ole_crx_report) 
//tab_1.tp_preview.ole_view.object.ViewReport 



// Reference pdf : Crystal Reports XI Technical Reference Guide 

// that will work hopefully 
+0

Функция PrintOut в приведенном выше коде передает только первую страницу на принтер (последние два параметра 1, 1), если позволяет сказать, что есть 3 страницы, которые я хочу отправить на принтер, тогда последние два параметра функции должны быть 1, 3 Синтаксис: PrintOut ([promptUser], [numberOfCopy], [collated], [startPageN], [stopPageN]) – Berka

+0

Также обратите внимание, что функция ConnectToNewObject подключается к («CrystalDesignRunTime.Application.11»). CrystalDesignRunTime Требуется для метода PrintOut. – Berka

+0

Просто обновление: CrystalDesignRunTime не требуется для метода PrintOut. Метод работает с CrystalRuntime.Application.xx. – Berka