使用水晶报表自定义函数进行代码重用

 

一般我们可以使用公式来实现一些特殊的功能,但是对于一些需要重复处理的情况
可以使用自定义函数来实现

进入公式编辑界面 ,可以看到在左上角有两个项目:

使用水晶报表自定义函数进行代码重用_第1张图片

报表自定义函数和储备库自定义函数

报表自定义函数只存在于单一报表模板内,不同模板间不可以共用。
储备库自定义函数对于单独的水晶报表和.Net自带的版本是不可用的,这是水晶报表服务器版本或BOE的一个功能
将函数转换为储备库自定义函数后,该函数将存储到系统数据库,从而不同报表可以进行函数共用。
不过对于单一函数功能来说并没有什么影响。

现在我结合一个实例,说一下自定义函数的使用。
有一个命题是这样的,将一个日期型的字段【2008-10-28】,显示为【二零零八年十月二十八日】
使用自定义日期格式是达不到这种效果的,虽然我们可以通过公式来实现,但是对于多个这种的字段,每次都写公式还是很麻烦的。
所以这里选择用自定义函数实现。

切换到公式编辑器界面,在【报表自定义函数】上点右键,新建一个函数,名称为mydate。
将语法切换为Basic(当然你也可以用Crystal语法),然后编写函数体

使用水晶报表自定义函数进行代码重用_第2张图片
具体的函数内容我就不做说明了,这里我用了两个函数来是实现此功能。
另一个函数是ChNumber,用来处理mydate中的复用。

函数体如下

 

' 进行日期转换
Function  myDate (date1  as   date )
    
Dim  sY  as   string
    
dim  sM  as   string
    
Dim  sD  as   string
' 分别取出年月日   
sY = totext( year (date1), 0 )
sM
= totext( month (date1), 0 )
sD
= totext( day (date1), 0 )
    myDate 
= chNumber(sY, " 0 " &   " "   &   chNumber(sM, " 1 " &   " "   &  chNumber(sD, " 1 " &   " "
End Function

 

' s待处理的参数,t参数类型。0为年份,逐个字符替换,1为月份和日期,10进位
Function  ChNumber ( s  as   string , t  as   string )
    
Dim  s0  as   string
    
' 先全部替换
    s0 = Replace (s, " , " , "" )
    s0
= Replace (s0, " 0 " , " " )
    s0
= Replace (s0, " 1 " , " " )
    s0
= Replace (s0, " 2 " , " " )
    s0
= Replace (s0, " 3 " , " " )
    s0
= Replace (s0, " 4 " , " " )
    s0
= Replace (s0, " 5 " , " " )
    s0
= Replace (s0, " 6 " , " " )
    s0
= Replace (s0, " 7 " , " " )
    s0
= Replace (s0, " 8 " , " " )
    s0
= Replace (s0, " 9 " , " " )
    
' 进行月日的十进位处理
     If  t = " 1 "   then
        
' 十进位处理,在两个数字中间加入一个“十”字
         If   Len (s0) = 2   Then
                s0
= left (s0, 1 &   " "   &   right (s0, 1 )
                
' 处理刚好为10、20、30的情况
                 if   left (s0, 1 ) = " "   then  s0 = replace (s0, " 一十 " , " " )
                
if   right (s0, 1 ) = " "   then  s0 = replace (s0, " " , "" )
        
end   if
    
end   if
    ChNumber 
= s0
End Function

 

然后我们来做个简单的测试:

新建立一个日期型的参数xx,

使用水晶报表自定义函数进行代码重用_第3张图片

然后做一个公式yy,公式内容为:mydate({?xx})

显示为:二零零八年十月二十八日

 

你可能感兴趣的:(CR报表设计)