以文本方式查看主题

-  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
--  
那就是有其它代码影响了