Foxtable(狐表)用户栏目专家坐堂 → 重置“工序_班组”列提示错误


  共有15337人关注过本帖树形打印复制链接

主题:重置“工序_班组”列提示错误

帅哥哟,离线,有人找我吗?
wqc360
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
重置“工序_班组”列提示错误  发帖心情 Post By:2009/12/20 9:37:00 [只看该作者]

DataColChanged事件:
Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("生产工艺")
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "'And 状态 = '执行'"
if e.DataCol.Name = "图号" OrElse e.DataCol.Name = "工序_序号" OrElse e.DataCol.Name = "派工单号"   Then
    Dim r As DataRow = dt.Find(str)
    if r IsNot Nothing Then
        dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
        dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
        dr("工艺工时_准结") = (dt.Compute("Sum(工艺工时_准结)",str))
        dr("工艺工时_加工")=(dt.Compute("Sum(工艺工时_加工)",str))
        dr("完成工时_准结")=(dt.Compute("Sum(完成工时_准结)",str))
        dr("完成工时_加工")=(dt.Compute("Sum(完成工时_加工)",str))
        dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
        dr("实用工时")=(dt.Compute("Sum(实用工时)",str))
    End If
End If
Select Case e.DataCol.Name
    Case "工艺工时_准结","工艺工时_加工","完成工时_准结","完成工时_加工","工作时间"
        dr("完成工时_比例")=(dr("完成工时_准结")+dr("完成工时_加工"))/(dr("工艺工时_准结")+dr("工艺工时_加工"))
        dr("工艺工时_天数")=(dr("工艺工时_加工")+dr("工艺工时_准结"))/dr("工作时间")
        dr("完成工时_天数")=(dr("完成工时_准结")+dr("完成工时_加工"))/dr("工作时间")
End Select
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.DataRow.Locked = True '那么锁定此行
    End If
End If
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr IsNot Nothing Then
        e.DataRow("工作时间") = dr("工作时间")
    Else
        e.DataRow("工作时间") = Nothing
    End If
End If
Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] <= " & dr("工序_序号"))
Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] >= " & dr("工序_序号"))
Dim pr As DataRow = dr.GetParentrow("生产目录")
dr("工序_完工日期") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
dr("工序_开工日期") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+1)

图片点击可在新窗口打开查看此主题相关图片如下:未命名.bmp
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 9:45:00 [只看该作者]

奇怪,我把以下代码放在最后,他又能正常了,证明代码没问题,前后有没关系怎么回事?
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr IsNot Nothing Then
        e.DataRow("工作时间") = dr("工作时间")
    Else
        e.DataRow("工作时间") = Nothing
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/12/20 10:02:00 [只看该作者]

改成这样试试:

    If dr("工作时间")= Nothing Then
       e.DataRow("工作时间") = Nothing
    Else
       e.DataRow("工作时间") = dr("工作时间")
    End If

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/20 10:04:00 [只看该作者]

图号列类型是数值型吗?

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/12/20 10:06:00 [只看该作者]

哦,是两个表的图号列类型不匹配!

执行到这里:
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
此dr非彼dr,放到后面自然不报错了。

