以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  排产时间变更  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=132582)

--  作者:有点甜
--  发布时间:2019/3/25 15:25:00
--  

Select Case e.DataCol.Name
    Case "实际开始日期"
        If e.oldvalue <> Nothing AndAlso e.oldvalue <> e.newvalue Then
            Dim sp As TimeSpan = e.newvalue-e.oldvalue
            For Each r As DataRow In e.DataTable.Select("加工顺序 > " & e.DataRow("加工循序"))
                r("实际完成日期") = cdate(r("实际开始日期")).AddSeconds(sp.TotalSeconds)
            Next
        End If
End Select
SystemReady = True


--  作者:有点蓝
--  发布时间:2019/3/25 22:12:00
--  
没看懂您的逻辑。上传实例。

同时截图说明:原来的数据是怎么样的?改了哪个数据?最后希望得到什么结果?

--  作者:有点蓝
--  发布时间:2019/3/25 22:43:00
--  
实际开始日期+待加工数\\任务量 ---  没看懂,具体是什么计算的
--  作者:有点甜
--  发布时间:2019/3/26 10:03:00
--  

这个问题你很久以前问过啊,请参考之前给你写的代码啊

 

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=111698&authorid=0&page=0&star=1

 


--  作者:有点甜
--  发布时间:2019/3/26 10:17:00
--  

单独做一个按钮执行代码

 

Dim dt As DataTable = DataTables("生产排产表")
Dim drs = dt.Select("", "加工顺序")
For i As Integer = 1 To drs.count-1
    Dim dr = drs(i-1)
    dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
    If dr("加工顺序") = drs(i)("加工顺序") Then
        drs(i)("实际开始日期") = dr("实际开始日期")
    Else
        If dr("使用设备") = drs(i)("使用设备") Then
            drs(i)("实际开始日期") = dr("实际完成日期")
        Else
            drs(i)("实际开始日期") = cdate(dr("实际开始日期")).AddHours(8)
        End If
    End If
    dr = drs(i)
    dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
Next


--  作者:有点甜
--  发布时间:2019/3/26 11:09:00
--  

Select Case e.DataCol.Name
    Case "实际开始日期"
        SystemReady = False
        If e.oldvalue <> Nothing AndAlso e.oldvalue <> e.newvalue Then
            Dim dt As DataTable = DataTables("生产排产表")
            Dim drs = dt.Select("加工顺序 > " & e.DataRow("加工循序"), "加工顺序")
            For i As Integer = 1 To drs.count-1
                Dim dr = drs(i-1)
                dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
                If dr("加工顺序") = drs(i)("加工顺序") Then
                    drs(i)("实际开始日期") = dr("实际开始日期")
                Else
                    If dr("使用设备") = drs(i)("使用设备") Then
                        drs(i)("实际开始日期") = dr("实际完成日期")
                    Else
                        drs(i)("实际开始日期") = cdate(dr("实际开始日期")).AddHours(8)
                    End If
                End If
                dr = drs(i)
                dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
            Next
        End If
        SystemReady = True
End Select

 


--  作者:有点甜
--  发布时间:2019/3/26 12:14:00
--  

哦,代码改成

 

Select Case e.DataCol.Name
    Case "实际开始日期"
        SystemReady = False
        Dim dt As DataTable = e.DataTable
        Dim drs = dt.Select("加工顺序 >= " & e.DataRow("加工顺序"), "加工顺序")
        For i As Integer = 1 To drs.count-1
            Dim dr = drs(i-1)
            dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
            If dr("加工顺序") = drs(i)("加工顺序") Then
                drs(i)("实际开始日期") = dr("实际开始日期")
            Else
                If dr("使用设备") = drs(i)("使用设备") Then
                    drs(i)("实际开始日期") = dr("实际完成日期")
                Else
                    drs(i)("实际开始日期") = cdate(dr("实际开始日期")).AddHours(8)
                End If
            End If
            dr = drs(i)
            dr("实际完成日期") = cdate(dr("实际开始日期")).adddays(dr("计划数量") / dr("任务量"))
        Next
       
        SystemReady = True
End Select