以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于Datacolchanged 事件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=132411)

--  作者:873773115
--  发布时间:2019/3/21 12:05:00
--  关于Datacolchanged 事件
请问老师,在什么情况下 会导致该事件无法执行?  (比如电脑硬件有问题,或者有大量的数据要处理会不会导致代码停止执行呢??)
最近无缘无故会出现,出库表修改了张数 ,库存平方不变,金额也不变 (库存平方 = 单张库存平方 * 张数   金额 = 库存平方 * 单价 )

因为这个出库单是对外的,需要给客户   出现后影响挺大的,请老师帮忙看下

--  作者:873773115
--  发布时间:2019/3/21 12:07:00
--  
Dim dtw As DataRow

If Tables("出库主表_出库明细表").Position = -1 Then
    Return
End If

If vars("_qd") = "qdz"
    Return
End If

If e.DataRow.Isnull("品号") =False Then
    dtw = DataTables("产品表").find("品号 = \'" & e.DataRow("品号") & "\'")
    If dtw Is Nothing Then
        MessageBox.Show("当前品号不存在,请核对!","提醒")
        e.DataRow("品号") = Nothing
        Return
    End If
    
    Select Case e.DataCol.name
        Case "张数","品号","做账_单价","开单_单价"
            e.DataRow("库存平方") = e.DataRow("单张库存平方") * e.DataRow("张数")
            e.DataRow("销售平方") = e.DataRow("单张销售平方") * e.DataRow("张数")
            e.DataRow("装车平方") = e.DataRow("单张装车平方") * e.DataRow("张数")
            If e.DataRow("品名") = "搬运费" Or e.DataRow("品名") = "冲减货款" Then
                e.DataRow("做账_金额") = e.DataRow("做账_单价")
                e.DataRow("开单_金额") = e.DataRow("开单_单价")
            Else
                e.DataRow("做账_金额") = e.DataRow("销售平方") * e.DataRow("做账_单价")
                e.DataRow("开单_金额") = e.DataRow("销售平方") * e.DataRow("开单_单价")
            End If
        Case "订单备注"
            If e.DataRow.IsNull("订单备注") = False Then
               If e.DataRow("订单备注").Contains("无表层") Then
               e.DataRow("种类") = "3E棕无"
               End If
            End If
    End Select
End If

--  作者:873773115
--  发布时间:2019/3/21 12:13:00
--  
老师,这是整个出库表的窗体 , 出库表的数据需要从 排单表中获取      vars("_qd") 这个变量是为了  限制在取单 获取数据过程中 不触发  datacolchanged 事件,没有意义
--  作者:873773115
--  发布时间:2019/3/21 12:13:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:出库.zip


--  作者:有点蓝
--  发布时间:2019/3/21 12:18:00
--  
Dim dtw As DataRow

If Tables("出库主表_出库明细表").Position = -1 Then
    Return
End If

If vars("_qd") = "qdz"
    Return
End If

If e.DataRow.Isnull("品号") =False Then
    dtw = DataTables("产品表").find("品号 = \'" & e.DataRow("品号") & "\'")
    If dtw Is Nothing Then
        MessageBox.Show("当前品号不存在,请核对!","提醒")
        e.DataRow("品号") = Nothing
        Return
    End If
End If
‘上面几个判断干嘛用的,如果不符合条件会导致下面不进行计算
Select Case e.DataCol.name
    Case "张数","单张装车平方","单张销售平方","单张库存平方"
        e.DataRow("库存平方") = e.DataRow("单张库存平方") * e.DataRow("张数")
        e.DataRow("销售平方") = e.DataRow("单张销售平方") * e.DataRow("张数")
        e.DataRow("装车平方") = e.DataRow("单张装车平方") * e.DataRow("张数")

    Case "品名","做账_单价","开单_单价"
        If e.DataRow("品名") = "搬运费" Or e.DataRow("品名") = "冲减货款" Then
            e.DataRow("做账_金额") = e.DataRow("做账_单价")
            e.DataRow("开单_金额") = e.DataRow("开单_单价")
        Else
            e.DataRow("做账_金额") = e.DataRow("销售平方") * e.DataRow("做账_单价")
            e.DataRow("开单_金额") = e.DataRow("销售平方") * e.DataRow("开单_单价")
        End If
    Case "订单备注"
        If e.DataRow.IsNull("订单备注") = False Then
            If e.DataRow("订单备注").Contains("无表层") Then
                e.DataRow("种类") = "3E棕无"
            End If
        End If
End Select


--  作者:873773115
--  发布时间:2019/3/21 12:39:00
--  
第一个判断汇总行的,第二个是判断是否在取单过程中的,第三个是判断品号列 输入的品号是否正确的 。 这三个不会影响下面代码执行

1 在更改某一行内容时,不可能同时选中汇总行
vars("_qd") 变量,在取单前变为 vars("_qd") = "qdz"  取单完成后就 变为 vars("_qd") = "qdh",也不会影响
3 在输入某一个品号时,如果品号错误  则品号直接取消为空了,  直到它输入正确的品号前,不能保存   所以也不会影响

--  作者:有点蓝
--  发布时间:2019/3/21 13:49:00
--  
汇总行不会触发这个事件,没有必要判断

其它的判断仍然会有影响,只是您自己以为不会有影响而已。编程这种东西以测试结果为准,因为别人未必会按照您认为的模式去进行操作。