Author: Exson Qu

# 报告生成工具/报表生成工具

## 报表内容

改定履历
简介
什么是报告生成工具--报告
什么是报告生成工具--报表
管理页
导入与导出
编辑，复制，重命名以及删除报告/报表
我如何创建一个新的报告
我如何创建一种新报表
浏览你的报告/报表
将参数传递到报表

## 修改履历

修改履历
版本 1.0--2005-11-03 首次发行，由D.Premo编写
版本1.1-2005-12-12--包括了报表生成工具的信息，由D.Premo编写

## 简介

报告生成工具提供了管理员创建，复制，编辑，删除，导入与导出数据库驱动的报告和报表的能力。预先定义的报告存放在语言路径，贴上了仅适用于此语言的标签。当安装了插件时，可能有几种标准报告和报表已经安装。可以通过从主服务器报告路径导入，或者直接从浏览工具上传更多报告。可通过报告浏览工具浏览或者定制修改标准报告。报表可能只可以通过报告生成工具编辑。报告浏览工具手册包括了导出或者浏览用报告生成工具产生的报告的过程。

注意： 使用报表生成工具前，要求详细了解数据库和相关的字段！！否则要求会导致错误或者无效的报告或者报表。

### 报告和报表之间有什么不同？

在报告和报表间有几种不同，总结如下：

Reports 报告 | Forms 报表
要求严格的格式 以表的格式列出数据 允许容易得以csv格式的数据导出 报告可以被定制而不需要数据库知识 | 可以把字段放到整个页面 包含静态和动态数据 可以包含图片和图样 分组到 “表组”， 允许同样的数据不同的呈现 可以通过其他脚本传递的参数直接浏览

## 什么是报告生成工具--报告

## 报告生成工具是个基于网络的工具，它可以收集需要的webERP数据库的信息以产生公司的报告。我们输入例如页面设置，搜索字段，过滤条件等属性，为系统提供需要的特别信息。虽然报告的输出是标准的，但是仍然有可设置的栏和选项而允许适当的灵活性。每个用此工具产生的报告都可以被用户定制及自己设置格式。所有报告都包括下列部分通用格式：

表头： 包括4行和表头。首三行是公司名称，名称1和名称2.公司名称不能改变，但是他的属性例如：字体，颜色，是否出现，可以修改。名称1和名称2在每张报告中指定，并且默认设置为相应的%报告名称%和报告产生%日期%。他们的属性也可以变更。第四行显示每个报告指定的选择参数。这行会在所有的报告都显示。最后，所选的字段作为表头，且在他们所显示的列中依次排序。表头的描述包含在每页的表头上，因此每页都会列出数据字段的表头和他们在每个列中的相关位置。

表主体：列出为报告返回的数据元素。它们显示在根据设置条件指定的列中。每列可能包含一个或者多个查询的结果。最大列数是8。有一个截取标志可以设定限制仅显示一行数据，对于不需要的数据则截去。

页脚： 显示页码（是总页数的第多少页）。这个字段会总是显示，并且没有用户设置属性。

## 什么是报告生成工具－－报表

报告生成工具可以产生报表模板，它被使用在报告不允许的场景例如需要灵活地为结果设定格式。发票，采购订单，支票和催款信等都是报表的好样本。相比报告而言， 产生报表比较复杂，但是允许用户增加位置，字体属性，图象和增强的数据内容。有时为了使报表正确显示，会有些附加要求。这些会在生成报表部分讨论。

本手册，我们会使用一张发票报表作为讲解的例子。这张发票报表包含一些数据库信息，静态和动态数据，图表，图像和页码。所有这些都在样本中显示。

同报告相似，报表的结构由三部分组成：表头，表体，和页脚

表头： 在报表里，表头比较复杂，大多的信息都作为表头处理。公司名称，静态文字，图表和图像都在表头处理。这是因为他们在每张报表中都是静态的。然而，他们可以位于页面的任何地方。

表体：这部分典型情况会包含一张动态信息报表。在我们发票的例子中，物品描述，数量，和价格会组成表体数据。报表位置，尺寸和报表属性是灵活的。需要时，表体的信息可以在下一页继续。

页脚： 页脚通常会处理数据的加总。 在我们的发票例子中，我们会加总订购的所有物品，加上运输，列出发票的总和。这个只有在所有数据都处理后（可能要占满几页）才有可能完成。因此，所有的属于“总和数据”字段都显示为“接下页”，直到最后一页，才在相关位置插入加总数据。

## 管理员页面

