以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  自动编号生成怎么控制前缀位数  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=26705)

--  作者:慧明和谐
--  发布时间:2012/12/12 11:36: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 & "\'") \'取得该类别的最大编号
               
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

 

 

这个代码只能前缀是2位的可以计算编号累加   不是2位 累加就报错了  哪里是控制位数的

类别  编号

AB   AB001

AB   AB002

AB   AB003

BC   BC001

ABC ABC001

ABC  报错......

 


--  作者:aubber
--  发布时间:2012/12/12 12:13:00
--  
试试看
idx = CInt(max.Substring(3,3)) + 1 \'获得最大编号的后三位顺序号,并加1


--  作者:lin_hailun
--  发布时间:2012/12/12 13:09:00
--  
idx = CInt(max.Substring(2,3)) + 1 \'获得最大编号的后三位顺序号,并加1

替换成

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