我有一个SSRS报告,其中包含有关我公司发布的发票的信息,例如金额,日期,付款金额等。我在SSRS 2008(不是R2)中使用Visual Studio 2008环境。我的问题与使用表达式编辑器格式化报告有关。目前,如果发票的金额到期(列)超过0.01(未清发票),则发票将被格式化为银质。我们还会发放贷项(负数),这些数额几乎总是以前发票的负数。SSRS表达式编辑器无法识别嵌入代码功能
因此,具有发放信用的发票仍然会显示为白银,因为它的金额应该> 0.01。但是,如果这张发票上有信用卡,它实际上并不出众,应该是白色的。例如,如果发票是$ 100.00,并且($ 100.00)之后存在信用,则应将原始发票的背景颜色切换为白色。
下面是代码解释的地方。我认为这可以通过报表中的自定义VB代码实现,但似乎SSRS中的表达式编辑器无法识别我的函数,因为它显示“无法识别的标识符”。我搜索了一下,我遇到的大部分主题都表示它会显示,但实际上无论如何工作。嗯,我敢肯定,它不工作,因为我把这个作为我的表达,并得到全白细胞某列:
=IIF(Fields!Amount_Due.Value > 0.01, IIF(Code.HasCredit(Fields!Amount_Due.Value) = True, "Blue", "Silver"), "Red")
的HasCredit功能如下。
Function HasCredit(ByVal currentAmt as Double) As Boolean
Dim i as Integer
Dim amt as Double
Dim amts as System.Collections.ArrayList = New System.Collections.ArrayList()
Dim negativeAmt as Double
Dim retValue as Boolean = "False"
i = 0
For i = 1 to Report.Parameters!Test.Count()
amt = Report.Parameters!Test.Value(i)
amts.Add(amt)
Next
negativeAmt = currentAmt * -1
If amts.Contains(negativeAmt) Then
retValue = "True"
End If
Return retValue
End Function
当这两个部分运行时,我得到此列的所有单元格的白色背景。我在网上阅读了一些说只有共享函数可以工作的东西,但是我发现了多个其他示例,显示了没有共享的函数。当我将它分享时,由于Report.Parameters!Test.Count()行,它给了我:BC30369 Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
。我的想法是使用http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/a7d59224-0ee5-491e-883b-2e5fcb3edeab的Report.Parameters。
所以要重申,我基本上试图做的是获得此列中每个单元格的值到一个集合中,并且对于任何两个金额(其中一个金额具有负等值),请给它一个白色背景而不是银。
我有与SSRS 2012相同的问题,我也找不到修复程序。但是,正如保罗所说,即使自定义代码工作正常,它仍然在表达式编辑器中标记为红色。 – Alicia 2017-09-22 08:44:12