以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]新人请教是否可以关于指定行的求和统计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99692)

--  作者:甜甜大香蕉
--  发布时间:2017/4/25 9:44:00
--  [求助]新人请教是否可以关于指定行的求和统计
各位老师:
      我在建立表时想实现下图的效果,但是查询了“合计模式”“交叉统计”等各种方式好像都不能实现,
不知有没有方式可以,谢谢老师们!
总收入:主营业收入+营业外收入,
总支出:营业费用+管理费用,
利润:总收入-总支出,
奖金后利润:利润-年终奖。

一级科目 二级科目 金额/元 业务一部 业务二部 业务三部 业务四部
主营业收入 税率17% 23000 5000 5500 6000 6500
税率6% 23000 5000 5500 6000 6500
营业外收入 土地变现 11000 2000 2500 3000 3500
债务重组 11000 2000 2500 3000 3500
营业费用 人工成本 4300 1000 1050 1100 1150
社会保险费 1500 300 350 400 450
职工福利 1100 200 250 300 350
管理费用 差旅费 1020 180 230 280 330
办公费 940 160 210 260 310
租赁费 860 140 190 240 290
总收入   68000 14000 16000 18000 20000
总支出   9720 1980 2280 2580 2880
利润   58280 12020 13720 15420 17120
年终奖   15000 3000 3500 4000 4500
奖金后利润   43280 9020 10220 11420 12620

--  作者:有点色
--  发布时间:2017/4/25 9:50:00
--  

 你这种,需要使用代码分别进行计算的,参考 http://www.foxtable.com/webhelp/scr/0681.htm

 

 不会做的话,上传具体实例。

 

 


--  作者:甜甜大香蕉
--  发布时间:2017/4/25 9:54:00
--  
好的,我先学习下,学不会再请教,谢谢帮助。
--  作者:甜甜大香蕉
--  发布时间:2017/4/25 10:41:00
--  

老师好:教程看的有点蒙,之好把表格上传了。

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


--  作者:有点色
--  发布时间:2017/4/25 11:04:00
--  

参考代码

 


Dim dt As DataTable = DataTables("年度预算制定")
Dim g As New GroupTableBuilder("统计表1", dt)
g.Groups.AddDef("一级科目")
g.Groups.AddDef("二级科目")
g.Totals.AddDef("金额")
g.Totals.AddDef("业务开发部", AggregateEnum.Count)
g.Totals.AddDef("运营管理部")
g.Build()
Dim t As Table = Tables("统计表1")
With t
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("一级科目")
    .MergeCols.Add("二级科目")
    .MergeSort = "一级科目,二级科目"
    .AllowMerge = True
End With
Dim nr1 As Row = t.AddNew
nr1("一级科目") = "总收入"
Dim nr2 As Row = t.AddNew
nr2("一级科目") = "总支出"
Dim nr3 As Row = t.AddNew
nr3("一级科目") = "利润"
Dim nr4 As Row = t.AddNew
nr4("一级科目") = "奖金后利润"
Dim cs() As String = {"金额", "业务开发部", "运营管理部"}
For Each c As String In cs
    nr1(c) = dt.Compute("sum(" & c & ")", "类别=\'收入\'")
    nr2(c) = dt.Compute("sum(" & c & ")", "类别=\'支出\'")
    nr3(c) = nr1(c) - nr2(c)
    nr4(c) = nr3(c) - dt.Compute("sum(" & c & ")", "二级科目=\'年终奖\'")
Next

MainTable = Tables("统计表1")


--  作者:甜甜大香蕉
--  发布时间:2017/4/25 11:38:00
--  
谢谢老师,代码已运行,但是这是添加了一个新表的方法,能否在原表的最下方实现呢?在原表的话就可以直接导出excel表格给各部门直接查看了。

--  作者:有点色
--  发布时间:2017/4/25 11:51:00
--  

参考代码

 

Dim dt As DataTable = DataTables("年度预算制定")

Dim t As Table = Tables("年度预算制定")
With t
    .MergeMode = MergeModeEnum.Standard
    .MergeCols.Clear()
    .MergeCols.Add("类别")
    .MergeCols.Add("一级科目")
    .MergeCols.Add("二级科目")
    .MergeSort = "一级科目,二级科目"
    .AllowMerge = True
End With
Dim filter As String = "一级科目 In (\'总收入\', \'总支出\', \'利润\', \'奖金后利润\')"
dt.DeleteFor(filter)
filter = "一级科目 not In (\'总收入\', \'总支出\', \'利润\', \'奖金后利润\')"
Dim nr1 As Row = t.AddNew
nr1("一级科目") = "总收入"
Dim nr2 As Row = t.AddNew
nr2("一级科目") = "总支出"
Dim nr3 As Row = t.AddNew
nr3("一级科目") = "利润"
Dim nr4 As Row = t.AddNew
nr4("一级科目") = "奖金后利润"
Dim cs() As String = {"业务开发部", "运营管理部"}
For Each c As String In cs
    nr1(c) = dt.Compute("sum(" & c & ")", "类别=\'收入\' and " & filter)
    nr2(c) = dt.Compute("sum(" & c & ")", "类别=\'支出\' and " & filter)
    nr3(c) = nr1(c) - nr2(c)
    nr4(c) = nr3(c) - dt.Compute("sum(" & c & ")", "二级科目=\'年终奖\' and " & filter)
Next


--  作者:甜甜大香蕉
--  发布时间:2017/4/25 13:59:00
--  
ok了,谢谢老师。
--  作者:甜甜大香蕉
--  发布时间:2017/4/25 14:35:00
--  
老师好:
追问:如果后面的项目列会一直添加,比如“销售一部”“销售二部”,如果每次都修改代码很麻烦,是否可以读取列标题再加上循环语句一类的方式实现自动统计呢?

--  作者:有点色
--  发布时间:2017/4/25 14:40:00
--  

那你命名的时候,要有规律,比如 xx_销售一部 xx_销售二部,那么就直接去开头是xx_的列

 

Dim cs As new List(Of String)
For Each c As Col In t.cols
    If c.Name.StartsWith("xx_") Then
        cs.add(c.name)
    End If
Next