以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  自动编号错误提示  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=44774)

--  作者:seal51
--  发布时间:2014/1/8 17:04:00
--  自动编号错误提示

自动编号代码

 

Select e.DataCol.Name
    Case "类别代号"
        If e.DataRow.IsNull("类别代号") Then
            e.DataRow("产品编号") = Nothing
        Else
            Dim lb As String = e.DataRow("类别代号")
            If e.DataRow("产品编号").StartsWith(lb) = False \'如果单据产品编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(产品编号)","类别代号 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别代号的最大产品编号
                If max > "" Then \'如果存在最大产品编号
                    idx = CInt(max.Substring(2,3)) + 1 \'获得最大产品编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("产品编号") = lb & Format(idx,"000")
            End If
        End If
End Select

 -------------------------------------------------------------------------------------------------------

错误提示!!!!

 

 

.NET Framework 版本:2.0.50727.3649
Foxtable 版本:2013.10.14.1
错误所在事件:表,产品表,DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Index and length must refer to a location within the string.
Parameter name: length


--  作者:Bin
--  发布时间:2014/1/8 17:05:00
--  
max.Substring(2,3) 你确保你字符串长度超过5了吗?
--  作者:seal51
--  发布时间:2014/1/8 17:06:00
--  

没有啊


--  作者:seal51
--  发布时间:2014/1/8 17:07:00
--  
类别代码为G, 第一个生成的是G001, 第二个编号就出现上述错误
--  作者:seal51
--  发布时间:2014/1/8 17:08:00
--  
加大字符串如何写
--  作者:Bin
--  发布时间:2014/1/8 17:09:00
--  
你这样不就长度不够不符合了吗? 才4的长度啊.

max.Substring(1,3) 

--  作者:seal51
--  发布时间:2014/1/8 17:12:00
--  

哦, 我知道了, 必须是连个字符, 类别代号是GG就行, 不过, 列表代号有的是1个,有的是2个, 有的是3个, 怎么办


--  作者:Bin
--  发布时间:2014/1/8 17:15:00
--  
判断一下长度.
max.Substring(max.length-3,3)


--  作者:狐狸爸爸
--  发布时间:2014/1/8 17:16:00
--  

如果长度不等,那么将下面的代码:

 

 

idx = CInt(max.Substring(2,3)) + 1

 

改为:

 

idx = CInt(max.Substring(max.Length -3,3)) + 1


--  作者:seal51
--  发布时间:2014/1/8 17:36:00
--  
谢谢, OK了