以文本方式查看主题

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

--  作者:wnny
--  发布时间:2012/6/7 11:20:00
--  关于自动编号的问题

各位狐友

我想让合同序号自动根据订单号进行编号,但是目前遇到如下问题

1)订单号一旦输入字母就报错

2)输入数字的话长度小于3的话也有问题

3)数字长度=3的时候,合同序号不自动往上编号

 

请问谁能帮忙解决一下

 

谢谢

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:狐狸爸爸
--  发布时间:2012/6/7 11:47:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:wnny
--  发布时间:2012/6/7 11:54:00
--  
谢谢狐爸!欧了
--  作者:wnny
--  发布时间:2012/6/7 14:19:00
--  

狐爸,

经测试该代码有欠缺,如果一个订单号为2012-1话第二次输入会报错

idx = max.IndexOf("-") + 1 改成

idx = max.LastIndexOf("-") + 1就完美了


--  作者:狐狸爸爸
--  发布时间:2012/6/7 15:34:00
--  

呵呵,不错,你让我感到很宽慰。

 


--  作者:wnny
--  发布时间:2012/6/7 16:53:00
--  

狐爸,又发现问题了

一旦订单号发生更改,编号不是根据之前已经生产的号顺序生成编号,

编号尾数可能会在原来的基础上+1

比如原订单号    编号

1111             1111-002

1112             1112-001

1112             1112-002

1112             1112-003

 

改动以后会成这样

订单号        编号 

1112             1112-003

1112             1112-001

1112             1112-002

1112             1112-003

 

请问这怎么解决,谢谢


--  作者:狐狸爸爸
--  发布时间:2012/6/7 17:05:00
--  
Select e.DataCol.Name
    Case "订单号"
        If e.DataRow.IsNull("订单号") Then
            e.DataRow("合同序号") = Nothing
        Else
            Dim lb As String = e.DataRow("订单号")
            If e.DataRow("合同序号").StartsWith(lb & "-") = False \'如果单据合同序号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(合同序号)","订单号 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该订单号的最大合同序号
                If max > "" Then \'如果存在最大合同序号
                    idx = max.IndexOf("-") + 1
                    idx = CInt(max.Substring(idx)) + 1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("合同序号") = lb & "-" & Format(idx,"000")
            End If
        End If
End Select