《水晶报表进阶》PPT课件.ppt
水晶报表内部教育训练教材,水晶报表的基本语法水晶报表的分组和公式应用宋彩云系统工程课WEB组制作时间2007/01/12,一CryStal语法基础知识,1.CryStal语法不区分大小写但有一个例外是字符串如字符串”Hello”与”hello”是不相同的2.,3.字段在公式中的显示,示例,4.赋值(Crystal 语法),5.CryStal语法中的变量类型,5.1.基本类型NumberVar 数字型CurrencyVar 货币型StringVar 字符型BooleanVar 布尔型DateVar 日期型TimeVar 时间型DateTimeVar 日期时间型,5.2.范围数据类型,范围旨在处理一系列的值。除布尔值以外,所有简单类型都可以使用范围类型。即:数字范围、货币范围、字符串范围、日期范围、时间范围和日期时间范围。可以使用 To、_To、To_、_To_、UpTo、UpTo_、UpFrom 和 UpFrom_ 关键字生成范围。一般情况下,To 用于有两个终结点的范围,UpTo 和 UpFrom 用于半开半闭区间的范围(只有一个终结点)。下划线用于表示终结点是否在范围内。,“数字范围”值示例,在公式中使用范围(Crystal 语法),6.变量声明(Crystal 语法),在公式中使用变量前必须声明它。变量可以保持某个给定类型的值。允许的类型是七种简单类型(数字、货币、字符串、布尔值、日期、时间和日期时间),六种范围类型(数字范围、货币范围、字符串范围、日期范围、时间范围和日期时间范围)以及保持上述类型数组的变量。这为变量提供了总共 26 种不同的类型。声明变量时,还指定了它的名称。变量不能与任何对 Crystal 语法有效的函数、运算符或其它关键字同名。例如,变量不能被命名为 Sin、Mod 或 If,因为 Sin 是内置函数,Mod 是内置运算符,而 If 是内置关键字。当在公式工作室中键入公式时,内置函数、运算符或其它关键字的名称均以不同的颜色突出显示,因此很容易检查出变量名是否冲突。变量一经声明后,即可在公式中使用。例如,可能希望为其赋以一个初始值:Local NumberVar x;/将 x 声明为“数字”变量x:=10;/将 10 赋给 x,示例,7.变量作用域(Crystal 语法),变量作用域用于定义某个公式的变量可在多大程度上用于其它公式。在 Crystal Reports 中有三种级别的作用域:局部、全局和共享。每个变量都有一个作用域,该作用域在变量声明时指定。,7.1局部变量,7.2全局变量(Crystal 语法),7.3共享变量(Crystal 语法),共享变量使用相同的内存块,在整个主报表及其所有子报表中存储变量值。因而,共享变量甚至比全局变量更普遍。若要使用共享变量,请在主报表内的公式中声明它,如下所示:Shared NumberVar x:=1000;并在子报表内的公式中声明它,如下所示:Shared NumberVar x;为使用共享变量,在共享变量可以在主报表和子报表之间传递之前,必须先声明该变量并给其赋值。,8.数组变量(Crystal 语法),8.1使用数组变量(Crystal 语法),8.2在 For 循环中使用数组,二水晶报表公式应用,1.公式的典型用途,2.公式语法基本规则,将文本字符串括在引号内。将参数括在括号内(在合适的位置)。引用的公式使用前导 符号标识,3.公式的种类,在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。,3.1条件格式化公式,应用一更改条件字体,格式字段,格式字段,突出显示专家,格式化编辑器对话框,点这里进入公式工作室,应用二在第一页之后创建页脚,节专家Section expert,节专家对话框(section expert),公式按钮,使用“突出显示专家”来有条件地格式化字段,3.2创建条件运行总计是指编写公式只有符合公式中的条件的记录才进行运行总计,请将报表中所需字段从左到右置于“详细资料”节中在“报表”菜单上单击“记录排序专家”先定一个字段对记录进行排序。选择“运行总计字段”并单击“新建”。出现“创建运行总计字段”对话框。在“运行总计名称”框中输入名称。在“可用表和字段”框中突出显示要运算的字段并使用第一个箭头按钮将其移动到“要汇总的字段”框内从“汇总类型”列表中选择“求和”。在对话框的“求值”部分,单击“使用公式”,然后单击“公式”按钮。出现公式工作室,“运行总计条件公式”处于活动状态。在“公式”框中输入下列公式当公式具有正确的语法后,单击“保存并关闭”。返回“创建运行总计字段”对话框。在对话框的“重置”部分,单击“从不”。单击“确定”以保存运行总计字段。程序返回“字段资源管理器”对话框。将运行总计字段置于报表“详细资料”节内。,公式formula fields的使用,1.点击formula fields再点击新增图标输入公式名称,单击Use Editor进入到公式工作室,新增,修改,重命名,删除,2.工作工作室如下图,在写好公式后按save保存然后按左上角close关闭工作室,3.把formula fields下的公式拖到设计页面,选择专家select expert的使用,当我们要对抓出来的数据进行过滤时就要用到选择专家来设置条件1.单击选择专家跳出如下对话框,选择要设置条件的字段单击ok,选择专家,2.在下图的第一个下拉框里选择条件在第二个下拉框里选择值点show formula可以看到自动生成的代码然后点ok,点这里选择条件,点这里选择值,参数字段Parameter Field的使用,1.点击Parameter fields再点击新增图标输入参数名称,提示语言选择参数类型按ok,回到设计页面会发现参数字段下多了一个参数,2.单击选择专家在出现的图一对话框中单击new按钮会跳出图二对话框在这里选择字段,然后点ok到图三,图一,图二,3.在图三可以看到新增的字段,然后选择条件和值在这里我们选择的值就是刚才新增的参数,点击show formula可以看到自动生成的代码,然后按ok可以看到图四,图三,4.在图四中输入参数值按ok.在这个例子中可以输入具体的订单号码也可以输入订单中的字母带*,例如DH*(区分大小写)表示只要订单号码中有DH两个字母的订单都可以从库里抓出来,图四,5.如果要变更条件,可以随时按下工具列上的读取按钮出现如下对话框,如果选择输入新的参数值则会再次出现图四让你输入不同的参有选举数接着出现的报表内容就会随着新的参数值而不同,读取按钮,数据的分组和排序,示例:做一份PY3各栋计算机耗材采购和维修费用,要求如下,按栋别费用类别数据年月对数据进行过滤按栋别商品代号进行分组求出各个商品代号的数量和费用求出各栋商品总数量和总费用,制作过程如下:,1.确定要从以下table抓取资料a.TBL_APPLY_D(采购子档)b.VIEW_DEPT(单位数据视图)c.TBL_APPLY_M(采购主档)2.写出sql语句SELECT A.*,decode(A.APP_TYPE,A,申购费用,R,维修费用)ASAPP_DESC,B.*,C.VOU_DATEFROM TBL_APPLY_D A,VIEW_DEPT B,TBL_APPLY_M CWHERE A.APP_NO=C.APP_NOAND B.BRANCH_NO=C.FACT_NOAND B.ACCOUNT_NO=C.ACCOUNT_NOAND B.CONTRAST_NO=C.DEPT_NOORDER BY B.FACT_NO,B.BRANCH_NO,A.PROD_NO,3.新开一个空白的报表在数据库专家中连库后打开要取数据的数据库(G3WG),出现下图,4.双击图中的Add Command出现下图,在左边的空白区域输入要抓取数据的sql语句按”ok”按钮,5.这时在数据库专家的Select Tabels区域出现如下图所示内容按”确定”按钮,6.页面回到水晶报表的设计页面点开页面右边Field Expert下的DataBase Fields,会发现刚才的操作已生成了如图所示内容这就是刚才的sql语句在数据库中抓取的字段,7.选中Command下面的字段,把报表中所需要的字段拖到报表设计区的Detail节中,它会在Page Header区自动生成和字段名相同的表头字段,8.按预览快捷图标可以查看刚才生成的数据如下(部分),9.对数据进行分组,选择”insert”菜单下的”Group”按钮或快捷图标”insert group”,出现如下画面选择要分组的字段和排序方向按确定按钮,快捷图标”insert group”,也可以按Report菜单下的Grout Expert选项或按快捷图标Grout Expert,出现如下画面,双击要分组的字段这个字段会出现在右边的Group By区域按ok按钮,快捷图标Grout Expert,会发现在右边的Group Name Fieldsg下面会出现刚才设的分组字段同时在报表设计区会出现Group Header#1的节在它的内容区出现Group#1 Name,此时观察预览页面会发现在报表中的数据是按栋别排放的,10.按第9步的操作再设置一个分组字段prod_no,再去观察预览页面发现报表的内容是栋别和商品代号排放的,11.下面对数据进行筛选首先右击Parameter Fields,在快捷菜单中单击New(新建)出现如下画面在Name处输入要定义的参数名称”栋别”选好参数值的类型(Value type),按ok按钮,12.重复第11步的操作,再定义两个参数,”费用类别”与”数据年月”,12.在Parameter Fields下可以发现刚才新建的三个参数字段,我们要利用这些参数生成选择条件的公式来对数据进行过滤,13.打开选择专家,选择Command下的fact_no字段按ok按钮,14.选择下拉框中的比较条件”is like”,选择右边下拉框中的比较值可以看到这个下拉框中有我们刚才生成的三个参数字段选中?栋别点击Show Formula,可以看到刚才的操作生成的公式.,15在上一步的第二个图中选择new按钮或new标签进行第二个参数”费用类别”和第三个参数”数据年月”的设定画面变成如下点ok按钮,16.现在我们来进行预览这时页面提示要用户输入参数值,分别对三个参数进行设定,按ok按钮,这时可以看到抓取数据范围缩小了,17.如果想重新设定参数值,按Report菜单下的Refresh Report Data选项,出现如下画面选第二个选项按ok按钮出面第16步的画面,可对参数值重新设定,18.下面来对分组的数据进行数量求和在这里要设定两个公式,右击设计页面右边的Formula Field,在出现快捷菜单上选择New,出现如下画面输入公式名称ZQTY,按Use Editor,进入到公式工作室,19.在工作室的文本窗口输入公式或者在函数区找到要使用的函数,然后在报表字段找到相应的字段作为函数的参数按”X+2”按钮调试公式如果公式没有错误按”save and close”按钮关闭此窗口,函数区,运算符区,公式文本区,报表字段区,20.按同样的操作设计另一个求金额的公式ZMONEY(后面会用到)在Formula Field会发现刚才所设的两个公式把第二个公式拖到如图所示位置(Group Footer#2),进入预览页面发现对相同的商品代号已求出了它的总数量,21.使用运行总计求所有商品的总金额和相同商品的小计金额,在报表设计页面右边右击Running Total Fields,在出现的快捷菜单中选择New(新建)出现如下画面,在Running Total Name处给运行总计字段命名然后从左边的Available Tables and Fields选中ZMONEY公式,按ok按钮,22.再新建一个运行总计,取名为ProNoTotalMoney,其它作如下设置,按ok按钮,此时可以在Running Total Fields下看到刚才新增的运行总计字段把它们拖到设计页面如图所示位置,预览页面可以看到算出了每种商品所用的总金额,在报表的最后面能看到金额总计值,22.现在实现”创建条件运行总计”右击上一步创建的运行总计字段totalMoney在快捷菜单中选择edit在出现的对话框中把Evaluate下的选项改为”use a fomula”,23.单击X+2按钮进入到公式工作室输入如图所示公式确认公式没有语法错误后保存并关闭窗口,又回到22步的窗口按这个窗口的Ok按钮,24.把这个新的运行总计字段拖到如图所示位置,拖到这里,25.按file菜单下的export把制成的报表输出为pdf文件存盘后打开pdf文件可以看到报表只对公式中设定的栋别的商品进行了总金额的计算其它的没有计算,如下图,