[此贴子已经被作者于2009-12-20 10:11:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 10:29:00 [只看该作者]

工作时间是提取按条件基础表中的,程版的不行。
不知执行代码时有没有顺序,比如:
1由2、3得出
3由4、5得出
1写在前面,3写在后面,算1时,是先用以前的3,还是用重新计算出3得出。
向我上面的,我以改成如下,但是顺序还是有一个不对,如"工作时间",先有调用计算其他数据,后又计算自己,掉前面不能执行:
Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("生产工艺")
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "'And 状态 = '执行'"
if e.DataCol.Name = "图号" OrElse e.DataCol.Name = "工序_序号" OrElse e.DataCol.Name = "派工单号"   Then
    Dim r As DataRow = dt.Find(str)
    if r IsNot Nothing Then
        dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
        dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
        dr("工艺工时_准结") = (dt.Compute("Sum(工艺工时_准结)",str))
        dr("工艺工时_加工")=(dt.Compute("Sum(工艺工时_加工)",str))
        dr("完成工时_准结")=(dt.Compute("Sum(完成工时_准结)",str))
        dr("完成工时_加工")=(dt.Compute("Sum(完成工时_加工)",str))
        dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
        dr("实用工时")=(dt.Compute("Sum(实用工时)",str))
    End If
End If
Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] <= " & dr("工序_序号"))
Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] >= " & dr("工序_序号"))
Dim pr As DataRow = dr.GetParentrow("生产目录")
dr("工序_完工日期") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
dr("工序_开工日期") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数")))
Select Case e.DataCol.Name
    Case "工艺工时_准结","工艺工时_加工","完成工时_准结","完成工时_加工","工作时间"
        dr("完成工时_比例")=(dr("完成工时_准结")+dr("完成工时_加工"))/(dr("工艺工时_准结")+dr("工艺工时_加工"))
        dr("工艺工时_天数")=(dr("工艺工时_加工")+dr("工艺工时_准结"))/dr("工作时间")
        dr("完成工时_天数")=(dr("完成工时_准结")+dr("完成工时_加工"))/dr("工作时间")
End Select
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.DataRow.Locked = True '那么锁定此行
    End If
End If
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr IsNot Nothing Then
        e.DataRow("工作时间") = dr("工作时间")
    Else
        e.DataRow("工作时间") = Nothing
    End If
End If



 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 10:40:00 [只看该作者]

我又改了一下,粉红橘黄得出红色红色得出橙色,最后得出橘黄,但是橘黄掉得出红色前面不行。
Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("生产工艺")
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "'And 状态 = '执行'"
if e.DataCol.Name = "图号" OrElse e.DataCol.Name = "工序_序号" OrElse e.DataCol.Name = "派工单号"   Then
    Dim r As DataRow = dt.Find(str)
    if r IsNot Nothing Then
        dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
        dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
        dr("工艺工时_准结") = (dt.Compute("Sum(工艺工时_准结)",str))
        dr("工艺工时_加工")=(dt.Compute("Sum(工艺工时_加工)",str))
        dr("完成工时_准结")=(dt.Compute("Sum(完成工时_准结)",str))
        dr("完成工时_加工")=(dt.Compute("Sum(完成工时_加工)",str))
        dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
        dr("实用工时")=(dt.Compute("Sum(实用工时)",str))
    End If
End If
Select Case e.DataCol.Name
    Case "工艺工时_准结","工艺工时_加工","完成工时_准结","完成工时_加工","工作时间"
        dr("完成工时_比例")=(dr("完成工时_准结")+dr("完成工时_加工"))/(dr("工艺工时_准结")+dr("工艺工时_加工"))
        dr("工艺工时_天数")=(dr("工艺工时_加工")+dr("工艺工时_准结"))/dr("工作时间")
        dr("完成工时_天数")=(dr("完成工时_准结")+dr("完成工时_加工"))/dr("工作时间")
End Select
Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] <= " & dr("工序_序号"))
Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态] = '执行' And [工序_序号] >= " & dr("工序_序号"))
Dim pr As DataRow = dr.GetParentrow("生产目录")
dr("工序_完工日期") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
dr("工序_开工日期") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数")))
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.DataRow.Locked = True '那么锁定此行
    End If
End If
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr IsNot Nothing Then
        e.DataRow("工作时间") = dr("工作时间")
    Else
        e.DataRow("工作时间") = Nothing
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 10:44:00 [只看该作者]


 图片点击可在新窗口打开查看 Post By:2009-12-20 10:06:00

哦,是两个表的图号列类型不匹配!

执行到这里:
If e.DataCol.Name = "工序_班组" Then
    dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
此dr非彼dr,放到后面自然不报错了。

基础表无图号列
[此贴子已经被作者于2009-12-20 10:44:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 10:49:00 [只看该作者]

如要想把"工作时间"计算代码插在"工艺工时_天数"前面,代码应怎么改

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/20 10:51:00 [只看该作者]

本表"工作时间"是本表"工序_班组"=基础表"班组"时,调用基础表"工作时间"

 回到顶部
总数 14 1 2 下一页