管理员页是所有报告和报表的操作的起始点。在进入页，显示目前上传到数据库的标准报告和webERP用户产生的定制报告。报表根据他们属于的报表组列出，有几个选项来操作报告/报表。他们会在后续的部分讲述。

## 导入和导出

这个报告生成工具的重要特性是它导入导出报告和报表参数的能力。这个功能允许用户在他们的webERP系统中创建 一个报告并且把它导出到他们本地的文件系统中，他们可以在那里用电子邮件发出，传递或者导入到另一个webERP系统。还有一个功能是在报告内改变名称， 允许字段描述的语言翻译。

支持两种导入类型。第一中： webERP自带的打包标准报告，储存在路径/languages/en_US/directory(或者在对应的翻译中指定的语言路径），可以选取并且导入。输入报告的名称并且选择导入会将此报告导入定义的组中，并使用指定的报告名。 如果报告的文件名留为空白，会使用默认的导入文件名。第二，报告文件可以通过浏览工具上传并且导入到报告文件指定的群组。如果指定了报告名称，报告会以指定的名称保存，如果留为空白，会使用上传文件中的默认报告名。

备注： 标准报告会被导入到标准报告列表中，定制报告会导入到定制报告列表中。报告的类型在上传的报告中指定。

导出就是下载报告文件到用户浏览工具，它可以被浏览或保存。文件格式是 'text', 并且必须保存为文本文件。报告生成工具使用扩展名 .rpt.txt ，它们包含在发行的文件包中。

### 编辑一个导出的报告

报告和报表文件可以被编辑以支持多语言用户。文本文件可以使用任何文本编辑工具编辑。只要改变单引号之间的描述，余下部分保留不动。翻译部分的例子如下：

/* Language Fields. *//*语言栏目 */
/* Only modify the language portion between the single quotes after the colon. *//* 仅仅修改冒号后面单引号里面的语言部分. */
/* Report Name and Title Information: */
/*报告名称和标题信息: */
ReportName:'Invoice' 报告名称： ‘发票‘
Title1Desc:'%reportname%' 标题描述1： ’％报告名称%'
Title2Desc:'report generated %date%'标题描述2： ‘报告生成 ％日期％’
/* Report Field Description Information: */ /＊报告字段描述信息：＊/
FieldDesc0:'Branch ID' 字段描述0：‘分支机构 ID'
FieldDesc1:'Order Number' 字段描述1: '订单编码‘
FieldDesc2:'Quotation' 字段描述2：‘报价’

FieldDesc4:'Order Number' 字段描述4：‘订单编码’
FieldDesc5:'Order Date' 字段描述5：‘订单日期’
FieldDesc6:'Branch ID' 字段描述6： ‘分支机构ID’
FieldDesc7:'Customer Reference' 字段描述7：‘顾客参考号’
FieldDesc8:'Deliver To Name' 字段描述8：‘发往名词’
FieldDesc9:'Quantity'字段描述9：‘数量’
FieldDesc10:'Part Number' 字段描述10：‘部品编号’
FieldDesc11:'Unit Price' 字段描述11：‘单价’
FieldDesc12:'Customer Name' 字段描述12：‘顾客名称’
FieldDesc13:'Address 1' 字段描述13：‘地址1’
FieldDesc14:'Address 2' 字段描述14： ‘地址2’
FieldDesc15:'City' 字段描述15： ‘城市’
FieldDesc16:'State' 字段描述16 ：‘省’
FieldDesc17:'Postal Code' 字段描述17： ‘邮政编码’
FieldDesc18:'Country' 字段描述18：‘国家’
FieldDesc19:'Delivery Date 字段描述19：‘发货日期’
' FieldDesc20:'Customer Branch ID' 字段描述20：‘顾客分支机构ID’
FieldDesc21:'Order Date' 字段描述21： ‘订单日期’
FieldDesc22:'Order Number'字段描述22：‘订单编号’
FieldDesc23:'Customer Name'字段描述23：‘顾客名称'
FieldDesc24:'Order Number'字段描述24: '订单编码‘

'/* End of language fields. *//＊语言字段终止.*/

在这个例子中，报告名称是invoice发票。把报告名称改为Invoice Register 发票登记，只要更改文字invoice为invoice Register. 这里也可进行语言的修改，进行翻译。报告保存在使用这个语言的语言目录。

## 编辑，复制，重命名和删除报告/报表

### 编辑报告

标准和定制的报告可以被编辑，只要选定要编辑的报告，按编辑按钮就可以。其他的菜单和定义在创建新报告一样。报告生成工具是唯一可以更改标准报告的地方。在报告浏览工具中，用户只可以选择条件，不可以进行页面设置或者字段属性更改。在报告生成工具中，定制报告的修改比较灵活，用户可以调整页面属性，字段属性，和选择条件。报告浏览工具不允许用户增加，变更或者删除字段或者选择条件，仅仅可以变更他们的属性。

### 复制报告

报告可以通过选择报告，然后按复制按钮复制。输入新报告的名称和他要显示的组别。所有的复制的报告，不论是标准或者定制的，都被储存为原始报告同样类型。

### 重命名报告

重命名一份报告与复制一份报告相似，除了原报告被改为新的名称，报告的组别不能更改。如果你需要把报告移到其他的组别，把报告复制到目的组别，删除原始的报告。

### 删除报告

要删除一份报告，选择报告并且按删除。在报告被移除前，会弹出一个确认窗口来确认要删除。如果报告被误删除，有机会重新导入，如果它是来自发行版的报告，或者导出的报告或者是一份备份的报告。

## 我如何创建一份报告？

有五个步骤建立一份报告。他们是：

1. 输入报告的名称和种类

2. 设置页面的布局

3. 指定数据库表和链接方程式。

4. 输入和安排要显示的可能字段。

5. 输入和安排日期，分组，排序以及筛选准则。

演示如何建立一份报告的最好的方法是举例说明。我们会创建一个称为：发票报告Invoice Report。首先，我们需要打开报告生成工具。在设置菜单的基础设置部分，有标明为报告生成工具工具。打开后，按新增按钮。

### 第一步：报告名称和组别目录

对我们的报告，在输入报告名称的文字框输入 ‘发票报告’。 并且，我们需要用单选按钮选择报告,来指定这是一份报告。现在，我们把这份报告放到适当的目录中，从下拉式菜单中选择应收账款，以此指定报告属于的组别。

当输入所有的信息后，按继续。

注意： 此时，报告表中会增加一个记录，它会显示在可用的报告的列表。用户可以选择此报告并生成想要的报告，但结果会是一个警告：此报告没有数据。如果建立报告的过程没有完成，这个报告应被删除。

### 第二步： 设置页面布局

下个屏幕允许我们修改报告默认布局的一些设定。大多的字段是不言自明的，但是需要记住以下几点.

页面布局： 你应该将默认的纸张尺寸设置为你真正需要的尺寸。当浏览标准报告时，不能变更。在完成创建报告并且测试了输出后，你可以再回到此地，通过编辑对这份报告进一步修改。

列宽： 如果您有好的想法，即您的报告需要多少列，每列的宽度，你可以在此地输入。如果你在此保留默认值，并完成报告。你可以在后续测试完你的报告后在返回此处修改。

Titles: Data will appear as it is typed but there are system generated tags to automate the report. This list is current as of this writing but may change as more tags are added.

标题： 数据可以其输入的样子显示，但是有系统产生的标签来自动完成报告。下面的列表是目前使用的，但是可能随更多标签加入而变更。

Tag 标签 | Description描述
%date% | 将目前的日期插入此处的标题，位置即是标签出现的标题串内的位置
%reportname% | 插入储存在数据库中的报告的名称

注意： 边和列宽使用mm,字体的大小用点数计。

当所有的信息被输入后，按继续输入数据库信息。

### 第三步。指定数据库表和连接等式

这个表允许我们指定要建立查询所需要的表和并连接这些表。这些字段产生查询第二部分。 例如 FROM table1 INNER JOIN table2 ON table2linkequation INNER JOIN table3 ON 等等。

注意： 重要： 数据库表的知识和结构是必须的。

输入如同下表中显示的数据。可能每次仅能依次输入一行的数据。当每张表/连接等式行输入后，按更新按钮,使表生效，并上传连接等式。报表会重新载人刚输入的数据并且允许下一个表/连接等式输入。这些字段区分大小写。

Text Box Name | Data to Enter
Table Name - Primary | salesorders
Table Name - Second | salesorderdetails
Link Equation - Second | salesorders.orderno = salesorderdetails.orderno
Table Name - Third | debtorsmaster
Link Equation - Third | salesorders.debtorno = debtorsmaster.debtorno
Table Name - Fourth | custbranch
Link Equation - Fourth | salesorders.branchcode = custbranch.branchcode

注意： 当数据输入后，工具会通过查询返回单个行来使检验数据。如果不能从数据库取得单行数据，就不能继续进行。

注意： 如果你在此地被卡住，记住此报告已经存在于标准报告的列表中，需要删除它以禁止用户运行这份报告。

当所有的信息被输入后，按继续按钮输入用来查询的字段。

### 第四步 。指定可能查询的字段

这个报表会增加允许的字段到一个查询创建列表。这些产生的字段会成为查询的第一部分， “ SELECT field list here”(查询语句SELECT 后面的字段列在这里）。要产生一个有效的报告，至少需要输入一个字段。允许在第三步提供的连接数据库的字段的总数。而实践中，短的清单通常最适用。每个字段 都有它自己的属性。他们可以重新排序，强制列中断，设置为显示并标记为追溯累加总计。只有这里添加的字段会出现在报告浏览工具列表中，以供选择。

实用的备注：事先将字段以逻辑顺序事先排序，以你需要的数据显示的方式来显示，是个好的主意。同样，选择要显示的字段以及列中断，会产生一个8列或者小于8列的默认的报告；他们可以直接从标准报告显示而不需要修改。

序列号： 序列号决定字段列表产生的顺序。如果被输入序列号码已经存在，它会被插入列表，根据指定的序列号，余下的字段会后退一位。如果序列号没有指定，会将新的字段加入到列表尾部。序列号从1开始。

字段名称： 这个文本字段需要与数据库中的精确的字段名称和表相符。字段名称被输入表fieldname（table.fieldname)以提供一个要查询字段的完全标识。系统会从数据库中检索此字段名的一行和并显示描述，来验证输入的有效性。如果字段名称不正确或者显示的描述为空白，会导致错误。

显示名称： 这个描述可以任意的英文（或者其他语言）描述。这是分配给字段名称fieldname的ID。它会显示在报告表头并且直接连接到table.fieldname的输入。可以使用特殊字符，但是不建议这样做。

间隔： 这个字段指定这个输入被显示后，是否有一个字段间隔。这个字段只能针对定制报告在报告浏览工具中更改，所以最好在标准报告中设置正确以得到期望的输出。把几个字段组合到同一列也是一个不错的主意。例如： 地址如果出现在一个区域中会比分散在几个列中容易读。同样，报告限制为只显示8列。大多标准报告会列出多过8个字段，使用列间隔会帮助组织输出。

显 示： 识别要显示的字段。只有标识为显示的字段会在报告中显示。在标准报告中显示你需要的字段是一个好的做法，但是不是所有的字段都是必须的。用户可以决定他们需要什么数据，并且只在定制报告中更改。如果没有标识要显示的字段，报告浏览工具会产生警告信息：没有数据可显示。

总计： 指定是否需要保留累加总计。可以为任何的数字字段指定。如果设置了组别，报告浏览工具会追溯选择的组别小计，同时追溯报告中查询的字段的总计。

让我们给我们的报告增加一些字段。我们将使用一个缩写表显示这个基本概念。如果需要更多的字段或者需要编辑，报告可以被编辑，增加或者删除字段。输入下列表格中显示的字段。

  Sequence顺序 |  | Fieldname字段名称 | Name to Display 显示名称 | Break 间隔 | Show显示 | Total总计
  1 |  | salesorders.orderno | Order Number | No | Yes | No
  2 |  | salesorders.orddate | Order Date | No | Yes | No
  3 |  | salesorders.branchcode | Branch ID | Yes | Yes | No
  5 |  | salesorders.deliverto | Deliver To Name | Yes | Yes | No
  6 |  | salesorderdetails.quantity | Quantity | No | Yes | Yes
  7 |  | salesorderdetails.stkcode | Part Number | No | Yes | No
  8 |  | salesorderdetails.unitprice | Unit Price | Yes | Yes | Yes
  9 |  | debtorsmaster.name | Customer Name | No | Yes | No
  10 |  | debtorsmaster.address1 | Customer Address 1 | No | No | No
  11 |  | debtorsmaster.address2 | Customer Address 2 | Yes | No | No
  12 |  | debtorsmaster.address3 | City | No | No | No
  13 |  | debtorsmaster.address4 | State | No | No | No
  14 |  | debtorsmaster.address5 | Postal Code | No | No | No
  15 |  | debtorsmaster.address6 | Country | Yes | No | No
  16 |  | custbranch.deliverydate | Delivery Date | No | Yes | No
  17 |  | custbranch.custbranchcode | Branch ID | No | No | No

如果发生了错误，每行右侧的按钮都允许你编辑，重新排序，或者删除一行。你的报表会显示如下：

当所有的信息被输入后，按继续输入筛选条件。

### 第五步。输入及安排筛选条件

这一报表为标准报告建立了选项用于：日期选择，分组，排序，筛选。这些字段产生了where语句查询的结果。 WHERE criteria 1 AND criteria 2 AND etc ORDERED BY grouping, sorting.下面介绍每个字段是如何工作的：

日期： 如果你的报告中要显示一个日期字段，这是你要指定数据类型选项的地方。大多是快速选择标准的期间。有两个最通用的，（ALL）全部和（RANGE)期间允许用户快速浏览数据库的每个输入或者指定你感兴趣的特殊日期范围。对于所有的日期选项（除了ALL),表名称和字段名称table.fieldname必须输入到日期 字段名称（DateFieldname）的文字框，否则的话会导致一个sql 错误。字段名称会用选择的表进行测试以验证输入的正确性。这里也可以选择一个默认的日期。例如，如果正在创建一个名为（Today's Sales）今日销售的报告，你可能还要允许用户选择日期范围，但是你要求最先出现的日期是（Today）今天作为默认值。在这个例子中，你可以选择你希望的任何数量的日期的选项，但是一旦你进入这个报告，（Today）今天将是默认值。

