以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 排产号码的自动生成 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=154403) |
-- 作者:seal51 -- 发布时间:2020/9/14 11:23:00 -- 排产号码的自动生成 有下面一段代码: If e.DataCol.Name = "排产日期" Then If e.DataRow.IsNull("排产日期") Then e.DataRow("排产单号") = Nothing Else Dim d As Date = e.DataRow("排产日期") Dim bh As String = "P" & Format(d,"yy-MM") & "" \'生成编号的前缀 e.DataRow.Save Dim max As String Dim idx As Integer Dim flt As String flt = "排产单号 like \'" & bh & "%\' And [_Identify] <> " & e.DataRow("_Identify") max = e.DataTable.sqlCompute("Max(排产单号)",flt) \'取得该月的相同排产单号的最大排产单号 If max > "" Then \'如果存在最大排产单号 idx = CInt(max.Substring(bh.Length,2)) + 1 \'获得最大排产单号的后两位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("排产单号") = bh & Format(idx,"00") e.DataRow.Save End If End If 代码编号规则如下: 比如日期是2020-08-XX,那么8月份的排产单号是P20-08-01,02,03... 比如日期是2020-09-XX,那么9月份的排产单号是P20-09-01,02,03... 现在有个问题, 就是排产日期一旦修改,那么排产单号就发生了变化? 比如排产单号是P20-0901, 一旦修改日期,排产单号就更改为P20-0902, 再修改一下日期,就更改为P20-0903 问题1,如何保证编号后面的顺序号一旦生成就不变化呢? 问题2,如果删除P20-0901, 再次添加,号码还是P20-0901, 而不是更改为P20-0902呢? |
-- 作者:有点蓝 -- 发布时间:2020/9/14 11:30:00 -- 所以理解帮助的代码就很重要了:http://www.foxtable.com/webhelp/topics/2403.htm 注意这一句代码,可以解决问题1: If e.DataRow("编号").StartsWith(bh) = False \'如果编号的前6位不符 至于问题2,既然都删除了P20-0901,再没有P20-0902、3的情况下,最新的肯定只能是P20-0901
|
-- 作者:seal51 -- 发布时间:2020/9/14 11:43:00 -- 第一个问题OK!谢谢! 第二个问题, 添加了P20-0901, P20-0902, P20-0903三个排产单号, 删除P20-0902, 再次添加一个排产单号,生成的是P20-0904, 如何让排产单号还是生成P20-0902呢?
|
-- 作者:有点蓝 -- 发布时间:2020/9/14 11:45:00 -- 新建一个废号表,删除的号码放到废号表里,生成号码的时候先到废号表里查询取值,没有再使用上面的代码生成新的号码 |
-- 作者:seal51 -- 发布时间:2020/9/14 11:48:00 -- 谢谢! 另外在窗口的afterload里排序Tables("排产主表").Sort = "排产单号", 为何有时候不起作用呢? |
-- 作者:有点蓝 -- 发布时间:2020/9/14 12:00:00 -- 那就是有其它代码影响了 |