Report Manager Frequently Asked Questions

Q. Why does my report show only one record?

You must assign main dataset property of your subreport to a dataset. Because you can open as many datasets as you want you must say the engine which is the dataset for the subreport printing procedure.

Q. I have some problem, where can I find a user group for this tool?

You should use the reportman group at yahoo groups, there, you will find other Report Manager users. Do not e-mail directly to the author unless you want to contract paid support.

Q. Can I contribute to Report Manager project?

Enhacements and new modules for the engine are welcome, you can also report bugs, bufixes ideas etc, use reportman group at yahoo groups for this tasks. You can also contract the author services and pay for new features.

Q. Wich development environments supports the engine?

A.

a) In native mode (linked inside the executable or as a Borland package):
- Delphi 4,5 Enterprise. Delphi 6 Professional, Delphi 6 Enterprise. Delphi 7 Desktop, Delphi 7 Enterprise, Delphi 7 Architech.
- C++Builder 4,5 Enterprise. C++Builder 6 Professional, C++Builder6 Enterprise.
- Kylix 1,2,3 Desktop and Enterprise. Kylix 1,2,3 Open Edition-FreeCLX.
b) . In ActiveX mode (distribution of Reportman.ocx-Windows only needed):
- Any Delphi/C++Builder version accepting ActiveX controls (Borland personal editions)
- Any development environment accepting ActiveX controls, Visual C++, Visual Basic, Visual Foxpro...
c) In command line tools mode (executing command line tools):
- Any language capable of executing command line tools, PHP, bourne shell, python..., command line tools are available for Linux and Windows
d) In shared library mode:
- Any compiler or development enviroment capable of using standard C shared library functions, that is GCC compiler, FreePascal compiler..., distribution of reportmanapiqt.so/reportmanapi.so (Linux) and Reportman.ocx needed.

Q. How can I set report parameters at runtime?

A. CLXReport1.Report.Params.ParamByName('CUSTOMERINI').Value:=2;

Q. How can I show the parameters before executing?

A. if CLXReport1.ShowParams then CLXReport1.Execute;

Q. What about passing application opened datasets to the report?

var aitem:TRpAliasListItem;
begin
aitem:=RPAliasItem.List.Add;
aitem.alias:='AREPORTALIAS';
aitem.dataset:=adataset;
end

Q. How can I alter the SQL sentence of a report dataset before executing it?

A. CLXReport.Report.DataInfo.Items[0].SQL:='SELECT....'

Q. How can I pass opened connections or path to databases to the report?

A. Depend on the database driver used:

Q. How can I set properties of components at runtime in already loaded report?

A.You must find the component you want to modify, Report property in TCLXReport is the owner of all report items:
uses rplabelitem; ...
var acompo:TRpExpression;
acompo:=TRpExpression(CLXReport1.Report.FindComponent('TRpExpression5'));
if Assigned(compo) then
begin
acompo.DisplayFormat:='dd/mm/yyyy';
end
Note: When assigning text or expression properties declare the variables you assign as WideString.

Q. I'm designing a report that will be printed in any matrix printer or receipt printer, how can I use printer fonts to speed up the print process?

A. In Windows platform, at page setup option of Report Manager Designer you can set use allways device fonts option. Allways install the correct driver for the printer or a driver that printer is emulating. For other methods see answer bellow.

Q. Why Report Manager needs TClientDataset class?

The engine must be capable of go back one record for the main dataset (Prior procedure) because grouping feature, but some datasets only support unidirectional datasets, I use a patched version of TClientDataset (TRpDataset), that no eats lots of memory like TClientDataset, it frees the records it does not need so the engine can print/proces millions of records without memory problems but a bit slower if you print only a few thousand records.

Because this, Delphi 5 Professional or lower can not be used as native components but you can use the ActiveX control.

Q. Is Report Manager Engine Thread Safe so it can be used in multithreaded applications (servers)?

Report Manager is thread safe but there are some issues not only related to Report Manager:
- BDE is not thread safe by default (a session must be open for each thread), you can assign a session to a database report or you can assign a TDatabase directly to the database report component in runtime.
- Warning about local dabase access modes, some database engines like Interbase/Firebird allow to set a path to the database directly (c:\database.gdb) using local access to database, you must avoid this because it's not thread safe you must use net access mode allways (localhost:c:\database.gdb)
- Not all VisualCLX components are thread safe so you need to modify this VisualCLX components in the main thread, so the designer package is (becasuse this issue) not thread safe.

Q. Can Report Manager print in dot matrix printers in Linux as fast as in Windows?

Windows provides drivers and those drivers provide printer specific fonts, so the Windows GDI can merge graphics and texts, the printer driver does the real hard work of printing, Report Manager only search for the best suited font (a printer font) in Windows font list, select it and call Windows specific API to draw the text (this is the behaviour for use device fonts option)

For Linux, Report Manager uses the Kylix graphic engine that uses the Qt graphic engine, the Qt graphics engine writes output usually in postcript and then the printer filter transform it to a understandable language to the printer (usually this work is done by ghostcript).

So you can use a printer filter to convert postcript to text or better is the use of dot matrix and pos device feature, see documentation, the engine can generate text output with printer escape codes in Windows and Linux. See documentation.

Q. Why does my report using Group Headers give strange results?

For reports including group headers to work correctly the order of the data within the report must match the grouping structure of the report. Therefore the SQL statement returning the data (for example SQL SELECT) must include code to order the data to match the report definition.

Q. Why does my Active Server Page freeze when using the ActiveX control?

Active Server Pages (ASP) must not produce any console output for correct operation. ASP can correctly invoke the ActiveX control to generate PDF output if the following rules are followed

Previewing the report will not work from within an ASP program. Printing the report may also fail based on the printing environment setup on the Web server running the ASP (privileges).

Q. What is two pass report option? What is the use of this feature?

The engine is capable of preview the first page before calculating all the pages (can be thousands), this is the default behaviour for speed and memory consumtion (when printing, pages printed are released from memory).

The engine is also capable of printing the total pages in the first page,it's also capable of going back to the first page to process a new subreport (paralel subreports), so you can print in the first page as many subreports as you want.

The printing of total pages (PAGECOUNT) requires the previous calculation of the report, then PAGECOUNT is replaced with the total number of pages, the page count special expression can't be used inside expressions..

So two pass report must be used for both cases, PAGECOUNT and SkipToPage. I doubt other engines implement SkipToPage, and I doubt other engines allow using PAGECOUNT in expressions, (for example in print condition of a section because can produce a dead lock).

Q. While using the report in my software this error occur: Property xxx does not exists, what is wrong?

You are reading a report saved with a new version, and your components installation (Delphi/Builder/Kylix) or your ActiveX component is older, so it's not able to execute reports that have new (unknown) properties onm it. Just reinstall the components with the newest version (Delphi/Builder/Kylix) or ActiveX control.