注意： 如果你的报告没有任何日期字段，或者不需要日期信息，或者在日期选项不会显示在报告浏览工具时，您可以选择去除所有选项框的选择，或者只是选择ALL选项框，以显示日期选项只有一个可选项。

截除长描述项： 这对总结报告，或者当字段很长并且你想避免列绕住文字而言，是一个方便的功能。选取这个框，会截取任何超过列宽的文字，使其保持在一行内。这个功能也截取列标题文字。

字段分组：
字段排序：字段分组和字段排序相似。主要的不同在于分组是在较前的sql字符串中ORDER BY部分指定，小计被计算并且显示在报告中。如果没有指定分组，这个选项不会显示在报告浏览工具的条件选择表中。

默认值： 选择默认框会预先选择一个特殊的组和/或者排序字段。这些选项可以在标准报告和定制报告中更改，但是如果你的目标报告被设计为指定的分组或排序，会节约时间。

筛选条件：筛选条件允许用户进一步精炼他们的查询。选项的数量没有限制，但通常3－4个最适宜。条件类型相对于字段而言必须合理。如果字段是个文字字段， all:range条件最合适。对于yes/no字段，all:yes:no, printed:unprinted,等最合适。

注意： 要使分组小计能够正常运行，分组显示的字段名称必须和字段表中的一致。报告的字段还可以正常分组，但是小计和组间隔就不会显示。

