以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  ★★★Excel报表的跨记录调用数值问题★★★  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=23669)

--  作者:zoomify
--  发布时间:2012/9/16 14:05:00
--  ★★★Excel报表的跨记录调用数值问题★★★
有一个表中有某列记录如下:
页数(页的数量)
2
3
3
4
输出成Excel报表的时候,希望变成页开始的位置(页次),如:
1(第一行是从页次1开始)
3(这个记录是从3开始:1+2)
6(这个记录是从6开始:1+2+3 或者是上一个记录的3+3)
10(这个记录是从10开始:1+2+3+4 或者是上一个记录的6+4)
设置Excel报表公式如下:

<iif(<index>=1,1,[页数-1]+[页数])> 

希望得到:当index是1的时候,页次一定等于1,否则等于上一个记录的值(页次)加上本记录的页数。
但这个公式是有问题的,请问专家正确的设置如何做呢?自己琢磨了很久,还是弄不出来。

[此贴子已经被作者于2012-9-16 16:33:30编辑过]

--  作者:pyh6918
--  发布时间:2012/9/16 14:36:00
--  
<iif(<index>=1,1,[@表名,页数,-1]+[@表名,页数])> 
 
这样你试一下!

--  作者:zoomify
--  发布时间:2012/9/16 16:31:00
--  

楼上说的办法用了还是不行,用代码绕了个弯才搞定,但这样代价很大,每个明细记录都会查询一次数据库。 有没有专家知道怎么做呢,其实就是想知道明细数据扩展的时候,上一条记录的值。

代码解决办法如下:(用范例的出库单报表测试,数量用来模拟需要转变的页次,程序打包到了附件)

 

Select Case e.Book.TempLate
    Case "出库单"
        e.Book.Marks("数量") =""
       
        If e.DataRow IsNot Nothing AndAlso e.Region = "出库明细" Then
            Dim Filter1 As String = "出库单编号 = \'" & e.DataRow("出库单编号") & "\' and _identify <" &  e.DataRow("_identify")
            Dim yeci As Integer
            yeci=DataTables("出库明细").Compute("Sum(数量)",Filter1)
            If yeci=0 Then
                e.Book.Marks("数量") =1
            Else
                e.Book.Marks("数量") = DataTables("出库明细").Compute("Sum(数量)",Filter1) +1
               
            End If
           
           
        End If
End Select

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.zip


--  作者:lin_hailun
--  发布时间:2012/9/17 0:46:00
--  
 excel模板的公式被清除,不过听说新版本会增加楼主需要的功能。

 代码的话,也可以精简下的。用到静态变量。

Static sum As Integer = 1

Select Case e.Book.TempLate
    Case "出库单"
        If e.DataRow IsNot Nothing AndAlso e.Region = "出库明细" Then
            e.Book.Marks("数量") = sum
            sum = sum + e.DataRow("数量")
        Else
            e.Book.Marks("数量") = ""
        End If
End Select

--  作者:lin_hailun
--  发布时间:2012/9/17 0:47:00
--  
不过静态变量是一直存储的,如果你生成报表多次的话,建议使用全局变量,在生成报表之后,把全局变量赋值为开始的值。
--  作者:pyh6918
--  发布时间:2012/9/17 7:29:00
--  
加一列,把上一行的页数取过来。