Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共14 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

1楼
wqc360 发表于: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
图片点击可在新窗口打开查看
2楼
wqc360 发表于: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楼
程兴刚 发表于:2009/12/20 10:02:00
改成这样试试:

    If dr("工作时间")= Nothing Then
       e.DataRow("工作时间") = Nothing
    Else
       e.DataRow("工作时间") = dr("工作时间")
    End If
4楼
czy 发表于:2009/12/20 10:04:00
图号列类型是数值型吗?
5楼
程兴刚 发表于:2009/12/20 10:06:00
哦,是两个表的图号列类型不匹配!

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

[此贴子已经被作者于2009-12-20 10:11:01编辑过]
6楼
wqc360 发表于: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


7楼
wqc360 发表于: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
8楼
wqc360 发表于: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编辑过]
9楼
wqc360 发表于:2009/12/20 10:49:00
如要想把"工作时间"计算代码插在"工艺工时_天数"前面,代码应怎么改
10楼
wqc360 发表于:2009/12/20 10:51:00
本表"工作时间"是本表"工序_班组"=基础表"班组"时,调用基础表"工作时间"
共14 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .04688 s, 2 queries.