让我们用以下的数据来完成报告

1。选择所有的日期框，除了To-date框。这将给用户超过需要的选择。
2。在Date Fieldname文字框中输入salesorders.orddate
3. 在截取长描述中选择‘否’。需要时我们可以在以后更改。
4. 输入分组如下：

  Sequence顺序 | Fieldname字段名称 | Display Description显示描述 | Default默认
  1 | salesorders.orddate | Order Date | No
  2 | salesorders.orderno | Order Number | No

5. 输入排序如下：

  Sequence顺序 | Fieldname字段名称 | Display Description显示描述 | Default默认
  1 | debtorsmaster.name | Customer Name | Yes
  2 | salesorders.orderno | Order Number | No

6. 输入字段的条件如下：

  Sequence顺序 | Fieldname字段名称 | Display Description显示描述 | Type of Criteria条件类型
  1 | salesorders.branchcode | Branch ID | All:Range
  2 | salesorders.orderno | Order Number | All:Range
  3 | salesorders.quotation | Quotation | All:Yes:No

注意： 注意我们允许用户根据salesorder.quotation筛选，尽管这个字段没有列在字段表里。报告浏览工具将用这个字段去筛选数据，尽管你可能不要 这个字段显示。这通常在实践中是不好的做法。输出的报告表头会显示筛选条件包括报价。如果Quotation：Yes 或者Quotation： No被选择来显示，那么报告仅仅包含筛选数据。

