以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何根据级码层次自动编号?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175300)

--  作者:twef
--  发布时间:2022/2/28 14:26:00
--  如何根据级码层次自动编号?
如何修改帮助文件中的自动编号生成,根据级码不同层次生成不重复编号?
图片点击可在新窗口打开查看此主题相关图片如下:编号.png
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2022/2/28 14:32:00
--  
升级到最新版本,看起折叠模式,就可以自动生成级码:
--  作者:有点蓝
--  发布时间:2022/2/28 14:37:00
--  
把级码拆分,直接补0 即可

Dim jm As String = "1.2.1"
Dim sr() As String = jm.split(".")
Dim s As String = "2020"
For Each s1 As String In sr
    s = s & s1.PadLeft(3,"0")
Next
msgbox(s)

--  作者:twef
--  发布时间:2022/2/28 14:42:00
--  
我想要生成编号,编号以年为基础向下扩展,比如:1、目录树中增加根节点,保存的时候生成级码4及编号2020004。2、目录树根节点2增加子节点,保存的时候生成级码2.1及编号2020002001。
--  作者:有点蓝
--  发布时间:2022/2/28 14:49:00
--  
生成级码看2楼,然后根据级码转换为编码,看3楼
--  作者:twef
--  发布时间:2022/2/28 15:06:00
--  
有点蓝老师,这样操作如果不插入节点编码是正确的,但是如果是插入节点,这样编码就不行了,编码会存在重复
--  作者:twef
--  发布时间:2022/2/28 15:13:00
--  
目录树是根据项目来生成,插入节点后项目所对应的级码可以调整,但编号不做调整,按不同层次的最大编号往下编
--  作者:twef
--  发布时间:2022/2/28 15:25:00
--  
插入根节点获取已存在“年+3位序号”的最大编号,往下编号;子节点上进行插入时节点时获取已存在“父节点编号+3位序号”的最大编号往下编
--  作者:有点蓝
--  发布时间:2022/2/28 15:51:00
--  
Select e.DataCol.Name
    Case "级码"
        If e.DataRow.IsNull("级码") OrElse e.DataRow.IsNull("编号")=False Then
        Else
            Dim lb As String = e.DataRow("级码")
            Dim max As String
            Dim idx As Integer
            If lb.contains(".") = False Then
                max = e.DataTable.Compute("Max(编号)","len(编号) = 7 And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(max.Length - 3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("编号") = Date.Today.year & Format(idx,"000")
            Else
                Dim sr() As String = lb.split(".")
                sr(sr.Length - 1) = ""
                lb = String.join(".",sr).trim()
                Dim len As Integer = 4 + sr.Length * 3
                max = e.DataTable.Compute("Max(编号)","len(编号) = " & len & " And 级码 like \'" & lb & "%\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    lb = max.Substring(0,max.Length - 3)
                    idx = CInt(max.Substring(max.Length - 3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                    lb = Date.Today.year
                    For i As Integer = 0 To sr.Length - 2
                        lb = lb & sr(i).PadLeft(3,"0")
                    Next
                End If
                e.DataRow("编号") = lb & Format(idx,"000")
            End If
            
        End If
End Select