以文本方式查看主题
- 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
--
老师好:教程看的有点蒙,之好把表格上传了。
|
-- 作者:有点色
-- 发布时间: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
|