报表应该像如下所示：

就是它了，点击完成按钮退出报告生成工具，我们现在可以看到我们的结果了。

## 我如何创建一个新的报表

有五个步骤创建一个报表。他们是：

1. 输入报表名称和类别。

2. 设置报表页面布局。

3. 指定数据库的表和连接等式。

4. 输入和安排可能的字段列来显示和设定他们的属性。

5. 输入和安排日期，报表间隔以及筛选标准。

### 来演示如何建立一个报告最好的方式就是举例说明。我们将建立一个报告叫做：Invoice Form.首先我们将打开报告生成工具。可以在设置Setup菜单，General基础设置下找到报告生成工具Report Builder Tool。在那里按新增Add New按钮。

### 第一步： 报表名称和组别

对于我们的报表，输入Invoice Form（发票报表）。我们需要从单选框中指定这是一张报表。接下来我们将这报表放到合适的目录中，我们选择从下拉菜单中选择Invoices/Packing Slips，它将是这个组别的一分子。

当所有信息都输入后，按继续按钮。

重要事项： 此时一条记录会被加入到form表中，并且会显示在可用的表的列表中。用户可以选择这张表来产生报表，但是结果会是“这个报表没有数据”的警告。如果此报表的报告生成工具的程序没有完成，这个报表应该被删除。

