以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 重置“工序_班组”列提示错误 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=5568)
|
-- 作者: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
|
-- 作者: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
|
-- 作者:程兴刚
-- 发布时间:2009/12/20 10:02:00
--
改成这样试试:
If dr("工作时间")= Nothing Then e.DataRow("工作时间") = Nothing Else e.DataRow("工作时间") = dr("工作时间") End If
|
-- 作者:czy
-- 发布时间:2009/12/20 10:04:00
--
图号列类型是数值型吗?
|
-- 作者:程兴刚
-- 发布时间: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
-- 发布时间: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
-- 发布时间: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
-- 发布时间: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
-- 发布时间:2009/12/20 10:49:00
--
如要想把"工作时间"计算代码插在"工艺工时_天数"前面,代码应怎么改
|
-- 作者:wqc360
-- 发布时间:2009/12/20 10:51:00
--
本表"工作时间"是本表"工序_班组"=基础表"班组"时,调用基础表"工作时间"
|