以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  范围超出?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187860)

--  作者:creastzh
--  发布时间:2023/8/17 5:39:00
--  范围超出?
仅是在不同表WorkOrderStatus中读取相关数据,然后写入一个固定表ProductionIssue,运行中又出现了异常:
图片点击可在新窗口打开查看
看起来这个是列数不匹配导致,但不应该呀,这里就是引用数据行处理数据
原始程序段:

\'转移工单数据WorkOrderStatus 中的问题行到生产问题跟踪表(ProductionIssue),工序开工/完工延误等信息确认
Dim Dt1 As DataTable = DataTables("WorkOrderStatus")
Dim dt2 As DataTable = DataTables("ProductionIssue")
Dim dt3 As DataTable = DataTables("ResourceID")
Dim dt4 As DataTable = DataTables("ProductDeveloper")

Dim PN As String
Dim WO As String
Dim OP As String
Dim Res As String
Dim Filter As String
Dim nr As String
Dim t As Integer
Dim i1 As Integer \'用于调试
Dim t1 As Integer
Dim bDate As Date

Dim dr1e As DataRow = DataTables("Data").Find("文件更新_文件名 = \'TransWOStatusToProductionIssue\'")
bDate = dr1e("文件更新_时间").AddDays( - 6)

For Each dr1 As DataRow In Dt1.DataRows
    i1 = i1 + 1
    
    If dr1("基本信息_ActStart") >= bDate Then 
        WO = dr1("基本信息_WO")
        OP = dr1("基本信息_OP")
        Res = dr1("基本信息_ResID")
        PN = dr1("基本信息_PartID")
        
        \'计算该工序上工序完工时间
        Dim CmpTimePre As Date
        Dim ResPre As String
        Dim ResCell As String
        Dim dr1p As DataRow = dt1.Find("基本信息_WO = \'" & WO & "\' and 基本信息_OP < " & OP , "基本信息_OP Desc")
        If i1 >= 3469 Then
            \'MessageBox.Show(dt1.datarows.Count)
            Output.Show(i1 & "," & dr1("基本信息_WO") & "|" & dr1("基本信息_OP"))   \'找到了第3469,IWO85239/1|100 出现了异常
            \'GoTo 1
        End If
        If dr1p IsNot Nothing Then
            \'MessageBox.Show(1)
            CmpTimePre = dr1p("基本信息_ActFINISH") \'上工序的完工工序时间    
            ResPre = dr1p("基本信息_ResID") \'上工序资源号
            Dim d3a As DataRow = dt3.Find("ResID = \'" & ResPre & "\'")
            If d3a IsNot Nothing Then
                ResCell = d3a("适用于标准化后的班组名称") \'责任班组
            End If 
        End If
        \'MessageBox.Show(2)
        If dr1("开工滞留天") > 0.5 Then
            If dr1("完工延迟天") > 0.5 Then 
                \'开工、完工同时滞留超过0.5天           
                
                nr = "开工,完工延误,计划开工:" & Format(dr1("修订计划_开工"), "G") & ",实际开工:" & Format(dr1("基本信息_ActStart"), "G") & ", 计划完工:" & Format(dr1("修订计划_完工"), "G") & ",实际完工:" & Format(dr1("基本信息_ActFINISH"), "G")
                
                Filter = "WO=\'" & WO & "\' and OP = " & OP & " and Description like \'开工,完工延误*\'"
                Dim yw As Single \'延误
                yw = Round2( Math.Max( dr1("开工滞留天") , dr1("完工延迟天")) * 24, 2)
                
                Dim dr2 As DataRow = dt2.Find(Filter)
                If dr2 IsNot Nothing Then \'找到该数据行
                    If dr2("DelayHrs延误小时") <> yw Then
                        dr2("DelayHrs延误小时") = yw \'延误天数
                    End If
                    If dr2("Description") <> nr Then
                        dr2("Description") = nr \'内容描述
                    End If 
                Else \'没有该数据行,须新增
                    Dim dr2n As DataRow = dt2.AddNew(1) 
                    Dim dr3 As DataRow = dt3.Find("ResID =\'" & Res & "\'") 
                    dr2n("Date") = Date.Today
                    If dr3 IsNot Nothing Then
                        dr2n("DataResource") = dr3("适用于标准化后的班组名称") \'班组
                    End If 
                    
                    dr2n("Reviser") = "系统" \'登记人
                    dr2n("来源S_And_C") = "R" \'来源
                    \'dr2n("NPI=1Mass=0") = dr1("") \'NPI
                    dr2n("WO") = dr1("基本信息_WO") \'工单号
                    dr2n("PartNumber") = dr1("基本信息_PartID") \'零件号
                    dr2n("OP") = dr1("基本信息_OP") \'工序号
                    dr2n("ResID") = dr1("基本信息_ResID") \'资源号
                    dr2n("WOQTY") = dr1("ACTQty_IN") \'工序数
                    t = t + 1
                    If CmpTimePre > #1-1-2020# Then
                        Dim zy As Single \'转移工序的时间                    
                        zy = ( CDate(dr1("基本信息_ActStart")) - CmpTimePre).TotalHours
                        If zy < 12 Then \'上工序到本工序间的停留<12小时
                            dr2n("IssueType问题种类") = "上工序延误" \'问题种类
                            dr2n("Res责任部门") = ResCell \'责任部门
                        Else
                            dr2n("IssueType问题种类") = "工序停滞" \'问题种类        
                        End If
                    Else
                        dr2n("IssueType问题种类") = "工序停滞" \'问题种类
                    End If 
                     
                    dr2n("Description") = nr \'问题描述
                    dr2n("Affect后果") = "交期晚" \'后果
                    dr2n("DelayHrs延误小时") = yw \'延误(Hrs)                    
                    \'dr2n("Person责任人") = dr1("") \'责任人
                    
                    Dim dr4 As DataRow = DataTables("ProductDeveloper").Find("PartID= \'" & PN & "\'")
                    If dr4 IsNot Nothing Then 
                        dr2n("QE") = dr4("QE") \'QE
                        dr2n("ME") = dr4("ME") \'ME
                    End If 
                End If
            Else \'开工滞留超过1天,完工延误小于0.5 或未结束
                nr = "开工延误,计划开工:" & Format(dr1("修订计划_开工"), "G") & ",实际开工:" & Format(dr1("基本信息_ActStart"), "G") 
                Filter = "WO=\'" & WO & "\' and OP = " & OP & " and Description like \'开工延误*\'"
                Dim dr2 As DataRow = dt2.Find(Filter)
                Dim yw As Single
                yw = round2(dr1("开工滞留天") * 24, 2)
                
                If dr2 IsNot Nothing Then \'找到该数据行
                    If dr2("DelayHrs延误小时") <> yw Then
                        dr2("DelayHrs延误小时") = yw \'延误天数
                    End If
                    If dr2("Description") <> nr Then
                        dr2("Description") = nr \'内容描述
                    End If 
                Else \'没有该数据行,须新增
                    Dim dr2n As DataRow = dt2.AddNew(1)
                    Dim dr3 As DataRow = dt3.Find("ResID =\'" & Res & "\'")
                    
                    dr2n("Date") = Date.Today
                    If dr3 IsNot Nothing Then
                        dr2n("DataResource") = dr3("适用于标准化后的班组名称") \'班组
                    End If 
                    
                    dr2n("Reviser") = "系统" \'登记人
                    dr2n("来源S_And_C") = "R" \'来源
                    \'dr2n("NPI=1Mass=0") = dr1("") \'NPI
                    dr2n("WO") = dr1("基本信息_WO") \'工单号
                    dr2n("PartNumber") = dr1("基本信息_PartID") \'零件号
                    dr2n("OP") = dr1("基本信息_OP") \'工序号
                    dr2n("ResID") = dr1("基本信息_ResID") \'资源号
                    dr2n("WOQTY") = dr1("ACTQty_IN") \'工序数
                    
                    If CmpTimePre > #1-1-2020# Then
                        Dim zy As Single \'转移工序的时间                    
                        zy = ( CDate(dr1("基本信息_ActStart")) - CmpTimePre).TotalHours
                        If zy < 12 Then \'上工序到本工序间的停留<12小时
                            dr2n("IssueType问题种类") = "上工序延误" \'问题种类
                            dr2n("Res责任部门") = ResCell \'责任部门
                        Else
                            dr2n("IssueType问题种类") = "工序停滞" \'问题种类        
                        End If
                    Else
                        dr2n("IssueType问题种类") = "工序停滞" \'问题种类
                    End If
                    
                    dr2n("Description") = nr \'问题描述
                    dr2n("Affect后果") = "交期晚" \'后果
                    dr2n("DelayHrs延误小时") = yw \'延误(Hrs)
                    \'dr2n("Res责任部门") = dr1("") \'责任部门
                    \'dr2n("Person责任人") = dr1("") \'责任人
                    
                    Dim dr4 As DataRow = DataTables("ProductDeveloper").Find("PartID= \'" & PN & "\'")
                    If dr4 IsNot Nothing Then 
                        dr2n("QE") = dr4("QE") \'QE
                        dr2n("ME") = dr4("ME") \'ME
                    End If
                End If 
            End If 
        Else \'开工延误《0.5天
            If dr1("完工延迟天") > 0.5 AndAlso dr1("状态").Contains("C") Then \'须确认该工序是否已经完工,如果已经完工则进行确认
                nr = "完工延误,完工开工:" & Format(dr1("修订计划_完工"), "G") & ",实际完工:" & Format(dr1("基本信息_ActFINISH"), "G") 
                Filter = "WO=\'" & WO & "\' and OP = " & OP & " and Description like \'完工延误*\'"
                Dim dr2 As DataRow = dt2.Find(Filter)
                Dim yw As Single
                yw = round2(dr1("完工延迟天") * 24, 2)
                
                If dr2 IsNot Nothing Then \'找到该数据行
                    If dr2("DelayHrs延误小时") <> yw Then
                        dr2("DelayHrs延误小时") = yw \'延误小时数
                    End If
                    If dr2("Description") <> nr Then
                        dr2("Description") = nr \'内容描述
                    End If 
                Else \'没有该数据行,须新增
                    Dim dr2n As DataRow = dt2.AddNew(1)
                    Dim dr3 As DataRow = dt3.Find("ResID =\'" & Res & "\'")
                    
                    dr2n("Date") = Date.Today
                    If dr3 IsNot Nothing Then
                        dr2n("DataResource") = dr3("适用于标准化后的班组名称") \'班组
                    End If 
                    
                    dr2n("Reviser") = "系统" \'登记人
                    dr2n("来源S_And_C") = "R" \'来源
                    \'dr2n("NPI=1Mass=0") = dr1("") \'NPI
                    dr2n("WO") = dr1("基本信息_WO") \'工单号
                    dr2n("PartNumber") = dr1("基本信息_PartID") \'零件号
                    dr2n("OP") = dr1("基本信息_OP") \'工序号
                    dr2n("ResID") = dr1("基本信息_ResID") \'资源号
                    dr2n("WOQTY") = dr1("ACTQty_IN") \'工序数
                    dr2n("Description") = nr \'问题描述
                    dr2n("IssueType问题种类") = "工序停滞" \'问题种类
                    dr2n("Affect后果") = "交期晚" \'后果
                    dr2n("DelayHrs延误小时") = yw \'延误(Hrs)
                    \'dr2n("Res责任部门") = dr1("") \'责任部门
                    \'dr2n("Person责任人") = dr1("") \'责任人
                    
                    Dim dr4 As DataRow = DataTables("ProductDeveloper").Find("PartID= \'" & PN & "\'")
                    If dr4 IsNot Nothing Then 
                        dr2n("QE") = dr4("QE") \'QE
                        dr2n("ME") = dr4("ME") \'ME
                    End If
                End If 
            End If 
        End If
    End If
Next
1:
\'Dim dr1e As DataRow = DataTables("Data").Find("文件更新_文件名 = \'TransWOStatusToProductionIssue\'")
dr1e("文件更新_时间") = Date.Now \'最近更新时间

我再次将中断点加到了下面的这个位置:
图片点击可在新窗口打开查看
错误又现, 我根本无法理解! 昨日导入Excel数据累次出错,也没有解决. 

希望能被解决!

--  作者:有点蓝
--  发布时间:2023/8/17 9:00:00
--  
关闭退出项目,删除项目所在的文件夹里的bin目录,然后重启项目试试。
--  作者:creastzh
--  发布时间:2023/8/17 10:17:00
--  
Bin 目录我昨天就删除重试了,还是不行
--  作者:有点蓝
--  发布时间:2023/8/17 10:19:00
--  
请上传实例测试
--  作者:程兴刚
--  发布时间:2023/8/17 10:30:00
--  
非命令窗口测试不能用Output.Show