如何坚持打破页面的累加器

时间:2015-10-15 17:59:02

标签: vba reporting-services ssrs-2008

我在SSRS报告中有以下代码

Public  Dim GrupoActual as String = "" 
Public  Dim acumulado as Double
Public  Dim acumulado2 as Double

Public Function Acumulador(ByVal MiGrupo as String, ByVal value as Double, ByVal Campo as String) As Double

If (GrupoActual <> MiGrupo) Then
    If (Campo = "VolumenTotal")
    acumulado2=acumulado2 + value
    Return acumulado2
    End If

    If (Campo = "VolumenSeleccion")
    acumulado=acumulado + value
    Return acumulado
    End If  

    GrupoActual=MiGrupo
End If

End Function

问题是,每个累加器的值会在每个分页符上重置,解决此问题的一种方法是将整个报告放在一个页面中,这是不可能的。

我在另一个论坛中看到的另一件事是将变量声明为Public Shared

这个问题就是当我想导出到Excel时所有值都加倍时,即使它适用于分页符。

有没有办法在每次分页时绕过这个问题并保留值?

修改 我绕过这个问题的方法是将我的数据保存在哈希表中:

Public Shared Dim gruposVolTotal As New System.Collections.HashTable()
Public Shared Dim gruposSeleccion As New System.Collections.HashTable()
Public Shared Dim GrupoActual as String = "" 
Public Shared Dim acumuladoSeleccion as Double = 0
Public Shared Dim acumuladoVolTotal as Double = 0


Public Function Acumulador(ByVal MiGrupo as String, ByVal value as Double, ByVal Campo as String) As Double

If (GrupoActual <> MiGrupo) Then

    If (Campo = "VolumenTotal") then 
        If (not gruposVolTotal.Contains(MiGrupo)) then
            acumuladoVolTotal=acumuladoVolTotal + value
            gruposVolTotal.Add(MiGrupo,acumuladoVolTotal)
            Return acumuladoVolTotal
        Else
            Return gruposVolTotal(MiGrupo)
        End If 
    End If

    If (Campo = "VolumenSeleccion")  then 

        If(not gruposSeleccion.Contains(MiGrupo)) then
            acumuladoSeleccion=acumuladoSeleccion + value
            gruposSeleccion.Add(MiGrupo, acumuladoSeleccion)
            Return acumuladoSeleccion
        Else
            return gruposSeleccion(MiGrupo) 
        End If 

    End If  

    GrupoActual=MiGrupo

End If

End Function

所以每次我都会因为分页而改变页面,我的数据不会改变,因为现在它们的值已经存储在哈希表中,并带有正确的密钥。

1 个答案:

答案 0 :(得分:0)

我愿意猜测,因为你正在使用全局变量,它们被意外引用并因此在其他地方被改变,这就是全局变量的问题。您很可能需要通过代码step来确定变量何时发生变化以及更广泛的环境中可能导致此变化的情况。

在模块的开头使用Option Explicit也可能会有所帮助,这有助于您解决许多涉及变量标识符的常见错误。

通常,对全局变量的依赖是匆忙设计的症状。仔细考虑程序流程,看看是否有办法获得您想要的结果并消除那些全局变量,这样就可以防止整个系列问题成为可能。