--- title: "Structure - Lasernet Finance and Operations User Guide" slug: "structure" description: "To open a report’s Structure, navigate to Lasernet > Common > Reports > Setup > Structure. Read the article to learn more about a report's Structure." updated: 2025-10-27T10:21:29Z published: 2025-10-27T10:21:29Z canonical: "kb.lasernetgroup.com/structure" --- > ## Documentation Index > Fetch the complete documentation index at: https://kb.lasernetgroup.com/llms.txt > Use this file to discover all available pages before exploring further. # Structure To open a report’s Structure, navigate to **Lasernet** > **Common** > **Reports** > **Setup** > **Structure**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-XDW0USEL.png) For ease of use, this section of our guide is divided into paragraphs, each named after either a section of the **Structure** page or a function. ### Action Pane Functions ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-OMJ6JB6R.png) The **Add section** and **Remove section** buttons enable you to either add or remove a section. Use the **Move** and **Copy** buttons to move or copy sections within the current report or to another report, including conditions. The **Up** and **Down** buttons can be used for moving sections within the current report. To reload your report fields, click the **Reload report fields** button. A **Reset modifications** option will then appear. Use **Reset modifications** to revert all modifications to their default values, including sorting, number of decimals, conditions, type changes, label changes, and more. This will not remove or change your custom-added yellow fields. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-K3C8SZYV.png) To learn more about the use of the **Naming patterns** button, visit [the dedicated page](/v1/docs/fo-user-guide-defaults#naming-patterns). ### SECTION and CONDITION ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-C1LYZNFX.png) The **Name** field indicates the name of the selected section within the report, while the **Output** field indicates the name of the section in the XML. These are the same by default. However, you can overwrite the **Output** field to your liking. It is possible to hide a section in the structure by using the eye icon: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-5NYWN2A3.png) A **Condition** can be used to control whether to show or hide the section. The following are the options: - **None**: The section will always be shown. - **Code**: An expression can be used. The section will be visible if the code condition expression is **True** or **1**; it will be hidden if the code condition expression is **False** or **0**. - **Query**: Query filters and ranges can be used. The section will be visible if the query filters or ranges are met; otherwise, it will be hidden. ### Fields ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-RW4152Q0.png) The **New** and **Delete** buttons enable you to add or delete custom fields. The **Up** and **Down** buttons enable you to move fields within the section. You can sort field records in the **Fields** grid by using the **Sort by** button. It is possible to sort records by **Name**, **Output**, or **Expression**: - **Name**: The fields are sorted alphabetically using the **Name** column. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-Q8HUEDLZ.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-AZZR8A26.png) - **Output**: The fields are sorted alphabetically using the **Output** column. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-O4ZZA7ZS.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-DTAQCBY1.png) - **Expression**: The fields are sorted alphabetically using the **Expression** column. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-EGUNQJL8.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-PCU5GL42.png) Use the **Move** and **Copy** buttons to move and copy fields within the current report or to another report, including conditions. The **Tools** dropdown menu includes the option **Convert to query link**. This option converts the currently selected subreport element into a query and links it to the current query. For more information on Query Links, consult [this section](/v1/docs/query-links) of the User Guide. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-A08SLCV5.png) In the **Visible** column of the **Fields** grid, you can easily show or hide a field. By default, all fields are activated (visible). To test a report without a field, click the eye icon in the **Visible** column for that field record to disable it, and then print the report again. > [!NOTE] > **Note** > > The **Visible** field only hides the field from the XML. Hidden fields are still fetched when running the query. A **Condition** can be used to control whether to show or hide the field. - **None**: The section will always be shown. - **Code**: An expression can be used. The section will be visible if the code condition expression is **True** or **1**; it will be hidden if the code condition expression is **False** or **0**. - **Query**: Query filters and ranges can be used. The section will be visible if the query filters or ranges are met; otherwise, it will be hidden. The **Name** column indicates the name of the field, while the **Output** column indicates the name of the field in the XML. These are the same by default. However, you can overwrite the output to your liking. The **Expression** column indicates the field value and can handle a variety of custom fields. The following table provides details about available fields. | Field name | Description | | --- | --- | | Aggregate | Sum, Running Sum, Count, Running count, Average, Min, Max | | Calculate | Various predefined system values | | Convert | The **Convert** option can be selected in an expression, and several conversions can be made in the same expression (conversion on conversion). | | CustomCode | Codes that can be created in X++. | | CustomProperty | The **Custom properties** option in the dialog from which the report was initiated. | | Enum | Enumeration values | | Expression | Expression/formula for calculation | | Label | Microsoft system labels that are displayed in the report language using Microsoft predefined translations. | | Language Text | Selection of system labels and language texts | | Parameter | The **Parameters** option in the dialog from which the report was initiated. | | ReportValue | All existing field values from the report | | ReportValueFormatted | All existing fields from the report formatted as **String** values | | subreport | Enables the selection of an already created query report. | | Value | Fixed values that are manually entered. | #### Aggregate The **Aggregate** function provides an option to build a structure containing calculations (a Calculation tree). ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-NTHO4T6A.png) The calculation tree enables multiple calculations with different fields for grouping, including the option to add additional values at the line/group level of the calculation. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-9S5K4A6K.png) For aggregation, it is possible to select any existing value from a data source, report, etc., so there is no need to create placeholders for a value (adding an existing field to the element structure, such as the **LineAmount** and **Qty** fields). ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-D53P4KK4.png) **Automatic summary** creates a section in the XML and provides the option to include multiple calculations for multiple fields. Calculations can be grouped using the **Group by** settings. These include the option to add additional values at the line/group level of the calculation. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-3XNA1ZO3.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-BF6K246D.png) Aggregation makes it possible to **Group by**, **Calculate if**, and add **Additional values**: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-B7HDFXT6.png) For aggregation, any existing value from a data source, report, etc., can be selected. Therefore, it is not necessary to create placeholders for a value (which means adding an existing field into the element structure, such as the **LineAmount** and **Qty** fields). The following is an example of **Calculate if**: - Subtotal for **Qty** and **Lineamount** for the Item group, including the name of **ItemGroup**. - Subtotal for **Qty** and **Lineamount** for the Item number, including the **Item Name**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-8QJ4QBIY.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-6ASEG3A5.png) #### Expression The **Expression** option from the dropdown menu opens the Expression editor. The Expression editor can be used to build expressions, which range from simple expressions, such as hard-coded values, to more complex expressions that integrate functions and utilize logic. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-580L1DA2.png) Expressions can be used in multiple places within Lasernet FO Connector, including, but not limited to, the report’s Structure, Conditions, and individual fields with the toolbox icon. For more information on the Expression editor, see the [Expression Editor](/v1/docs/expression-editor) section of this guide. #### Subreport To add a query report as a subreport to any existing report, follow these steps: 1. Navigate to **Lasernet** > **Common** > **Reports**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-WOXA0TE1.png) 1. Locate the report to which you want to add a query report, then open it. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-JLXHJLHQ.png) 1. The report structure, which represents the XML structure, can be viewed in the **Filter** pane on the left-hand side of the page. Locate the section to which you want to add a query report, then click it. 2. Under the **Fields** section, click the **New** button. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-H01L8AGV.png) 1. Within the new record that appears, specify a field **Name** and **Output**. Once you are done, open the drop-down combo box in the **Expression** field and select **subreport**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-9Y637FXI.png) 1. As a result, the **Settings** dialog opens. From the **Report name** dropdown combo box, select the desired report. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-AZU3WV6B.png) 1. The **If ranges are empty** option ensures that subreports are not executed without any ranges or with empty ranges. Empty ranges or no ranges often cause slow performance, as all records can be fetched. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-5WXPTSHD.png) - Selecting the **Skip** value ensures that a subreport is not executed if there are no ranges or if ranges are empty. - Selecting the **Skip with warning value** enables executing a subreport if there are no ranges or the ranges are empty. With that, a warning like the following is shown: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-L1PWT9X1.png) - Selecting the **Run always** value allows executing a subreport even if no ranges are applied or no values are set for ranges. 1. In this example, leave the **If ranges are empty** field set to **Skip**. 2. Once you have selected the query report, click the **Filter** button to set a link between the subreport and the main report by defining a table and its fields. This way, you can receive one post letter back when running the main report. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-697YT1W8.png) 1. A query dialog will open. Identify the subreport fields that will be used to link the subreport to the main report. If the field is not in the list, use **Add** to add the table and field. Click the tools button to open the Expression Editor. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-2WVMY95N.png) 1. In the **Range** Expression Editor dialog that pops up, add the relevant table from the main report to complete the link between the subreport and the main report. First, click the **Delete all** button to remove any existing expressions. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-NLXHYKV3.png) 1. Next, select the dropdown option for **Select value**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-B30YJVZJ.png) 1. Select the relevant table from the main report in the dropdown. Then, click the dropdown again and select the relevant field from this table. 2. Once you are done, click the **OK** button on both panels to close them and save the changes. 3. After adding a filter, verify that the link between the subreport and the main report has been added. As a result, you can see the corresponding value (the table and its field) in the **Customer account** text box at the bottom of the **Settings** panel. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-VALCE7FS.png) 1. Once you have added the subreport, click the **Save** button to save the changes. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-8BWP26AQ.png) The next time the report is used, the section to which you have added a subreport (**Demo**, in our example) is added to the resulting XML with the content of this subreport. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-821K8YLL.png) Data types are normally imported from the report, but can be overwritten. To this end, use the **Type** column of the **Fields** grid. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-5JT8MJWY.png) | Value | Description | | --- | --- | | String | A number of characters | | Integer | A number without a decimal separator | | Real | Numbers with a decimal separator, also called decimals | | Date | Contains year, month, day, hour, minute, and second. Refers to the Extended datatype on the field. | | Enum | An abbreviation for enumerated text: a set of literals. | | RString | Right-aligned string. It does not make sense to use it in an XML file like Lasernet. | | UtcDateTime | Contains year, month, day, hour, minute, and second | | Container | A container is a dynamic list of items containing primitive data types and/or some composite data types. | | VarString | A number of characters | | CData | Used for encoding HTML within the XML document. | | Base64 file | Base 64 coded field | | Resolve labels | By selecting this option, you can create a label translation for a field that contains a label. | | GUID | A globally unique identifier | | Int64 | Represents a 64-bit signed integer. | | Time | Contains hours, minutes, and seconds. | | Azure storage | URL from or to Azure Storage | **Skip Testing** enables marking a field to skip validation when testing using the Test and Performance Suite. Follow [this link](/v1/docs/test-exceptions) for more information on Test and Performance Suite Test exceptions. **Documentation mapping** provides the option to specify a reference to the design in Lasernet. This information will be visible on the export created when using the **Generate report summary** function. ### Details The fields available in the **Details** tab will depend on the currently selected field in the **Fields** grid. #### Number of Decimals This option is available for fields of type **Real**. Prices are normally defined with two decimals, while volume and weight are defined with three and four decimals, respectively. You can set the decimals to your preference. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-1FOGDKQL.png) #### Custom Format The **Custom format** option enables overriding the data type format. It is only applied if **Use regional settings** is set on the report’s **Parameters**. **Custom format** is available for the following types: **Date**, **UtcDateTime**, **Real**, and **Time**. Date: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-HFU99HTU.png) UtcsDateTime: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-REDV7Z03.png) Real: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-LKH15GMW.png) Time: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-KQTR3YQ5.png)