报表脚本
编写脚本
使用变量
这里不需要指定变量类型,它们都是变体类型,但是为了保证报表的可读性,我们建议您将报表中用到的每一个变量都在数据字典中定义好,这样比较容易管理整个报表中的变量或常量。一般情况下可以使用拉丁字母,数据和下划线作为变量名。脚本中的变量可以在对象中使用,并且变量列表中的变量同样也能用于脚本。这是一个使用报表变量的例子: ? 首先定义变量
在数据字典中定义变量Prod和ProductStorage,同时初始化变量值,如下图所示:
? 用脚本代码给变量赋值 begin
Prod := [DataSet1.\ if IsFinal then
ProductStorage := Prod else
ProductStorage := 0; end
这一步中,首先设置变量Prod的值等于数据集DataSet1的字段DataField1的值;然后调用系统函数IsFinal,判断报表当前是否运行于两遍报表的第二遍,如果是就把变量Prod的值赋给变量ProductStorage,否则就设置变量ProductStorage的值为0。 ? 调用显示变量值
在需要显示变量的文本框的Memo属性中调用并显示变量值,写法如下:[ProductStorage],如图示
注意:
在脚本程序片断中调用在数据字典中定义的变量,系统变量和用户变量。自定义变量名不能像系统变量一样包含符号(例如Page# 系统变量),调用不带符号的变量的时候,可以直接引用,但是如果要调用带符号系统变量你必须使用方括号把变量扩起来: begin
a := [Page#]; end
使用数据集字段
在脚本程序中可以直接调用当前报表中包含的数据集的字段值。正确的语法:[DataSetName.”FieldName”],数据集字段可以直接参加运算。
例如,你有主项数据Band,设置其数据源为 数据集Customers,你可以在该Band上的指定文本框(如Memo1和Memo2)的OnbeforePrint属性中调用数据集Customers的字段,根据字段值设置Memo1的值,代码如下: begin
if [Customers.”CustomerType”]=0 then begin
Memo1.Memo:='VIP高级客户';
Memo2.Memo:=[Customers.”VIP_Remark”]; end else begin
Memo1.Memo:='一般客户'; Memo2.Memo:='没有特惠记录';
end end
使用数组
除了变量外,你也可以在你的脚本中创建数组。只能使用一维数据,但你可以使用它们来代替二维数组,下面是一个数组应用的例子: begin
MyArr[0] := 'a';
MyArr[1] := 'b'; MyArr[3] := 'd';
MyArr[2] := MyArr[0] + MyArr[1] + 'c' + MyArr[3]; end;
使用常量
在你的脚本中可以使用常量。一个简单的例子是使用数字,字符和逻辑常量: begin
a := 0;
b := 'abcd'; c := True;
d := 'That''s all!'; end;
需要注意的是在常量字符串内使用单引号-与Pascal一样,必须这样定义:d := 'That''s all!'。除了使用简单的常量外,你也可以使用像颜色名,字体名等等。下面是可用的常量列表:
? 颜色:clWhite,clBlack等等。-所有标准颜色和系统颜色; ? 对话框返回值常量:mrNone,mrOk,mrCancel; ? 系统常量:CRLF,Null;
? Band对齐:baNone, baLeft, baRight, baCenter, baWidth, baBottom。
另外还有对象附带的常量,例如,“CheckBoxObject”对象的csCheck。任何一个你在对象查看器的属性下拉列表中找到的, 你都可以在脚本中作为常量使用。
使用对象
你可以在脚本中使用报表对象的属性和方法。报表对象指可视对象,控件,Bands,报表页面和报表自己等几乎所有报表的组成元素。要使用一个对象必须使用点号。
? 简单属性的调用
简单属性可以直接用“对象名称.属性名称”来调用。例如: Memo1.Memo
使用内部属性和方法可以不需要指明“对象名称”,直接写“属性名称”就可以了。一般显示在对象观察器中的属性都是可以使用的。
? 复合属性的调用
一些象字体这样的复合属性必须连续使用点号才可以。如下例所示: begin
Memo1.Font.Name := 'Courier New'; Memo1.Font.Size := 10;
Memo1.Font.Color := clRed;
Memo1.Font.Style := fsBold + fsItalic end;
? 特别属性的用法
象Memo, Items等的某些属性可以通过它们的索引引用: if Memo1.Lines[1] = 'a' then Memo1.Lines[1] := 'b'
这样的属性也可以使用Add, Delete, Clear和Count等方法: if Memo1.Lines.Count > 10 then Memo1.Lines.Delete(10) else begin
Memo1.Lines.Clear; Memo1.Lines.Add('a'); end;
对象的属性和方法的完整列表可以从“对象属性和方法”一节中找到。注意,使用一个不存在的方法或属性将提示错误,写代码必须小心。
内置过程和函数
合计函数
合计函数一般用于报表的汇总类的计算,可以应用在报表的页注脚、主项注脚、细项注脚、子细项注脚和分组注脚、总结等注脚类Band区域中。
过程或函数名 Sum(
字符处理函数
过程或函数名 CNumber(
日期/时间格式符参照表: