以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教表的统计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=53236)

--  作者:hbhb
--  发布时间:2014/7/3 10:06:00
--  请教表的统计
请教大师:如下例
1、如何根据表a生成表b格式的统计表?
2、表a数据变化后,表b联动?


一边看球,一边思考如何搞?人家球进了5个,我还是零!只有
拜托!拜托!大师

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



--  作者:Bin
--  发布时间:2014/7/3 10:14:00
--  
直接用分组统计

Dim g As New GroupTableBuilder("统计表1", DataTables("表A"))
g.Groups.AddDef("区域")
g.Groups.AddDef("企业")
g.Totals.AddDef("销售金额")
g.SubTotal = True
g.Build()
MainTable = Tables("统计表1")

--  作者:有点甜
--  发布时间:2014/7/3 10:15:00
--  

 请不要这样做,这样做不规范,这样做累死自己。

 

 直接用分组统计,或者交叉统计去做就好。


--  作者:hbhb
--  发布时间:2014/7/3 10:26:00
--  
老板就喜欢这种样式的报表?没办法!通过代码如何能达到这种效果?
--  作者:Bin
--  发布时间:2014/7/3 10:28:00
--  
输出报表的时候,在专业报表处理吧. 狐表中就不要这么折腾了.
--  作者:hbhb
--  发布时间:2014/7/3 10:30:00
--  
如果狐表能与xbrl有效结合,那市场大的去了。销售至少100亿
--  作者:hbhb
--  发布时间:2014/7/3 10:50:00
--  
图片点击可在新窗口打开查看   帮忙呀兄弟!
--  作者:有点甜
--  发布时间:2014/7/3 11:03:00
--  

代码,每次重新生成

 

Dim cidx As Integer = 0
Dim ridx As Integer = 0
Dim dt As DataTable = DataTables("表B")
Dim t As Table = Tables("表B")
dt.DataRows.Clear
Dim fr As Row
Dim cname(1) As String
Dim dta As DataTable = DataTables("表A")
Dim sum1, sum2 As Integer
For Each qy As String In dta.GetValues("区域")
    Dim qys As List(Of String) = dta.GetValues("企业", "区域 = \'" & qy & "\'")
    If cidx = 0 Then
        cname(0) = "区域"
        cname(1) = "销售金额"
        fr = t.AddNew
        fr(cname(0)) = qy
        dt.AddNew(qys.Count+1)
        ridx = fr.index + qys.Count
    Else If cidx = 1 Then
        cname(0) = "区域1"
        cname(1) = "销售金额1"
        fr(cname(0)) = qy
        If fr.Index + qys.Count > ridx Then
            dt.AddNew(fr.Index + qys.Count - ridx)
            ridx = fr.Index + qys.Count
        End If
    End If
    For i As Integer = 0 To qys.Count - 1
        Dim r As Row = t.Rows(fr.Index+i+1)
        r(cname(0)) = qys(i)
        r(cname(1)) = dta.Compute("sum(销售金额)", "区域 = \'" & qy & "\' and 企业 = \'" & qys(i) & "\'")
    Next
    t.Rows(ridx+1)(cname(0)) = "小计"
    t.Rows(ridx+1)(cname(1)) = dta.Compute("sum(销售金额)", "区域 = \'" & qy & "\'")
    If cidx = 0 Then
        sum1 += val(t.Rows(ridx+1)(cname(1)))
        cidx = 1
    Else If cidx = 1 Then
        sum2 += val(t.Rows(ridx+1)(cname(1)))
        cidx = 0
    End If
Next
Dim zjr As Row = t.AddNew
zjr("区域") = "总计"
zjr("销售金额") = sum1
zjr("区域1") = "总计"
zjr("销售金额1") = sum2


--  作者:hbhb
--  发布时间:2014/7/3 11:33:00
--  
谢谢甜大师!有情后补!