以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]如何改呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80409) |
-- 作者:huhu -- 发布时间:2016/1/22 10:54:00 -- [求助]如何改呢? Dim dr As DataRow = DataTables("U8物料数量汇总表").Find("入库单号 = \'" & Vars("fckrkdh") & "\' And 物料编码 = \'" & e.DataRow("物料编码") & "\'") If dr IsNot Nothing Then Dim fdr As DataRow = DataTables("非插卡收货扫描").Find("SN = \'" & e.DataRow("SN") & "\' And _Identify <> " & e.DataRow("_Identify")) If fdr IsNot Nothing Then If fdr("提示") = "收货重复扫描" Or fdr("提示") = "收货完成" Then e.DataRow("数量") = 0 e.DataRow("提示") = "收货重复扫描" e.DataRow.locked = True End If Else If dr("比较结果") < 0 Then msgbox(0) e.DataRow("库位类别") = dr("库位类别") e.DataRow("入库单号") = Vars("fckrkdh") e.DataRow("数量") = 1 e.DataRow("提示") = "收货完成" e.DataRow("收货完成时间") = Date.now e.DataRow.locked = True dr("实扫到数量") = dr("实扫到数量") + 1 msgbox(1) ElseIf dr("比较结果") = 0 Then msgbox(2) e.DataRow("数量") = 0 e.DataRow("提示") = "收货已满" e.DataRow.locked = True msgbox(3) End If End If Else e.DataRow("数量") = 0 e.DataRow("提示") = "非本入库单物料" e.DataRow.locked = True End If End If 红色代码执行可能会遇到执行完后正好dr("比较结果")=0了,那就又把蓝色的代码也给执行了,就会本应该是红色代码的值变为了蓝色代码的值。
|
-- 作者:大红袍 -- 发布时间:2016/1/22 11:05:00 -- 前面要判断列名啊
If e.DataCol.Name = "比较结果" Then
End If
|
-- 作者:huhu -- 发布时间:2016/1/22 11:34:00 -- 看来我没说清楚,下面是完整的代码。比较结果是另外一个表的。不是本表。 If e.DataCol.name = "SN" Then Dim nms() As String = {"生产订单号码","工单行号","物料编码","物料名称","类别说明","产品批次","订单号","订单行号","客户","备注","软件版本","提示"} If e.NewValue Is Nothing Then For Each nm As String In nms e.DataRow(nm) = Nothing Next Else Dim dr1 As DataRow = DataTables("assemblyProduct").Find("deviceCode = \'" & e.DataRow("SN") & "\'") If dr1 IsNot Nothing Then Dim dr2 As DataRow = DataTables("assemblySubWorkOrder").Find("SID = \'" & dr1("subWorkOrder") & "\'") If dr2 IsNot Nothing Then e.DataRow("工单行号") = dr2("LineFlag") Dim dr3 As DataRow = DataTables("assemblyWorkOrder").Find("Id = \'" & dr2("workOrder") & "\'") If dr3 IsNot Nothing Then e.DataRow("生产订单号码") = dr3("WorkOrderNo") Dim dr4 As DataRow = DataTables("批量").Find("生产订单号码 = \'" & e.DataRow("生产订单号码") & "\' and 工单行号 = \'" & e.DataRow("工单行号") & "\'") If dr4 IsNot Nothing Then e.DataRow("物料编码") = dr4("物料编码") e.DataRow("物料名称") = dr4("物料名称") e.DataRow("类别说明") = dr4("类别说明") e.DataRow("产品批次") = dr4("产品批次") e.DataRow("订单号") = dr4("订单号") e.DataRow("订单行号") = dr4("订单行号") e.DataRow("客户") = dr4("客户") e.DataRow("备注") = dr4("备注") e.DataRow("软件版本") = dr4("软件版本") Dim dr As DataRow = DataTables("U8物料数量汇总表").Find("入库单号 = \'" & Vars("fckrkdh") & "\' And 物料编码 = \'" & e.DataRow("物料编码") & "\'") If dr IsNot Nothing Then Dim fdr As DataRow = DataTables("非插卡收货扫描").Find("SN = \'" & e.DataRow("SN") & "\' And _Identify <> " & e.DataRow("_Identify")) If fdr IsNot Nothing Then If fdr("提示") = "收货重复扫描" Or fdr("提示") = "收货完成" Then e.DataRow("数量") = 0 e.DataRow("提示") = "收货重复扫描" e.DataRow.locked = True End If Else If dr("比较结果") < 0 Then msgbox(0) e.DataRow("库位类别") = dr("库位类别") e.DataRow("入库单号") = Vars("fckrkdh") e.DataRow("数量") = 1 e.DataRow("提示") = "收货完成" e.DataRow("收货完成时间") = Date.now e.DataRow.locked = True dr("实扫到数量") = dr("实扫到数量") + 1 msgbox(1) ElseIf dr("比较结果") = 0 Then msgbox(2) e.DataRow("数量") = 0 e.DataRow("提示") = "收货已满" e.DataRow.locked = True msgbox(3) End If End If Else e.DataRow("数量") = 0 e.DataRow("提示") = "非本入库单物料" e.DataRow.locked = True End If End If End If End If Else e.DataRow("提示") = "序列号不存在" e.DataRow.locked = True End If End If End If |
-- 作者:大红袍 -- 发布时间:2016/1/22 11:42:00 -- 不存在你说的问题啊。不可能执行两次啊。 |
-- 作者:huhu -- 发布时间:2016/1/22 11:48:00 -- msgbox(0), msgbox(1),
msgbox(2), msgbox(3), 都弹出来了 |
-- 作者:大红袍 -- 发布时间:2016/1/22 11:51:00 -- 一行,不可能触发多次。触发你修改了多行的SN值。
要不你就试试加入
SystemReady = False
\'代码
SystemReady = True
|
-- 作者:huhu -- 发布时间:2016/1/22 14:06:00 -- o . 我还需要说一下,比较结果列是一个表达式。会不会和这有关系?
|
-- 作者:大红袍 -- 发布时间:2016/1/22 14:11:00 -- 触发一次datacolchanged事件,不可能弹出多个msgbox。
你肯定触发多次SN的datacolchanged事件了。上传例子测试。 |
-- 作者:huhu -- 发布时间:2016/1/22 14:27:00 -- 前面还有一段是对字符串SN:20013040150 MAC:84:79:73:06:9e:40 H/W:MFRP0640080330BD00 自动裁出来SN,MAC,HW。这个是不是相当于触发了2次。 第一次SN的值为SN:20013040150 MAC:84:79:73:06:9e:40 H/W:MFRP0640080330BD00 执行了下面代码后。SN变为了20013040150。 但我奇怪的是第一次SN是不可能找到结果的。 Dim str As String = e.DataRow("SN") If str.Contains("SN:") And str.Contains("MAC:") And str.Contains("H/W:") Then Dim idx1 As Integer = str.IndexOf("MAC:") Dim idx2 As Integer = str.IndexOf("H/W:") e.DataRow("SN") = str.SubString(3, idx1-3) e.DataRow("MAC") = str.substring(idx1+4, idx2-idx1-5) e.DataRow("HW") = str.substring(idx2+5) End If
|
-- 作者:大红袍 -- 发布时间:2016/1/22 14:53:00 -- 这段代码写到datacolchanging事件
If e.DataCol.Name = "SN" Then Dim str As String = e.NewValue
If str.Contains("SN:") And str.Contains("MAC:") And str.Contains("H/W:") Then
Dim idx1 As Integer = str.IndexOf("MAC:")
Dim idx2 As Integer = str.IndexOf("H/W:")
e.DataRow("MAC") = str.substring(idx1+4, idx2-idx1-5)
e.DataRow("HW") = str.substring(idx2+5)
e.NewValue = str.SubString(3, idx1-3)
End If
End If
|