以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动编号没变号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144854)

--  作者:lgz518
--  发布时间:2019/12/31 15:09:00
--  自动编号没变号
Dim bh As String =  "CGDD-" & Format(Date.Today(),"yyyyMMdd")
Dim flt = "采购单号 like \'" & bh & "%\'"
Dim max = e.DataTable.Compute("Max(采购单号)",flt) 
Dim idx As Integer
If max > "" Then \'如果存在最大单据编号
    idx = CInt(max.Substring(bh.Length,4)) + 1 
Else
    idx = 1 \'否则顺序号等于1
End If
e.DataRow("采购单号") = bh & Format(idx,"-0000")

上面代码在内表关联,执行没有变号,一直就是CGDD-20191231-0001,
1.要怎么处理?
2.如何在多并发,多人录入采购单,能不重复,及如果删除后能”废号“可以再利用?

--  作者:有点蓝
--  发布时间:2019/12/31 15:21:00
--  
学会调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm


Dim bh As String =  "CGDD-" & Format(Date.Today(),"yyyyMMdd")
Dim flt = "采购单号 like \'" & bh & "%\'"
Dim max = e.DataTable.Compute("Max(采购单号)",flt) 
msgbox(max) \'这里显示什么?
Dim idx As Integer
If max > "" Then \'如果存在最大单据编号
    idx = CInt(max.Substring(bh.Length,4)) + 1 
Else
    idx = 1 \'否则顺序号等于1
End If
e.DataRow("采购单号") = bh & Format(idx,"-0000")

如果考虑并发,就需要有一个统一的地方来取编号,才不会导致编号重复,如果使用服务端的方式处理,参考:http://www.foxtable.com/webhelp/topics/3008.htm,如果使用存储过程处理,可以看看:http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=61848&replyID=&skin=1

至于断号重用,需要添加一个断号表,把被删除的编号记录下来,在生成编号的时候,先到这个表查询获取最早的编号,如果没有再按照上面1/2的方法生成新的编号