一,Basice 语法
1,公式的结果
--每个公式必须返回一个值
--Basice语法通过设置特殊变量“formula”的值来实现,不能返回数组或范围类型。
2,注释
-- REM, ' 注释
3,furmula变量在设置为一种数据类型,则后面不能在同一个公式中设置为另一种类型值。
例如:Global a AS string ,b AS Number,z AS DateTime
if{Orders.Order Amount} >= 1000 then
formula = "Insured shipping";
else
formula = "Regular shipping"
end if
4,字段
-- 许多字段可以在公式中引用。例如,数据库,参数,运行总计,SQL表达式,摘要,组名等。
也可以在公式中引用其他公式字段。
5,公式中表示字段
-- 参数字段:{?我的参数字段}
--公式字段: {@ another formula}
--运行总计字段:{# my running total}
--SQL表达式字段:{% my SQL expression}
--摘要和组名看起来像函数,实际上是报表字段的速记写法
-- 摘要: Sum({订单.订单金额},{订单.承运商})
-- 组名: GroupName({订单.承运商})
6,语句
-- 每个语句占一行(新行或冒号分开) y = “” : x = 30 :formula = true
-- 截断, x = 10 + _
10 + 10
-- 数字:不带任何逗号分隔符
-- 货币: CCur(10000)
-- 字符串: "hello” === hello
“ "" hello "" ” === "hello"
"hello"(2) === "e"
"hello"(-5) === "h"
"604-555-1234"(1 to 3) === "604"
"abcdef"(-3 to -1) === "def"
-- 日期,时间,日期时间
#8/6/1978 1:20 am#
CDateTime("8/6/1978 1:20 am")
CDateTime("1:20 am")
CTime(10,30,0) --- 分隔 hour,minute,second
CTime(#10:30 am#)
7,范围
-- 2 到 5 === 2 To 5 (包括2和5)
-- 2 到 5 === 2 _To 5 (不包括2,包括5)
-- 小于或等于 5 === Is <= 5
-- 日期范围
#8/6/1978 1:20 am# To #10/7/1978 1:20 am#
Is <= #8/6/1978 1:20 am#
8,数组
-- Array(10,5,20)
-- Array("aaa","bbb","ccc")
-- Array(#8/6/1978 # To #10/7/1978# , #8/6/1978 #)
-- Array(10,5,20)(2) === 5
9,变量
-- Dim a AS String
a = left({Customer.Fax}, 3)
a = {Customer.Fax}(1 to 3)
注释:全局变量只在1个报表中用,不包括子报表
子报表要使用 共享变量。
二,Crytal Report语法
1,公式的结果
-- 10 :公式返回值不需要任何变量代替,可以是7种数据类型之一(数字,货币,字符串,布尔,日期,时间,日期时间)
例如: if {Orders.Order Amount} >= 1000 then
"Insured shipping"
else
"Regular shipping"
2,注释
-- //注释
-- 赋值, X:=10
-- 变量,Local Number
Var X;
X:=10
三,利用公式执行报表计算
Crystal Reports 有几种不同的公式
1,报表公式
-- 是在报表中创建的单独公式。例如,计算订购日期与发货日期之间天数的公式。
2,条件格式化公式
-- 更改报表的布局和设计,以及文本,数据库字段,对象或真个报表节的外观(如:颜色,字体)
-- 通过“格式编辑器”来设置文本的格式。如果需要创建格式化公式,请从“格式化编辑器”访问“公式编辑器”
3,选定公式
-- 指定并限制在报表中出现的记录和组。(筛选)
-- 一般不需要直接输入这些公式,而是使用“选择专家”来指定选定公式。
Crystal Reports 便会生成记录选定公式和组选定公式。(只能使用Crystal语法)
四,自定义函数
--在Crytal Reports 中创建的用于对数据进行求值,计算或转换过程。
--当在公式中使用自定义函数时,函数定义中的所有操作都会被执行,而无需在公示自身中单独的指定。
-- 必须作为公式的一部分
使用自定义函数的优点:
-- 替换众多公式中公共的逻辑部分
--可以使用“公式中提取自定义函数对话框”将现有的公式转换为自定义函数
--自定义函数可以包含参数
--可以定义自定义函数的帮助文本和默认的参数值,方便用户
--自定义函数保存为报表文件(.rpt)的一部分。并且没有任何外部依赖
-- 自定义函数没有状态;相同的输入得到相同的结果
--自定义函数是独立于报表的
规则:
--不能在自定义函数中使用报表字段或数据库字段,包括汇总字段
--不能使用共享或全局变量,但是在公式内调用自定义函数时,你可以将全局或共享变量作为参数传入
--不能使用递归,不管是直接还是间接
--不能直接使用UFL(用户函数库)
--不能调用“求值时间”,“打印状态”或“文档属性”函数。(包括:Rnd,CurrentFieldValue,DefaultAttribute,GridRowColumnValue)
例如: Function myFunc(numInput as number)
myFunc = numInput + 5
End Function
转载于:https://www.cnblogs.com/ruijinzhao/archive/2009/08/12/1544600.html