奇怪,我把以下代码放在最后,他又能正常了,证明代码没问题,前后有没关系怎么回事?
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
改成这样试试:
If dr("工作时间")= Nothing Then
e.DataRow("工作时间") = Nothing
Else
e.DataRow("工作时间") = dr("工作时间")
End If
哦,是两个表的图号列类型不匹配!
执行到这里:
If e.DataCol.Name = "工序_班组" Then
dr = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
此dr非彼dr,放到后面自然不报错了。
[此贴子已经被作者于2009-12-20 10:11:01编辑过]
工作时间是提取按条件基础表中的,程版的不行。
不知执行代码时有没有顺序,比如:
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
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编辑过]
本表"工作时间"是本表"工序_班组"=基础表"班组"时,调用基础表"工作时间"