### 第二步。 设置页面布局

下一个屏幕允许我们更改页面布局的默认设定。很多字段都是自明的，但是有些注意事项需要记住。

页面布局： 设置期望的页面布局。在设置字段表，页面的每个显示的输入被分别处理。当你完成了建立报表测试输出时，可以回到这里通过编辑这个报表作进一步修改。

当所有的信息被输入后，按继续按钮输入数据库的信息。

### 步骤三。指定数据库表和链接等式

这张报表允许我们指定用来建立查询的表和连接的表。这些字段构成了查询第二部分。"FROM table1 INNER JOIN table2 ON table2linkequation INNER JOIN table3 ON etc".

注意： 重要： 需要数据库表和结构的知识。

在如下表显示的框中输入数据。可能每次仅能依次输入一行的数据。当每张表/连接等式行输入后，按更新（Update）按钮,使表生效，上传连接等式。报表会重新载人刚输入的数据并且允许下一个表/连接等式输入。这些字段区分大小写。

Text Box Name 文字框名称 | Data to Enter 要输入的数据
Table Name - Primary | salesorders
Table Name - Second | salesorderdetails
Link Equation - Second | salesorders.orderno = salesorderdetails.orderno
Table Name - Third | debtorsmaster
Link Equation - Third | salesorders.debtorno = debtorsmaster.debtorno
Table Name - Fourth | custbranch
Link Equation - Fourth | salesorders.branchcode = custbranch.branchcode

注意： 当数据输入后，工具会通过查询单个行来验证数据。如果不能从数据库取得单行数据，就不能通过这点继续进行。

注意： 如果你在此地被卡住，记住此报告已经存在标准报告的列表中，需要删除它，以阻止其他用户使用这份报表。

当所有的信息被输入后，按继续按钮输入要显示的字段。

### 第四步。指定可能显示的字段

报表会加入允许的字段用来生成报表的输出。这个字段可能是图表，图像，数据或者静态文字。为了生成一个有效的报表，至少需要输入一个字段。允许在第三步提供的连接数据库的字段的总数。而实践中，短的清单通常最适用。每个字段都有它自己的属性。包括位置，字体，大小，颜色，对齐和其他的依据于选择的字段的属性。后续有更多的字段种类。

实用备注：以你需要的数据显示的方式来显示，事先将字段以逻辑顺序事先排序是个好的主意。

序列号： 序列号决定字段列表产生的顺序。如果被输入序列号码已经存在，它会被插入列表，根据指定的序列号，余下的字段会后退一位。如果序列号没有指定，会将新的字段加入到列表尾部。序列号从1开始。

注意：在报表里，序列号并非极其重要，由于每个字段包含它自己的位置信息

显示名称： 这个描述可以任意的英文（或者其他语言）描述。这是分配给字段名称fieldname的ID。它会显示在报告表头并且直接关联到table.fieldname输入。可以用特殊字符，但是不建议使用。

显 示： 识别要显示的字段。只有标识为显示的字段会在报告中显示。在标准报告中显示你需要的字段是一个好的做法，但是不是所有的字段都是必须的。用户可以决定他们需要什么数据，并且只在定制报告中更改。如果没有标识要显示的字段，报告浏览工具会产生警告信息：没有数据显示。

类型：指定每个字段的类型。我们会在后续仔细介绍：

### 数据行

数据行包含来自数据库查询的单一信息。可用字段有一个下拉式列表与将要显示的文字属性一起出现。

### 数据块

数据块是数据行的特殊例子，他将数据库的几个字段用分割值连接起来。数据块是个理想的显示地址的工具，由于地址字段需要彼此靠近，但是长度不同，并且彼此分开。下面的例子是一个美式英语表达的地址。这里地址３－５分别是城市，州，和邮政编码，地址６是国家。输出会显示如下：

