以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  datacolchanged 代码问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=170102)

--  作者:edisontsui
--  发布时间:2021/7/12 18:22:00
--  datacolchanged 代码问题
If e.DataCol.name = "销售数量" Then 
    If e.DataRow("销售单号") IsNot Nothing Then
        Dim Filter2 As String = "[产品代号] = \'" & e.DataRow("产品代号") & "\'"
        Dim drs As List(Of DataRow) = DataTables("装配清单").Select(Filter2)
        For Each dr As DataRow In drs
        Dim dr2 As DataRow = DataTables("腾龙供料汇总").Find("销售单号 = \'" & e.DataRow("销售单号") & "\' and 指定用料 = \'" & dr("零件代号") & "\'")
        If dr2 IsNot Nothing Then
            If dr("零件类别") = "原料" Then
                dr2("销售总重") = dr2("销售总重") + (e.newvalue - e.oldvalue) * dr("零件用量")/1000
            Else
                dr2("销售总重") = dr2("销售总重") + (e.newvalue - e.oldvalue) * dr("零件用量")
            End If 
            dr2("销售总重输入记录") = User.Name & " " & Date.Now
        Else
            Dim dr3 As Row = Tables("腾龙供料汇总").AddNew()
            dr3("销售单号") = e.DataRow("销售单号")
            dr3("指定用料") = dr("零件代号")
            If dr("零件类别") = "原料" Then
                dr3("销售总重") = e.DataRow("销售数量") * dr("零件用量")/1000
            Else
                dr3("销售总重") = e.DataRow("销售数量") * dr("零件用量")
            End If 
            dr3("销售总重输入记录") = User.Name & " " & Date.Now
        End If
        Next
    End If
End If

上面的代码,当“销售数量”变大时,“腾龙供料汇总”那里的结果是“销售总量”的数值是加倍的;但是当“销售数量”变小时,“腾龙供料汇总”那里减的过程是没问题的。请问是哪里的问题呢?谢谢。


--  作者:有点蓝
--  发布时间:2021/7/12 20:17:00
--  
这个事件还有没有其它代码?

调试看看
If e.DataCol.name = "销售数量" Then 
    If e.DataRow("销售单号") IsNot Nothing Then
msgbox(e.DataRow("销售数量"))
        Dim Filter2 As String = "[产品代号] = \'" & e.DataRow("产品代号") & "\'"
        Dim drs As List(Of DataRow) = DataTables("装配清单").Select(Filter2)
msgbox(drs.count)
        For Each dr As DataRow In drs
        Dim dr2 As DataRow = DataTables("腾龙供料汇总").Find("销售单号 = \'" & e.DataRow("销售单号") & "\' and 指定用料 = \'" & dr("零件代号") & "\'")
        If dr2 IsNot Nothing Then
msgbox(dr("零件类别"))
            If dr("零件类别") = "原料" Then
msgbox(dr2("销售总重"))
msgbox(e.newvalue - e.oldvalue)
                dr2("销售总重") = dr2("销售总重") + (e.newvalue - e.oldvalue) * dr("零件用量")/1000
            Else
                dr2("销售总重") = dr2("销售总重") + (e.newvalue - e.oldvalue) * dr("零件用量")
            End If 
msgbox(dr2("销售总重"))
            dr2("销售总重输入记录") = User.Name & " " & Date.Now
        Else
            Dim dr3 As Row = Tables("腾龙供料汇总").AddNew()
            dr3("销售单号") = e.DataRow("销售单号")
            dr3("指定用料") = dr("零件代号")
            If dr("零件类别") = "原料" Then
                dr3("销售总重") = e.DataRow("销售数量") * dr("零件用量")/1000
            Else
                dr3("销售总重") = e.DataRow("销售数量") * dr("零件用量")
            End If 
msgbox(dr2("销售总重"))
            dr3("销售总重输入记录") = User.Name & " " & Date.Now
        End If
        Next
    End If
End If

另外建议使用统计的方式进行汇总计算:http://www.foxtable.com/webhelp/topics/1472.htm,看另一种更新方式