-- 作者:caoxy
-- 发布时间:2011/3/20 15:03:00
--
1、运费分摊:如:2011-01-04这一天,处理总量四行共5只,运费金额950元,
950/5=190,同一天处理总量列数量:2*190=380 1*190=190 1*190=190 1*190=190,也就是在运费分摊列从上向下显示:380 190 190 190
2:统计:是指从开始出单日期到结束出单日期的天数内,对同一个用盘单位分别汇总运输费用和处理费用,
列合计是指同一个用盘单位,运输费用和处理费用相加。
行合计是指各个用盘单位,运输费用相加、处理费用相加。
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/20 16:53:00
--
运费分摊我帮你做好了,下面代码加粗的部分,就是计算运费分摊的:
Dim dr1 As DataRow = e.DataRow Dim dr2 As DataRow If e.DataCol.Name = "驾驶员" Then dr2 = DataTables("参数").Find("驾驶员 = " & "\'" & dr1("驾驶员") & "\'" ) If dr2 IsNot Nothing \'如果找到, 则设置各列内容 dr1("车号")= dr2("车号") dr1("车长")= dr2("车长") End If End If Select Case e.DataCol.Name Case "运输地点" ,"车号", "车长" dr2 = DataTables("参数").Find("运输地点 = " & "\'" & dr1("运输地点") & "\' And 车长 = \'" & dr1("车长") & "\' And 车号 = \'" & dr1("车号") & "\'" ) If dr2 IsNot Nothing \'如果找到, 则设置各列内容 dr1("运费")= dr2("运费") End If Case "出单日期","运费","处理总量" Dim drs As List(of DataRow) = e.DataTable.Select("出单日期 = #" & dr1("出单日期") & "#") Dim cnt As Integer = e.DataTable.Compute("sum(处理总量)", "出单日期 = #" & dr1("出单日期") & "#") Dim val As Double = e.DataTable.Compute("sum(运费)", "出单日期 = #" & dr1("出单日期") & "#") /cnt For Each dr As DataRow In drs dr("运费分摊") = val * dr("处理总量") Next End Select If e.DataCol.Name = "二次运输" Then dr2 = DataTables("参数").Find("驾驶员 = " & "\'" & dr1("二次运输") & "\'" ) If dr2 IsNot Nothing \'如果找到, 则设置各列内容 dr1("二次车号")= dr2("车号") dr1("二次车长")= dr2("车长") End If End If Select Case e.DataCol.Name Case "运送地点" ,"二次车号", "二次车长" dr2 = DataTables("参数").Find("运输地点 = " & "\'" & dr1("运送地点") & "\' And 车长 = \'" & dr1("二次车长") & "\' And 车号 = \'" & dr1("二次车号") & "\'" ) If dr2 IsNot Nothing \'如果找到, 则设置各列内容 dr1("二次运费")= dr2("运费") End If End Select Select Case e.DataCol.Name Case "处理方式","品种1","规格1" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种1") & "\' And 产品规格 = \'" & dr1("规格1") & "\'") If dr2 IsNot Nothing Then dr1("单价1") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种2","规格2" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种2") & "\' And 产品规格 = \'" & dr1("规格2") & "\'") If dr2 IsNot Nothing Then dr1("单价2") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种3","规格3" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种3") & "\' And 产品规格 = \'" & dr1("规格3") & "\'") If dr2 IsNot Nothing Then dr1("单价3") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种4","规格4" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种4") & "\' And 产品规格 = \'" & dr1("规格4") & "\'") If dr2 IsNot Nothing Then dr1("单价4") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种5","规格5" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种5") & "\' And 产品规格 = \'" & dr1("规格5") & "\'") If dr2 IsNot Nothing Then dr1("单价5") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种6","规格6" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种6") & "\' And 产品规格 = \'" & dr1("规格6") & "\'") If dr2 IsNot Nothing Then dr1("单价6") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种7","规格7" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种7") & "\' And 产品规格 = \'" & dr1("规格7") & "\'") If dr2 IsNot Nothing Then dr1("单价7") = dr2("报价") End If End Select Select Case e.DataCol.Name Case "处理方式","品种8","规格8" dr2 = DataTables("参数").Find("处理方式 = \'" & dr1("处理方式") & "\' And 产品名称 = \'" & dr1("品种8") & "\' And 产品规格 = \'" & dr1("规格8") & "\'") If dr2 IsNot Nothing Then dr1("单价8") = dr2("报价") End If End Select
|
-- 作者:狐狸爸爸
-- 发布时间:2011/3/20 17:22:00
--
至于统计,其实你不需要写代码的,筛选副某个日期范围内的行,然后用菜单分组统计即可。
如果你一定要写代码,新建一个窗口,插入两个日期输入框,一个按钮,按钮的代码设置为:
If e.Form.Controls("DateTimePicker1").Value Is Nothing OrElse e.Form.Controls("DateTimePicker2").Value Is Nothing Then MessageBox.Show("请输入起始日期和结束日期") Return End If Dim dtb As New DataTableBuilder("统计") Dim Filter As String = "出单日期 >= #" & e.Form.Controls("DateTimePicker1").Value & "# And 出单日期 <= #" & e.Form.Controls("DateTimePicker2").Value & "#" Dim nms As List(of String) = DataTables("出口处理").GetUniqueValues("","用盘单位") Dim dr As Row dtb.AddDef("用盘单位", Gettype(String), 32) dtb.AddDef("运输费用", Gettype(Double)) dtb.AddDef("处理费用", Gettype(Double)) dtb.AddDef("合计", Gettype(Double)) dtb.Build() For Each nm AS String In nms dr = Tables("统计").Addnew() dr("用盘单位") = nm dr("运输费用") = DataTables("出口处理").compute("Sum(运输费用)", "用盘单位 = \'" & nm & "\' And " & Filter) dr("处理费用") = DataTables("出口处理").compute("Sum(处理费用)", "用盘单位 = \'" & nm & "\' And " & Filter) dr("合计") = dr("运输费用") + dr("处理费用") Next dr = Tables("统计").AddNew dr("用盘单位") = "合计" dr("运输费用") = DataTables("出口处理").compute("Sum(运输费用)",Filter) dr("处理费用") = DataTables("出口处理").compute("Sum(处理费用)",Filter) dr("合计") = dr("运输费用") + dr("处理费用") e.Form.Close MainTable= Tables("统计")
|