以文本方式查看主题

-  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=142161)

--  作者:yifan3429
--  发布时间:2019/10/20 1:38:00
--  填充自动编号
Dim dr As Row = Tables("项目管理").Current
Dim Cols1() As String = {"产品系列","产品分类","产品名称","主材工艺" ,"备注"}
Dim Cols2() As String = {"产品系列","产品分类","产品名称","主材工艺" ,"备注"}
For Each dr1 As DataRow In DataTables("项目选型表").Select("[选择] = True ")
    Dim dr2 As DataRow = DataTables("项目清单").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        dr2(Cols2(i)) = dr1(Cols1(i))
    Next
    dr2("区域") = e.Form.Controls("ComboBox2").text
    dr2("楼层") = e.Form.Controls("ComboBox1").text
    dr2("客户ID") = dr("客户ID")
    dr2("报价ID") = dr("报价ID")
    dr2("客户") = dr("客户")
    dr2("项目名称") = dr("客户") & "/"& dr("客户地址")
    dr2("项目组") = dr("项目组")

Dim bh As String = "TQD" & Format(dr2("sys_日期"),"yyyyMMdd") \'取得编号的8位前缀
If dr2("清单ID").StartsWith(bh) = False \'如果编号的前8位不符
Dim max As String
Dim idx As Integer
max = dr2.Compute("Max(清单ID)","sys_日期 = #" & dr2("sys_日期") & "# And [_Identify] <> " & dr2("_Identify")) \'取得该天的最大编号
If max > "" Then \'如果存在最大编号
idx = CInt(max.Substring(12,5)) + 1 \'获得最大编号的后三位顺序号,并加1
Else
idx = 1 \'否则顺序号等于1
End If
dr2("清单ID") = bh & "-" & Format(idx,"00000")
End If

上面的自动编号功能不能工作,需要怎么调整呢
    
Next
\'

--  作者:有点酸
--  发布时间:2019/10/20 9:32:00
--  
    Dim bh As String = "TQD" & Format(dr2("sys_日期"),"yyyyMMdd") \'编号的前缀是8位
    If dr2("清单ID").StartsWith(bh) = False \'如果编号的前8位不符
        Dim max As String
        Dim idx As Integer
        max = dr2.Compute("Max(清单ID)","sys_日期 = #" & dr2("sys_日期") & "# And [_Identify] <> " & dr2("_Identify")) \'取得该天的最大编号
        If max > "" Then \'如果存在最大编号
            idx = CInt(max.Substring(12,5)) + 1 \'既然编号的长度是14位,从第13个字符开始取5个字符,是啥子意思
        Else
            idx = 1 \'否则顺序号等于1
        End If
        dr2("清单ID") = bh & "-" & Format(idx,"00000")  ‘8+1+5 = 14 ,编号的长度是14位
    End If



所以:
   idx = CInt(max.Substring(12,5)) + 1  
也许应该改为:
   idx = CInt(max.Substring(9,5)) + 1