-- 作者:大红袍
-- 发布时间:2016/3/11 15:04:00
--
Dim b As New sqlCrossTableBuilder("利润表附表","部门损益总账") \'定义变量利润表附表,并从部门损益总账统计数据 b.AddTable("部门损益总账","部门名称","部门档案","部门名称") \'添加统计表 b.AddTable("部门损益总账","科目编号","科目档案","科目编码") \'添加统计表 b.HGroups.AddDef("{部门档案}.所属单位") \'添加所属单位列用于水平分组 b.HGroups.AddDef("部门类型") \'添加部门类型列用于水平分组 b.HGroups.AddDef("上级部门","部门") \'添加部门名称列用于水平分组,并将列名称重新命名为部门 b.HGroups.AddDef("所属日期",DateGroupEnum.year,"年") b.HGroups.AddDef("所属日期",DateGroupEnum.month,"月") b.VGroups.AddDef("一级科目") \'添加一级科目名称列用于垂直分组 b.Totals.AddDef("借方发生","本月") \'添加借方发生列用于统计 b.Totals.AddDef("借方发生","累计",True) \'添加借方发生列用于统计且截止累计金额 b.Decimals = 2 \'小数点取0位 b.Build \'生成统计表
Dim dt1 As DataTable = DataTables("部门档案") Dim dt2 As DataTable = DataTables("部门损益总账") Dim dt3 As DataTable = DataTables("利润表附表") dt3.DataRows.Clear Dim min As Date = dt2.Compute("min(所属日期)") Dim max As Date = dt2.Compute("max(所属日期)") For Each dr As DataRow In dt1.Select("") Dim sd As Date = min Do While Format(sd, "yyyyMM") <= Format(max, "yyyyMM") Dim ndr As DataRow = dt3.AddNew ndr("所属单位") = dr("所属单位") ndr("部门类型") = dr("部门类型") ndr("部门") = dr("上级部门") ndr("年") = sd.year ndr("月") = sd.Month sd = sd.AddMonths(1) Loop Next
Dim t3 As Table = Tables("利润表附表") Dim drs As List(Of DataRow) = t3.DataTable.Select("", "部门,年") For Each c As Col In t3.Cols If c.Caption Like "*_累计" Then Dim pdr As DataRow = Nothing Dim by As String = c.name.Replace("_up", "") For Each dr As DataRow In drs If pdr Is Nothing OrElse dr("部门") <> pdr("部门") OrElse dr("年") <> pdr("年") Then dr(c.name) = dr(by) Else dr(c.name) = dr(by) + pdr(by) End If pdr = dr Next End If Next
Dim dic As new Dictionary(of String, String) \'循环每一列,把标题和列名存储在字典里,然后引用,哪里需要某列的列名,就直接引用标题,如dic("标题名") For Each c As Col In Tables("利润表附表").cols dic.add(c.Caption, c.name) Next
If dic.ContainsKey("销售费用_本月") = False Then DataTables("利润表附表").dataCols.add("销售费用_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("销售费用_累计", Gettype(Double)) dic.add("销售费用_本月", "销售费用_本月") dic.add("销售费用_累计", "销售费用_累计") End If If dic.ContainsKey("财务费用_本月") = False Then DataTables("利润表附表").dataCols.add("财务费用_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("财务费用_累计", Gettype(Double)) dic.add("财务费用_本月", "财务费用_本月") dic.add("财务费用_累计", "财务费用_累计") End If If dic.ContainsKey("其他业务成本_本月") = False Then DataTables("利润表附表").dataCols.add("其他业务成本_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("其他业务成本_累计", Gettype(Double)) dic.add("其他业务成本_本月", "其他业务成本_本月") dic.add("其他业务成本_累计", "其他业务成本_累计") End If If dic.ContainsKey("营业外支出_本月") = False Then DataTables("利润表附表").dataCols.add("营业外支出_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("营业外支出_累计", Gettype(Double)) dic.add("营业外支出_本月", "营业外支出_本月") dic.add("营业外支出_累计", "营业外支出_累计") End If If dic.ContainsKey("其他业务收入_本月") = False Then DataTables("利润表附表").dataCols.add("其他业务收入_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("其他业务收入_累计", Gettype(Double)) dic.add("其他业务收入_本月", "其他业务收入_本月") dic.add("其他业务收入_累计", "其他业务收入_累计") End If If dic.ContainsKey("营业外收入_本月") = False Then DataTables("利润表附表").dataCols.add("营业外收入_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("营业外收入_累计", Gettype(Double)) dic.add("营业外收入_本月", "营业外收入_本月") dic.add("营业外收入_累计", "营业外收入_累计") End If If dic.ContainsKey("主营业务收入_本月") = False Then DataTables("利润表附表").dataCols.add("主营业务收入_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("主营业务收入_累计", Gettype(Double)) dic.add("主营业务收入_本月", "主营业务收入_本月") dic.add("主营业务收入_累计", "主营业务收入_累计") End If If dic.ContainsKey("主营业务成本_本月") = False Then DataTables("利润表附表").dataCols.add("主营业务成本_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("主营业务成本_累计", Gettype(Double)) dic.add("主营业务成本_本月", "主营业务成本_本月") dic.add("主营业务成本_累计", "主营业务成本_累计") End If If dic.ContainsKey("营业费用_本月") = False Then dic.add("营业费用_本月", "营业费用_本月") dic.add("营业费用_累计", "营业费用_累计") End If If dic.ContainsKey("资产减值损失_本月") = False Then DataTables("利润表附表").dataCols.add("资产减值损失_本月", Gettype(Double)) DataTables("利润表附表").dataCols.add("资产减值损失_累计", Gettype(Double)) dic.add("资产减值损失_本月", "资产减值损失_本月") dic.add("资产减值损失_累计", "资产减值损失_累计") End If If dic.ContainsKey("其他支出_本月") = False Then dic.add("其他支出_本月", "其他支出_本月") dic.add("其他支出_累计", "其他支出_累计") End If
DataTables("利润表附表").dataCols.add("营业费用_本月", Gettype(Double), "isnull(" & dic("销售费用_本月") & ",0)+isnull(" & dic("财务费用_本月") & ",0)") \'通过Add方法,动态增加临时列,并给临时列设置表达式,表达式引用字典的方式同直接引用有所区别 DataTables("利润表附表").dataCols.add("营业费用_累计", Gettype(Double), "isnull(" & dic("销售费用_累计") & ",0)+isnull(" & dic("财务费用_累计") & ",0)") DataTables("利润表附表").dataCols.add("其他支出_本月", Gettype(Double), "isnull(" & dic("其他业务成本_本月") & ",0)+isnull(" & dic("营业外支出_本月") & ",0)-isnull(" & dic("其他业务收入_本月") & ",0)-isnull(" & dic("营业外收入_本月") & ",0)") DataTables("利润表附表").dataCols.add("其他支出_累计", Gettype(Double), "isnull(" & dic("其他业务成本_累计") & ",0)+isnull(" & dic("营业外支出_累计") & ",0)-isnull(" & dic("其他业务收入_累计") & ",0)-isnull(" & dic("营业外收入_累计") & ",0)") DataTables("利润表附表").dataCols.add("利润_本月", Gettype(Double), "isnull(" & dic("主营业务收入_本月") & ",0)-isnull(" & dic("主营业务成本_本月") & ",0)-isnull(" & dic("资产减值损失_本月") & ",0)-[营业费用_本月]-[其他支出_本月]") DataTables("利润表附表").dataCols.add("利润_累计", Gettype(Double), "isnull(" & dic("主营业务收入_累计") & ",0)-isnull(" & dic("主营业务成本_累计") & ",0)-isnull(" & dic("资产减值损失_累计") & ",0)-[营业费用_累计]-[其他支出_累计]") With Tables("利润表附表") \'改变统计表的列的位置 .Cols("所属单位").Move(2) .Cols("部门类型").Move(3) .Cols("部门").Move(4) .Cols("利润_本月").Move(5) .Cols("利润_累计").Move(6) .Cols(dic("主营业务收入_本月")).Move(7) .Cols(dic("主营业务收入_累计")).Move(8) .Cols(dic("主营业务成本_本月")).Move(9) .Cols(dic("主营业务成本_累计")).Move(10) .Cols("营业费用_本月").Move(11) .Cols("营业费用_累计").Move(12) .Cols(dic("资产减值损失_本月")).Move(13) .Cols(dic("资产减值损失_累计")).Move(14) .Cols("其他支出_本月").Move(15) .Cols("其他支出_累计").Move(16) End With With Tables("利润表附表") \'设置各列的宽度 .AutoSizeCols(15) \'统一设置统计列的宽度 .Cols("所属单位").PrintWidth = 20 .Cols("部门").PrintWidth = 35 .Cols("部门类型").PrintWidth = 20 End With With Tables("利润表附表") \'隐藏部分列 .Cols(dic("销售费用_本月")).Visible = False .Cols(dic("销售费用_累计")).Visible = False .Cols(dic("财务费用_本月")).Visible = False .Cols(dic("财务费用_累计")).Visible = False .Cols(dic("其他业务收入_本月")).Visible = False .Cols(dic("其他业务收入_累计")).Visible = False .Cols(dic("其他业务成本_本月")).Visible = False .Cols(dic("其他业务成本_累计")).Visible = False .Cols(dic("营业外收入_本月")).Visible = False .Cols(dic("营业外收入_累计")).Visible = False .Cols(dic("营业外支出_本月")).Visible = False .Cols(dic("营业外支出_累计")).Visible = False End With Dim t As Table = Tables("利润表附表") Dim g As Subtotalgroup \'以下为设置自定义汇总模式,b.Subtotal = True 不适用通过表达式生成的列 Dim cs As String = "" For Each c As Col In Tables("利润表附表").cols If c.IsNumeric AndAlso c.Name <> "年" AndAlso c.Name <> "月" Then cs &= c.name & "," End If Next t.SubtotalGroups.Clear() t.GroupAboveData = False t.TreeVisible = False t.SpillNode = False
g = New Subtotalgroup g.Aggregate = AggregateEnum.Sum g.GroupOn = "部门类型" g.TotalOn = cs.trim(",") g.Caption = "{0} 小计" t.SubtotalGroups.Add(g)
g = New Subtotalgroup g.Aggregate = AggregateEnum.Sum g.GroupOn = "*" g.TotalOn = cs.trim(",") g.Caption = "总计" t.SubtotalGroups.Add(g)
t.Subtotal() Dim r As Row For i As Integer = 0 To t.Rows.Count(True) - 1 r = t.Rows(i,True) If r.IsGroup Then r(dic("主营业务收入_累计")) = 0 r(dic("主营业务成本_累计")) = 0 r("营业费用_累计") = 0 r(dic("资产减值损失_累计")) = 0 r("其他支出_累计") = 0 r("利润_累计") = 0 End If Next
MainTable = Tables("利润表附表") \'打开生成的统计表 CurrentTable.Cols.Frozen = 5 \'冻结前四列
DataTables("利润表附表").SysStyles("Subtotal0").BackColor = Color.pink \'设置报表样式 DataTables("利润表附表").SysStyles("Subtotal0").FontBold = True DataTables("利润表附表").SysStyles("GrandTotal").FontBold = True
|