以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  已知计划开始时间、计划完成时间以及计划工作量,如何求各月计划工作量  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105489)

--  作者:chengjingliang
--  发布时间:2017/8/20 21:45:00
--  已知计划开始时间、计划完成时间以及计划工作量,如何求各月计划工作量
已知计划开始时间、计划完成时间以及计划工作量,如何求各月计划工作量
--  作者:有点甜
--  发布时间:2017/8/20 21:59:00
--  

参考代码

 

Dim sd As Date = "2017-06-08"
Dim ed As Date = "2017-10-19"
Dim count As Double = 1000
Dim sp As TimeSpan = ed-sd
Dim avg As Double = 1000 / (sp.TotalDays+1)

Dim i As Double = 0
Do While sd <= ed
    If sd.Day = 1 OrElse sd = ed Then
        output.show(format(sd.AddDays(-1), "yyyyMM") & " : " & i*avg)
        i = 1
    Else
        i += 1
    End If
    sd = sd.AddDays(1)
Loop


--  作者:chengjingliang
--  发布时间:2017/8/21 21:33:00
--  
不知道从哪入手,请老师指教!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成本测算170816测试.rar


--  作者:有点蓝
--  发布时间:2017/8/21 22:14:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成本测算.zip


--  作者:chengjingliang
--  发布时间:2017/8/22 2:38:00
--  
计算结果存在误差,每月产值相加不等于计划产值总额,如何修改?
--  作者:有点蓝
--  发布时间:2017/8/22 8:55:00
--  
如果不能平分的数值自然存在误差,可以在最后一个月的数据进行求和比较一下,把误差补到最后一个月中

另外把相关列改为高精度

--  作者:chengjingliang
--  发布时间:2017/8/22 10:00:00
--  
有没有其他好办法,比如建一个月份表,设置月份天数,好不好搞?
--  作者:有点甜
--  发布时间:2017/8/22 10:25:00
--  

DataTables("表A").DataRows.Clear

MainTable = Tables("表A")

For Each r As Row In Tables("进度计划").Rows
    Dim sd As Date = r("计划开始")
    Dim ed As Date = r("计划完成")
    Dim count As Double = r("计划产值")
    Dim sp As TimeSpan = ed-sd
    Dim avg As Double = count / (sp.TotalDays+1)
    Dim i As Double = 0
    Dim sum As Double = 0
    Do While sd <= ed
        If sd.Day = 1 OrElse sd = ed Then
            Dim dr As DataRow = DataTables("表A").AddNew
            dr("项目ID") = r("项目ID")
            dr("计划ID") = r("计划ID")
            dr("月份") = format(sd.AddDays(-1), "yyyyMM")
            If sd = ed Then
                dr("产值") = count-sum
            Else

                dr("产值") = i*avg
                sum += i*avg
            End If
            i = 1
        Else
            i += 1
        End If
        sd = sd.AddDays(1)
    Loop
Next


--  作者:chengjingliang
--  发布时间:2017/8/22 13:53:00
--  
数据多时候,弹出下面提示,没法计算完全部数据

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2017.6.12.1
错误所在事件:窗口,窗口1,Button1,Click
详细错误信息:
添加或减去的值产生无法表示的 DateTime。
参数名: value
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成本测算22.rar



--  作者:有点甜
--  发布时间:2017/8/22 14:09:00
--  
DataTables("表A").DataRows.Clear
MainTable = Tables("表A")
For Each r As DataRow In DataTables("进度计划").Select("计划开始 is not null")
    Dim sd As Date = r("计划开始")
    Dim ed As Date = r("计划完成")
    Dim count As Double = r("计划产值")
    Dim sp As TimeSpan = ed-sd
    Dim avg As Double = count / (sp.TotalDays+1)
    Dim i As Double = 0
    Dim sum As Double = 0
    Do While sd <= ed
        If sd.Day = 1 OrElse sd = ed Then
            Dim dr As DataRow = DataTables("表A").AddNew
            dr("项目ID") = r("项目ID")
            dr("计划ID") = r("计划ID")
            dr("月份") = format(sd.AddDays(-1), "yyyyMM")
            If sd = ed Then
                dr("产值") = count-sum
            Else
                dr("产值") = i*avg
                sum += i*avg
            End If
            i = 1
        Else
            i += 1
        End If
        sd = sd.AddDays(1)
    Loop
Next