Widgets International (name)
1234 Main Street (address1)
Suite #3 (address2)
Anytown, CA 90019(address3), (address4) (address5)
US (address6)

### 数据表

数据表是报表的主要部分，这里数据列表显示所在。这个表有一个开始的位置，并且有宽和高的信息。边线（如果指定）会画在报表的周围和每列数据的周围。填充信息会将每行信息分开，在每条线之间（与报告中的线分割相似）使用交错的白色填充高亮显示。如果没有指定填充色，报表的背景会是白色的。表中的每个数据行会组成一个列。多种数据行不能显示在同一列中（不同报告，允许列间隔）。每个数据项可以有他们自己的字体属性，可以通过一个字处理选项来处理。显示数据的总列宽（显示Show被选择时）应该和要显示的输出的表的宽度相等。显示名称的信息会组成每个表列的标题并且会作为表头显示在每页中。

### 数据总计

数据总计取得了所有的输入字段（本例中为３）并且对一个指定的报表从数据库里取出总数。如果报表是多页的，字符“继续”会显示在每页上，除了最后一页，会记下分组小计数。如果字符“继续”出现，用户知道报表是多张的。在报表被产生时，页面号码追溯和显示目前的页码。

### 固定的文字字段

固定的文字字段显示一个单行文字。它应该用于静态报表信息，例如标签和信息，不是从数据库查询产生。

### 图像－JPG 或者PNG

jpg,jpeg和 png图像都可以接受。图片可以从目前可得到的列表选择或者从浏览器上传。必须指定纵横坐标。如果宽度和高度留为空白，图像会保持它原先的尺寸和外形比例。如果指定了宽度或者高度，而不是全部指定，图像会变化为符合指定的维度尺寸，另一维度会自动调整保持外形比例。如果宽和高都指定了，图像将会符合指定的宽度和高度。

### 长方形

长方形可以包含很多属性。没有边的长方形可以用作报表的阴影。有边框的长方形可以用来作信息块的边框。

### 线

可以画垂直线，水平线或者对角线。线的颜色和宽度也可以编辑。

### 公司数据行

公司数据行和数据行相似，只是字段列表取自公司数据库。

### 公司数据块

公司数据块与数据块相似，只是数据列表取自公司数据库。

### 页码

页码位只是以数字形式打印页码（不是page X of Y ).如果需要字符“页”，需要一个新的固定文字字段来产生页码的前缀。

注 意：在报告编辑工具和FPDF之间，就页码代号，存在一个局限。报告生成工具允许在单个查询中创建多张报表。由于多张报表是可能的，根据每张表页间隔而来的总页数无法被报告生成工具准确计算。FPDF有一个代码来追踪总页数，但是为整个PDF文件而言。例如，如果用户要求生成“今天”所有的发票，可能会多过一张。同时，一份或者多份可能是多页的。FPDF代码会提供整个表的页数（今天所有发票），而不是每张发票。报告生成工具只知道它正在处理哪页，而不知道每张发票有多少页。因此，只有报告生成工具目前页码，报表的总页码是无法知道的。“继续”功能对于总页数而言意味着是一张多页的表。

每个字段的细节太多而无法在此重现。浏览我们例子中的字段最好的方法，是导入这个报表并且审视有兴趣的字段。如果产生了错误，每行的右侧提供了按钮来编辑，重排序，或者删除。每个字段的属性也可以编辑。下面是一个缩略的字段清单：

当所有的信息都输入后，按继续键输入筛选条件。

### 步骤五，输入和安排条件

这个报表建立了选项用来作：日期选择，页间隔字段，以及报表筛选条件。以下是每个字段如何运用的：

日期： 如果你的报告中要显示一个日期字段，这是你要指定数据类型选项的地方。大多是快速选择标准的期间。有两个最通用的，（ALL）全部和（RANGE)期间允许用户快速浏览数据库的每个输入或者指定你感兴趣的特殊日期范围。对于所有的日期选项（除了ALL),表名称和字段名称table.fieldname必须输入到日期 字段名称（DateFieldname）的文字框，否则的话会导致一个sql 错误。字段名称会用选择的表进行测试以验证输入的正确性。这里也可以选择一个默认的日期。例如，如果正在创建一个名为（Today's Sales）今日销售的报告，你可能还要允许用户选择日期范围，但是你要求最先出现的日期是（Today）今天作为默认值。在这个例子中，你可以选择你希望的任何数量的日期的选项，但是一旦你进入这个报告，（Today）今天将是默认值。

