- In this lesson you will learn the following concepts
- Creating the "Order form" report
- Creating the query
- Creating the report based on a query
- Modifying the "Order form" report
- Displaying the report to be printed from a menu option
- Creating the context menu
- Associating the context menu with the Table control
- Print test
Lesson 4.5. Printing an order
In this lesson you will learn the following concepts
- Creating a report based on a query.
- Printing a report based on a query with parameters.
Estimated time: 30 mn
We will now give the user the possibility to print the details of the search order. The report can be directly printed via the context menu of the Table control.
- Open the project you worked on in the previous lesson.
- Go to the WINDEV home page (Ctrl + <).
- On the home page, click "Tutorial", then in "Part 4 - Full application with data", double-click "Full application (Exercise)".
- A dialogue box prompts you to open the project you worked on in the previous lesson. You can open the local copy or the original project. Select "Open the local copy".
|A corrected project is available. This project contains the different reports created in this lesson. To open the corrected project, go to the home page and click "Tutorial", then in "Part 4 - Full application with data", double-click "Full application (Answers)".|
Creating the "Order form" report
First, we will define the data that will be displayed in the report:
- The order characteristics: date and order number.
- The personal customer details: name, address, zip code, city and country.
- The characteristics of the order lines:
- Ordered quantity,
- Product reference,
- Product caption,
- Total BT,
- Total IOT.
To easily create this report, the data to print will be grouped in a query. This query can be used by the report or by any other element of the WINDEV project (Table control, Looper control, etc.).
|WINDEV proposes to create reports from several data sources: data files, queries, controls, text files, etc.|
In most cases, it is recommended to group the data to be printed in a query and create a report based on it. To add data to the report, simply add the corresponding item to the query.
Reports based on data files must be simple reports, i.e. those displaying data from a single data file.
Creating the query
- We will use the query editor to create the base query of the report.
- Click in the quick access buttons. The new element window appears: click "Query". The query creation wizard starts.
- Select the "Select" option.
This query will allow you to select the records to be printed in the report. Go to the next step.
- The query description window appears. To build the query, we are going to select the elements that will be displayed in the result.
- Double-click the items in the analysis, to the left of the description window. The items taken into account are displayed in the middle of the screen.
We will print the following data in the report:
- the customer information. In the "Customer" data file, double-click the FullName, Address, ZipCode, City, and Country items.
- the order information. In the "Order" data file, double-click the OrderID and Date items.
- the product information. In the "Product" data file, double-click the Reference, Caption, and PriceBT items.
- the order line information. In the "OrderLine" data file, double-click the Quantity and TotalBT items.
- the order total price. In the "Order" data file, double-click the TotalBT and TotalIOT items.
|The order in which the items are inserted into the query is important. It is the order in which the data will be displayed in the report. The creation of the corresponding report will be simplified if this order is properly defined.|
The query description window is as follows:
So far, this query is used to select all orders and the corresponding order lines.
We will select the data of a single order using an identifier. Therefore, we will define the order number as a parameter.
- To manage the "Order ID" parameter:
- Select the Order.OrderID item (in the middle of the screen).
- Expand "Selection condition" and select "New condition".
- In the window that appears, we will specify that the selection condition corresponds to a parameter: Perform the following operations:
- Select "Is equal to".
- Check "the parameter".
- The name of the parameter appears automatically: "ParamOrderID".
- Validate the condition description window. The number "1" appears to the right of the Order.OrderID item, indicating that a selection condition was defined.
- Give a name to the query: type "QRY_OrderForm" instead of "QRY_NoName1" in the "Query name" area:
- Validate the query description window ("OK" button).
- The save window is displayed. Validate the default information.
- The graphic query representation is displayed:
Creating the report based on a query
- To create a report:
- Click in the quick access buttons.
- The new element window appears: click "Report" then "Report". The report creation wizard starts.
- The report creation wizard shows several types of reports:
- Select "Table". Go to the next step.
- Select the report data source. The report will be based on the query that was just created. Select "A data file or existing query".
Go to the next step.
- In the list of data files and queries, select the "QRY_OrderForm" query. Go to the next step.
- The wizard asks you if you want to add breaks to the report. No breaks will be used in this report. This concept will be presented later in this tutorial. Select "Don't insert breaks into the report". Go to the next step.
- You are going to specify the order in which the items will be printed and how they will be distributed in the different blocks. In the wizard, the items are listed according to the order defined in the query:
- The items regarding the customer will be displayed in the "Page header" block. This information does not need to be repeated on each order line.
For the FullName, Address, ZipCode, City and Country items, click the line corresponding to the item. In the "Block" column, expand the combo box and select "Page header".
- The items regarding the order will also be displayed in the "Page header" block. This information does not need to be repeated on each order line. For the OrderID and Date items, click the line corresponding to the item. In the "Block" column, expand the combo box and select "Page header".
- Furthermore, we will change the caption of the "OrderID" item.
- Select the line containing the OrderID item.
- Click the Caption column and type "Order #".
- The items regarding the order lines will be displayed in the report body. These items will be displayed for all the order lines.
- The items regarding the order totals will be displayed in the page footer. This information does not need to be repeated on each order line. For the TotalBT_Or and TotalIOT items, click the line corresponding to the item. In the "Block" column, expand the combo box and select "Page footer".
The following table shows the different items assigned to the blocks in the same order they appear in the wizard:
- Go to the next step.
- The wizard proposes to create a counter, a sum or an average on the numeric items of the report. In this report, the calculations are performed by the query. Click the "No calculation" button. Go to the next step.
- This step is used to define the report layout.
Keep the default values with the "Portrait" orientation.
When choosing the print margins, don't forget to take into account the physical margins of the printers. The physical margins of the printers are margins where no print is allowed. Furthermore, the physical margins may be different according to the type of printer.
- Go to the next step.
- In this step, you can:
- Indicate if end users will be able to edit the report in "Reports and Queries".
|The option "Allow editing report in Reports and Queries" is not available in the Express version.|
- select the skin template of the report. It is recommended to use the same skin template as for the windows. In our case, select the "Phoenix" skin template and go to the next step.
- All we have to do now is give a name and a title to the report.
- Enter the title : "Order form".
- The "RPT_Order_form" name is automatically filled.
- Validate ("Finish").
- Since the report is too large to be printed in Portrait mode, the report editor proposes to use the landscape mode, reduce the table or print the table on multiple pages. In our case, accept the landscape mode.
- Accept to reduce the table if necessary.
- The window for saving the report is displayed. Validate the save information.
- The report is displayed in edit mode in the report editor:
- The different order lines are grouped in a table.
- Run this report by clicking in the quick access buttons.
- The report editor asks for the print destination. The print destination can be: Select "Report viewer" and validate.
- The report editor requests the query parameters used by the report. Previously, we used a parameter to specify the number of the order to be printed. For the example, type the test value "1". Validate.
- The report is displayed as we defined it in the report viewer.
- Print the current page or the entire document by clicking the printer.
- Create a duplicate copy.
- Select a different zoom value.
- Save the report as a Word document (in RTF).
- Save the report as an HTML document.
- Save the report as a PDF document.
- Save the report as an XML document.
- Create an email with an HTML version of the report in the message body.
- Create an email and attach the report as a PDF document.
- Annotate the document.
- Perform a search in a document.
- Add watermarks.
Modifying the "Order form" report
We will make some changes to the layout of the report that was just created.
- Delete the number of pages displayed in the report:
- Select the [PAGENUM]/[NBPAGES] control.
- Press the Del key on the keyboard.
- We will move the customer and order information to the page header:
- Delete the "Order form" caption from the page header.
- Delete the text to the left of the customer information (Full name, etc.).
- Move the item containing the city next to the zip code.
- Select the customer details and move them to the right of the report.
- Move up the order number and the order date (to the top of the "Page header" block).
- We are going to position the totals properly in the page footer:
- Select the controls (captions and items) corresponding to the totals in the page footer.
- Move these controls to the lower-right corner of the table.
- Change the print options of the "Page footer" block:
- Open the description window of the "Page footer" block:
- Click the "Page footer" block.
- Right-click to open the context menu and select "Block description".
- In the "General" tab, check the following options:
- Print the "End of document" block AFTER the "Page footer" block on the last page.
- The "Page footer" block is not printed at the bottom of the page, it is kept together with the previous blocks.
- Validate the description window.
- The report is displayed in the report editor:
- Save the report by clicking in the quick access buttons.
Our report is created.
Displaying the report to be printed from a menu option
In our application, the "RPT_Order_form" report will be printed from a context menu option in the Table control that lists the requested orders.
As already seen, the Table control contains an automatic menu. We want to keep the options of this automatic menu and add an option that will be used to print the selected order form.
The principle is as follows:
- We are going to create a new context menu. This menu will contain the WLanguage code used to print the report.
- We are going to link this context menu to the Table control and specify that the default context menu will be displayed just after the context menu defined for the Table control.
Creating the context menu
- To create a context menu in the "WIN_Menu" window:
- Open the "WIN_Menu" window in the editor if necessary (double-click its name in the "Project explorer" pane for example).
- On the "Window" tab, in the "Bars and menus" group, expand "Popup menus" and select "New context menu".
- A new context menu appears in the editor. This menu option includes a single option named "Menu option".
- Open the context menu description:
- Select "Menu option".
- Right-click to open the context menu.
- Select "Context menu description".
- Name the context menu "MENU_Order" and validate.
|Context menus and windows|
Context menus are associated with the windows. If a window includes multiple context menus (window, control, etc.), they are saved with the window.
- We are now going to define the option caption and write its WLanguage code.
- Select "Menu option".
- Press the Space key: the text becomes editable. Type "Print the order form" and validate.
- Display the WLanguage events associated with the option:
- Select the option.
- Right-click to open the context menu and select "Code".
- Write the following WLanguage code:
In this code:
// Print in the report viewer
// Initializes the report query
// Starts printing the report
- iDestination is used to specify that the report will be printed in the report viewer.
- <Report>.InitQuery is used to specify the parameters expected by the query associated with the report. In our case, the query expects the order number as parameter. This order number is in the COL_OrderID column of the TABLE_QRY_FindOrders Table control for the current row.
- <Report>.Print is used to print the specified report (the RPT_Order_form report in our case).
- Close the code window and the window containing the context menu.
- Save the "WIN_Menu" window.
Associating the context menu with the Table control
- Last step: we are going to link the context menu to the Table control.
- In the "WIN_Menu" window, go to the "Find orders" tab.
- Open the Table control description ("Table description" in the context menu of the control).
- In the "UI" tab, expand the "Context menu" combo box.
- Check "Add a context menu", select the "MENU_Order" menu and select "At the beginning" to specify that the menu is placed before the system menu.
- Click inside the window to validate the context menu.
- Now, all we have to do is run a real test:
- Test the "WIN_Menu" window.
- Select the "Find orders" tab pane.
- Specify the criteria and start a search.
- Select one of the orders displayed in the Table control.
- Print the order via the context menu.
- Close the report viewer and the test window.