以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  费用分摊、统计  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=9251)

--  作者:caoxy
--  发布时间:2011/3/20 10:42:00
--  费用分摊、统计

 师傅你好:

1、在出单日期同一天内,按处理总量对运费进行自动分摊。

2、在开始日期和结束日期内,按用盘单位统计运输费用、处理费用。(我在录入窗口右下角已设日期输入框和统计按钮)

统计格式:

用盘单位   运输费用   处理费用   合计
中天日立

..........

..........

..........

合计

谢谢

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


--  作者:mr725
--  发布时间:2011/3/20 11:54:00
--  
你最好把分摊和统计的公式列出来,别让人猜测嘛。
--  作者: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


--  作者:caoxy
--  发布时间:2011/3/20 17:20:00
--  

师傅你好!

代码复制后,运费分摊列没有显示


--  作者:狐狸爸爸
--  发布时间: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("统计")


--  作者:狐狸爸爸
--  发布时间:2011/3/20 17:25:00
--  
以下是引用caoxy在2011-3-20 17:20:00的发言:

师傅你好!

代码复制后,运费分摊列没有显示

 

设置完成后,重置一下出单日期列即可,我测试是可以出来的。

至于为啥要重置某个参与计算的列,请看看:

 

http://help.foxtable.com/topics/1469.htm

 

其实狐表不算难的,在处理复杂问题的时候,比易表更容易。

建议你系统性地看看帮助,你会认同我的观点。


--  作者:caoxy
--  发布时间:2011/3/20 17:29:00
--  

好的,谢谢


--  作者:caoxy
--  发布时间:2011/3/20 18:00:00
--  

两个日期框要不要改变什么属性,和写什么代码,

我试验了,第一次输入开始的日期和结束日期,能够统计内容,再试增加两者之间的天数,统计的内容还是一样。


--  作者:狐狸爸爸
--  发布时间:2011/3/20 18:30:00
--  
如果你增加的那些天,本来就没有数据或者值,那么统计内容自然是一样的
[此贴子已经被作者于2011-3-20 18:29:52编辑过]