以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于自动编号的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=20395) |
||||
-- 作者:wnny -- 发布时间:2012/6/7 11:20:00 -- 关于自动编号的问题 各位狐友 我想让合同序号自动根据订单号进行编号,但是目前遇到如下问题 1)订单号一旦输入字母就报错 2)输入数字的话长度小于3的话也有问题 3)数字长度=3的时候,合同序号不自动往上编号
请问谁能帮忙解决一下
谢谢
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2012/6/7 11:47:00 --
|
||||
-- 作者: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 |