注意： 如果你的报告没有任何日期字段，或者不需要日期信息，或者在日期选项不会显示在报告浏览工具时，您可以选择去除所有选项框的选择，或者只是选择ALL选项框，以显示日期选项只有一个可选项。

报表页间隔字段： 报表页间隔字段指定用来间隔报表的字段。对于我们的发票样本而言，发票号码是合乎逻辑的报表间隔。对符合选择条件和日期参数指定范围内的发票，它将强制为每个发票号分配一张新报表。

筛选条件：筛选条件提供选项以允许用户进一步精炼他们的查询。虽然选项的数量没有限制，但通常3－4个最适宜。条件类型对于字段而言必须合理。如果字段是个文字字段， all:range条件最合适。对于yes/no字段，all:yes:no, printed:unprinted,等最合适。

报表的样子类似如下：

## 完成了！点击完成，退出报告生成工具，我们现在可以看看我们的结果了。

## 浏览您的报告或者报表

报告通过报告浏览工具浏览。报告浏览工具是另一个手册的主题，但是我们快速看看我们的报告是如何产生的。从主菜单， 选择应收，然后在查询和报告菜单找发票报告. 系统此时会显示条件页，我们可以修改筛选条件。现在，按产生PDF并且浏览我们的报告。若需要变更列或者重新安排字段，回到报告生成工具Report Builder编辑必须的输入项。一旦报告完成，你满意输出的格式，最好导出报告（它的文字格式），把它保存在本地电脑或者服务器上的标准报告的路径，以防被误删。

## 将参数传递给报表

Forms may be called directly from scripts by passing an id and criteria parameters. the parameters are assigned the variables cr[x] where [x] is replaced by the parameter to be assigned. Parameter 0 (zero) is reserved for the date field. Parameters 1-9 correspond to the order in which the criteria are ordered in the form. An example href tag might look like:

报表可以通过传递id和条件参数从脚本直接调用。参数被分配变量cr[x],这里［x]被分配的参数代替。日期栏参数保留为0。参数1－9对应于条件在报表中对应的序号。例如href标签可能看似如下：

<a href="reportwriter/FormMaker.php?id=prch:po&cr0=a&cr1=Range:3:3">

变量 ‘id'：id定义为对应于$FormGroups变量的索引值,它来自文件 /reportwriter/admin/defaults.php,目前定义的代码是：

gl:chk = Bank Checks 银行支票
ar:col = Collection Letters 催款通知
ar:cust = Customer Statements 顾客结算表
gl:deps = Bank Deposit Slips 存款条
ar:inv = Invoices/Packing Slips 发票／包装单
ar:lblc = Customer Labels 顾客标签
prch:lblv = Vendor Labels 供应商标签
prch:po = Purchase Orders 采购订单
ord:quot = Customer Quotes 顾客报价
ar:rcpt = Sales Records 销售记录
ord:so = Sales Orders 销售订单
misc:misc = Miscellaneous杂项

变量 cr0: cr0的取值范围在a-k之间，并且定义如下（并且作为$DateChoices中的变量索引保存在文件/reportwriter/admin /defaults.php中)

a = All 所有
b = Range 范围
c => Today 今天
d => This Week 本周
e => This Week to Date 本周至日期
f => This Month 本月
g => This Month to Date 本月到日期
h => This Quarter 本季度
i => This Quarter to Date 本季度到日期
j => This Year 今年
k => This Year to Date 今年到日期

变量cr1到cr9: 变量cr1-cr9需要对应于指定于报表条件的顺序。传递的值有三部分。第一部分是文字标签，它必须和从条件下拉式清单中取得的对应的字段的标签一致。第二和第三是条件标签的起止数值，如果需要的话（例如标签范围及等于）。这三个值被分号分割。如果不需要第二和第三个值，可以留为空白（例如：Yes, No, Printed, Unprinted, 等）。

从我们上面的例子：

<a href="reportwriter/FormMaker.php?id=prch:po&cr0=a&cr1=Range:3:3">

采购订单的报表组会出现（列出PO报表的所有选项）如下：

用户必须选择他需要选项，他可以创建PDF报告，更改条件或者取消并回到index.php脚本。隐藏的参数cr0=a 会默认为All所有日期(不依赖日期），crl=Range:3:3将默认为条件列表的第一个字段，设置值To和From为3。如果第一条件字段是PO number (采购订单编号），报告生成工具将产单个ＰＯ报表，他的编号为３。如果用户希望通过按（Criteria Setup）条件设置按钮，默认参数会自动填写进去，但是用户可以根据需要修改。