Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
师傅你好:
1、在出单日期同一天内,按处理总量对运费进行自动分摊。
2、在开始日期和结束日期内,按用盘单位统计运输费用、处理费用。(我在录入窗口右下角已设日期输入框和统计按钮)
统计格式:
用盘单位 运输费用 处理费用 合计
中天日立
..........
..........
..........
合计
谢谢
下载信息 [文件大小: 下载次数: ] | |
![]() |
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:统计:是指从开始出单日期到结束出单日期的天数内,对同一个用盘单位分别汇总运输费用和处理费用,
列合计是指同一个用盘单位,运输费用和处理费用相加。
行合计是指各个用盘单位,运输费用相加、处理费用相加。
运费分摊我帮你做好了,下面代码加粗的部分,就是计算运费分摊的:
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
师傅你好!
代码复制后,运费分摊列没有显示
至于统计,其实你不需要写代码的,筛选副某个日期范围内的行,然后用菜单分组统计即可。
如果你一定要写代码,新建一个窗口,插入两个日期输入框,一个按钮,按钮的代码设置为:
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("统计")
师傅你好!
代码复制后,运费分摊列没有显示
设置完成后,重置一下出单日期列即可,我测试是可以出来的。
至于为啥要重置某个参与计算的列,请看看:
http://help.foxtable.com/topics/1469.htm
其实狐表不算难的,在处理复杂问题的时候,比易表更容易。
建议你系统性地看看帮助,你会认同我的观点。
好的,谢谢
两个日期框要不要改变什么属性,和写什么代码,
我试验了,第一次输入开始的日期和结束日期,能够统计内容,再试增加两者之间的天数,统计的内容还是一样。