PWCT 1.9 Art Documentation ( http://doublesvsoop.sourceforge.net ) 2006-2019, Mahmoud Fayed ( msfclipper@users.sourceforge.net ) _____________________________________________________________________________________ Table of contents 1 - Introduction 2 - Implementation steps 3 - Final Steps Tree 4 - Application during the runtime 1 - Introduction In this lesson we are going to learn how to use 1 - (Access Report - Parent Class) template 2 - (Access Report - Child Class) template 2 - Implementation Steps Open database SysData.mdb , password = systemdatabase123 Fig. 1 Create new report using Wizard Fig. 2 Fig. 3 Fig. 4 Fig. 5 Fig. 6 Fig. 7 Fig. 8 Fig. 9 Fig. 10 Fig. 11 Fig. 12 Fig. 13 Fig. 14 Fig. 15 Fig. 16 Fig. 17 Fig. 18 Fig. 19 Fig. 20 Fig. 21 Fig. 22 Fig. 23 Fig. 24 Fig. 25 Run PWCT, Create new file using Access Report – Parent Class template Fig. 26 File name = ReportParent.SSF Fig. 27 Fig. 28 Press CTRL+R to generate the source code file ReportParent.PRG Fig. 29 Open Main.SSF Fig. 30 Use the component (Set procedure to) to include the source code file (ReportParent.PRG) Fig. 31 Fig. 32 Create new file using the template (Access Report – Child Class) Fig. 33 File name = CustomersReport.SSF Fig. 34 Fig. 35 Set class name = CustomersReportClass Fig. 36 Fig. 37 Fig. 38 Set window name = CustomersReportWindow Fig. 39 Set report name = Customers_All Fig. 40 Fig. 41 Fig. 42 Set the window title to Customers Report Fig. 43 Fig. 44 Press CTRL+R to generate the source code file CustomersReport.PRG Fig. 45 Open Main.SSF Fig. 46 Use the component (Set procedure to ) to include the source code file CustomersReport.PRG Fig. 47 Fig. 48 Fig. 49 Create new object CustomersReportObject of class CustomersReportClass Fig. 50 Fig. 51 Fig. 52 Fig. 53 Fig. 54 3 - Final Steps Tree ===================== Main.SSF ===================== The First Step Load System Modules Set Procedure to "About.PRG" Set Procedure to "Database.PRG" Set Procedure to "Customers.PRG" Set Procedure to "CustomersBrowse.PRG" Set Procedure to "CustDataBrowse.PRG" Set Procedure to "CustomerBrowse2.PRG" Set Procedure to "ReportParent.PRG" Set Procedure to "CustomersReport.PRG" Create System Objects Create Object AboutObject of Class AboutClass Create Object CustomersDataObject of Class CustomersDataClass Create Object CustomersBrowseObject of Class CustomersBrowseClass Create Object CustDataBrowseObject of Class CustDataBrowseClass Create Object CustomersBrowse2Object of Class CustomersBrowse2Class Create Object CustomersReportObject of Class CustomersReportClass Define New Window ( win1 ) , Title : "System" Window Events Window Properties Window Controls START OF MAIN MENU MENU POPUPS DEFINE POPUP "File" POPUP ITEMS Define ITEM ( "Customers Data/Browse" ) Define ITEM ( "Customers Browse" ) Define ITEM ( "Customers Browse by Country" ) Define ITEM ( "Customers" ) Define ITEM ( "Customers Report" ) Define ITEM ( "About" ) Define ITEM ( "Close System" ) END OF POPUP END OF MAIN MENU Define New Statusbar Items Define New StatusItem ( "Ready" ) Events Properties Keyboard Events Properties Clock Events Properties End Statusbar End Of Window win1.Maximize ( ) Activate window Procedures Define Procedure closesystem Start Here win1.Release ( ) End of Procedure ======================== CustomersReport.SSF ======================== Set Class Name & Window Name PWCT-Code Generator: Replace String (MyClassName) with (CustomersReportClass) PWCT-Code Generator: Replace String (MyWindowName) with (&(self:cWindowName)) Class Define Class MyClassName From Report_Base Declare Class Data Data ReportName Init Value "Customers_All" Data cWindowName Init Value "CustomersReportWindow" Declare Class Methods Method showwindow Method closewindow Method SizeReport End of Class Class Methods Define Method ShowWindow Class MyClassName Start Here Define New Window ( MyWindowName ) , Title : "Customers Report" Window Events Event: ON INIT : Action self:ShowReport() Event: ON SIZE : Action self:SizeReport() Event: ON MAXIMIZE : Action self:SizeReport() Window Properties Window Controls Define New Button ( btn1 ) , Caption : "Close" Button Events Event: ON CLICK : Action self:CloseWindow() Button Properties Define New Button ( btn2 ) , Caption : "Print" Button Events Event: ON CLICK : Action self:PrintReport() Button Properties Define New Button ( btn3 ) , Caption : "Refresh" Button Events Event: ON CLICK : Action self:ShowReport() Button Properties Active Control ( self:oActiveX ) End Of Window MyWindowName.Maximize ( ) Activate window End of Method (Return 0) Define Method CloseWindow Class MyClassName Start Here MyWindowName.Release ( ) End of Method (Return 0) Define Method SizeReport Class MyClassName Start Here Local tempvar1,tempvar2 tempvar1 = MyWindowName.Width tempvar2 = MyWindowName.Height self:oactivex.nWidth := tempvar1 - 84 self:oactivex.nHeight := tempvar2 - 125 MyWindowName.btn1.Row := tempvar2-88 MyWindowName.btn2.Row := tempvar2-88 MyWindowName.btn3.Row := tempvar2-88 self:oactivex.Show ( ) End of Method (Return 0) ===================== ReportParent.SSF ===================== Class Define Class Report_Base Declare Class Data Data database Init Value GetStartUpFolder()+"\data\sysdata.mdb" Data outputfile Init Value GetStartUpFolder()+"\tempfile.snp" Data myaccessobj Init Value 0 Data oActiveX Init Value 0 Data Filter Init Value "" Data dbpassword Init Value "systemdatabase123" Data outputfile2 Init Value GetStartUpFolder()+"\tempfile.html" Data outputfile3 Init Value GetStartUpFolder()+"\tempfile.xls" Data ComplexSearch Init Value "" Declare Class Methods Method showreport Method printreport Method exportreport Method exportreport2 End of Class Class Methods Define Method ShowReport Class Report_Base Start Here StartUpFolder := Get StartUp Folder Set Filter Create OLE Object self:myaccessobj of Type "Access.Application" self:myaccessobj.OpenCurrentDatabase ( self:database,false,self:dbpassword ) self:myaccessobj.DoCmd:OpenReport ( self:ReportName,1 ) IF ( .not. empty(alltrim(self:filter)) ) Start Here self:myaccessobj.Reports(Self:ReportName):Filter := Self:Filter + Self:ComplexSearch ELSE Start Here self:myaccessobj.Reports(Self:ReportName):Filter := "1 = 1" + Self:ComplexSearch END OF IF STATEMENT self:myaccessobj.DoCmd:OutputTo ( 3,,"SnapshotFormat(*.snp)",self:outputfile ) self:myaccessobj.Quit ( ) self:oactivex.snapshotpath := self:outputfile End of Method (Return 0) Define Method PrintReport Class Report_Base Start Here StartUpFolder := Get StartUp Folder Create OLE Object self:myaccessobj of Type "Access.Application" self:myaccessobj.OpenCurrentDatabase ( self:database,false,self:dbpassword ) IF ( .not. empty(alltrim(self:filter)) ) Start Here self:myaccessobj.DoCmd:OpenReport ( self:ReportName,,,self:filter + Self:ComplexSearch ) ELSE Start Here self:myaccessobj.DoCmd:OpenReport ( self:ReportName,,,"1 = 1 " + Self:ComplexSearch ) END OF IF STATEMENT self:myaccessobj.Quit ( ) End of Method (Return 0) Define Method ExportReport Class Report_Base Start Here StartUpFolder := Get StartUp Folder Set Filter Create OLE Object self:myaccessobj of Type "Access.Application" self:myaccessobj.OpenCurrentDatabase ( self:database,false,self:dbpassword ) self:myaccessobj.DoCmd:OpenReport ( self:ReportName,1 ) IF ( .not. empty(alltrim(self:filter)) ) Start Here self:myaccessobj.Reports(Self:ReportName):Filter := Self:Filter + Self:ComplexSearch ELSE Start Here self:myaccessobj.Reports(Self:ReportName):Filter := "1 = 1" + Self:ComplexSearch END OF IF STATEMENT self:myaccessobj.DoCmd:OutputTo ( 3,,"HTML(*.html)",self:outputfile2 ) self:myaccessobj.Quit ( ) Execute File self:outputfile2 End of Method (Return 0) Define Method ExportReport2 Class Report_Base Start Here StartUpFolder := Get StartUp Folder Set Filter Create OLE Object self:myaccessobj of Type "Access.Application" self:myaccessobj.OpenCurrentDatabase ( self:database,false,self:dbpassword ) self:myaccessobj.DoCmd:OpenReport ( self:ReportName,1 ) IF ( .not. empty(alltrim(self:filter)) ) Start Here self:myaccessobj.Reports(Self:ReportName):Filter := Self:Filter + Self:ComplexSearch ELSE Start Here self:myaccessobj.Reports(Self:ReportName):Filter := "1 = 1" + Self:ComplexSearch END OF IF STATEMENT self:myaccessobj.DoCmd:OutputTo ( 3,,"Microsoft Excel 97-2002 (*.xls)",self:outputfile3 ) self:myaccessobj.Quit ( ) Execute File self:outputfile3 End of Method (Return 0) 4 - Application during the runtime Fig. 55 Fig. 56
|