• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1065
  • Last Modified:

Visual FoxPro Crystal Reports Viewer Programmatically Printing the Selected View (page Tab) on the Crystal OLE Control

I am using the Crystal Reports 9 ActiveX Ole Control on a Visual FoxPro 9 form. I am able to run reports correctly. Because we wanted our users to be able to select different printers besides their Windows default printer, we have over-ridden the control's print routines and display a standard Windows printer dialog. All this has been working fine.

My question involves reports with the ability to drill into groups. If our users drill into a group and then print, only the results from the preview tab are printed. How can I specify to print from the active view (page tab the user is sitting on when they click print)?
0
ContrAcct
Asked:
ContrAcct
  • 5
  • 3
1 Solution
 
mlmccCommented:
How are you printing?
If you are printing through code you may have to capture the drill in parameters and pass them to the report.  Not sure you can do that.

There is a printer select control you can put on the report.  They should be able to et the printer then use the print icon to print the current page.

mlmcc
0
 
ContrAcctAuthor Commented:
There must be a way to specify the active view for printing. I know how to find the active view index, I just need to know where to pass that value.

My form has an Ole Crystal control, and the control has a property that stores the report object. I have a custom printing routine that subverts the objects standard print routine. My VFP 9 code for printing is as follows:

Local llReturnValue, lnSelect, lnOriginalOrientation 
lnSelect = Select()
llReturnValue = .T.
llPrintToFileEnabled = .F.
Store "" to lcPortName, lcPrinterName, lcPrintRange
Store 0 to lnCopies, lnCollate, lnFromPage, lnToPage, lnOrientation

lnOriginalOrientation = this.oReport.PaperOrientation

lnReturnValue = WindowsPrinterDialog(llPrintToFileEnabled, @lcPrinterName, @lcPortName, @lnCopies, @lnCollate, @lcPrintRange, @lnFromPage, @lnToPage, @lnOrientation)

With this.oReport
	If InList(lnReturnValue, 1, 2) && Print or apply

		.SelectPrinter("", lcPrinterName, lcPortName)
		.PaperOrientation = lnOriginalOrientation 

		If lnReturnValue = 1
			llCollate = lnCollate = 1
		
			Do Case
				Case lcPrintRange = "RANGE"
					.Printout(.F., lnCopies, llCollate, lnFromPage, lnToPage)
				Case lcPrintRange = "CURRENT"
					lnPageNo = this.GetCurrentPageNumber
					.Printout(.F., lnCopies, llCollate, lnPageNo, lnPageNo)
				Otherwise 
					.Printout(.F., lnCopies, llCollate)
			EndCase
		EndIf
	EndIf
EndWith

Select (lnSelect)
Return llReturnValue

Open in new window

0
 
mlmccCommented:
I don't know how to do it.

mlmcc
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
ContrAcctAuthor Commented:
Does anyone else have any ideas?
0
 
ContrAcctAuthor Commented:
What about using the Crystal Reports Print Control ActiveX object? Does any have an foxpro experience with printing using that control?
0
 
ContrAcctAuthor Commented:
Found a Crystal Reports Viewer 11.5 ActiveX Control that uses a better Windows printer dialog. It prints correctly. As a warning to others, though, it does not like to be placed on a modal form. Previous versions of the Viewer ActiveX Control could be jerry-rigged to work correctly. 11.5 could not.

Thanks anyway.
0
 
ContrAcctAuthor Commented:
The other answers were barely helpful and actually dismissive.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now