现在的位置: 首页 > 综合 > 正文

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

2012年03月30日 ⁄ 综合 ⁄ 共 1620字 ⁄ 字号 评论关闭

 

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

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

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

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

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

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


具体的函数内容我就不做说明了,这里我用了两个函数来是实现此功能。
另一个函数是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,

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

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

 

抱歉!评论已关闭.