以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多行一样的数据,如何累计现场单总套数  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164171)

--  作者:edisontsui
--  发布时间:2021/4/28 13:01:00
--  多行一样的数据,如何累计现场单总套数
\'同生产票号/同制造产品号的情况下,只要一行<计划数量>输入数据,那么就重新计算该行现场单总套数的数据
If e.DataCol.name = "计划数量" Then
    Dim Filter3 As String = "[票号时间] = \'" & e.DataRow("票号时间") & "\' and [制造产品号] = \'" & e.DataRow("制造产品号") & "\' and [_Identify] <>" & e.DataRow ("_Identify")
    Dim drs3 As List(Of DataRow) = DataTables("现场任务单").Select(Filter3)
    e.DataRow("现场单总套数") = drs3.count * e.DataRow("计划数量")
End If

上述代码,好像没有效果,也就是说“现场单总套数”不会发生变化。请教是什么原因呢?

--  作者:有点蓝
--  发布时间:2021/4/28 13:54:00
--  
Dim Filter3 As String = "[piao号时间] = \'" & e.DataRow("piao号时间") & "\' and [制造产品号] = \'" & e.DataRow("制造产品号") & "\'"
--  作者:edisontsui
--  发布时间:2021/4/28 14:22:00
--  
If e.DataCol.name = "计划数量" Then
    Dim Filter3 As String = "[piao号时间] = \'" & e.DataRow("piao号时间") & "\' and [制造产品号] = \'" & e.DataRow("制造产品号") & "\' and [_Identify] <>" & e.DataRow ("_Identify")
    Dim drs3 As List(Of DataRow) = DataTables("现场任务单").Select(Filter3)
    e.DataRow("现场单总套数") = (drs3.count + 1) * e.DataRow("计划数量")
End If
上面那样也行。

--  作者:edisontsui
--  发布时间:2021/4/29 20:58:00
--  
\'同生产票号/同制造产品号的情况下,只要一行的<计划数量>输入数据,那么就重新计算该行的<现场单总套数>的数据,也就是说,每增加一行 同生产票号/同制造产品号 的记录,现场单总套数 就要把计划数量累计加一次。
比如第一行的计划数量为1,第二行的计划数量为2,第三行的计划数量为3,那么第三行的累计 <现场单总套数> 就是6.
If e.DataCol.name = "计划数量" Then
    Dim Filter3 As String = "[票号时间] = \'" & e.DataRow("票号时间") & "\' and [制造产品号] = \'" & e.DataRow("制造产品号") & "\'"  
    Dim drs3 As List(Of DataRow) = DataTables("现场任务单").Select(Filter3)
    e.DataRow("现场单总套数") = (drs3.count) * e.DataRow("计划数量") 
End If

但是上述代码累计加起来的数据不对。请问是什么原因?

--  作者:edisontsui
--  发布时间:2021/4/29 21:01:00
--  
哦,发现问题了,好像是     
e.DataRow("现场单总套数") = (drs3.count) * e.DataRow("计划数量") 
要改为
e.DataRow("现场单总套数") = e.DataRow("现场单总套数") + e.DataRow("计划数量") 

--  作者:edisontsui
--  发布时间:2021/4/30 20:55:00
--  
上面的代码还是有问题。问题应该是这样的:
\'同生产票号/同制造产品号的情况下,只要一行的<计划数量>发生变化, 那么就重新计算同生产票号/同制造产品号情况下的<现场单总套数>
If e.DataCol.name = "计划数量" Then
    Dim Filter3 As String = "[生产票号] = \'" & e.DataRow("生产票号") & "\' and [制造产品号] = \'" & e.DataRow("制造产品号") & "\'"  
    Dim drs3 As List(Of DataRow) = DataTables("现场任务单").Select(Filter3)
    For i As Integer = 0 To drs3.count - 1
        If i = 0
            e.DataRow("现场单总套数") = e.DataRow("计划数量")
        Else
            drs3(i)("现场单总套数") = drs3(i-1)("现场单总套数") + e.DataRow("计划数量")
        End If
    Next
End If

但是上述代码计算的结果不对。
比如第一行的计划数量为1,第二行的计划数量为2,第三行的计划数量为3,现场单总套数就是6。如果第三行的计划数量改为4,现场单总套数就是7。但是结果并非如此。请教这是什么原因?



--  作者:edisontsui
--  发布时间:2021/4/30 21:56:00
--  
        Dim dr1 As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr1 = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [生产票号] = \'" & mr("生产票号") & "\' And [制造产品号] = \'" & mr("制造产品号") & "\'", "[_SortKey] Desc")
        If dr1 Is Nothing OrElse dr1("_Identify") = mr("_Identify") Then
            mr("现场单总套数") = mr("计划数量")
            dr1 = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr1("_SortKey") & " And [生产票号] = \'" & dr1("生产票号") & "\' And [制造产品号] = \'" & mr("制造产品号") & "\'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("现场单总套数") = drs(i-1)("现场单总套数") + drs(i)("计划数量")
        Next

我用上述计算余数的方法来算也不对。

--  作者:有点酸
--  发布时间:2021/5/1 8:27:00
--  
6楼的代码,没有看出问题,做个例子发上来看看
--  作者:edisontsui
--  发布时间:2021/5/3 8:54:00
--  
我用6楼的代码时,比如第一行的计划数量为1,第二行的计划数量为2,第三行的计划数量为3,那么第一行的现场单总套数应为1,第二行的现场单总套数应为3,第三行的现场单总套数应为6,但是实际上却是:第一行的现场单总套数为1,第二行的现场单总套数为4,第三行的现场单总套数为7。说明是有问题。
--  作者:edisontsui
--  发布时间:2021/5/3 10:24:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar