我有一份 SSRS 报告,其中包含我的公司已开具的发票信息,包括金额、日期、付款、到期金额等。我在 Visual Studio 2008 环境中使用 SSRS 2008(不是 R2)。我的问题与使用表达式编辑器格式化报告有关。目前,如果发票的应付金额(列)超过 0.01(未结发票),发票将被格式化为白银。我们还开具信用(负金额),这些几乎总是以前发票的负金额。
因此,已发出信用的发票仍将显示为白银,因为其到期金额 > 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
当这两个部分运行时,我得到该列所有单元格的白色背景。我在网上读到一些东西说只有共享函数可以工作,但我发现了多个其他示例,这些示例显示了未共享的函数。当我分享它时,它给了我: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.
由于 Report.Parameters!Test.Count() 行。我从http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/a7d59224-0ee5-491e-883b-2e5fcb3edeab得到了使用 Report.Parameters 的想法。
因此,重申一下,我基本上想要做的是将此列中每个单元格的值放入一个集合中,并且对于其中一个数量具有负等值的任何两个数量,给它一个白色背景而不是银色。