以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于自动编号的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=48623) |
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 12:59:00 -- 关于自动编号的问题 我编写了一段集合供应商代码-日期-顺序号的代码,如下: Select e.DataCol.Name Case "订单日期","供应商代码" If e.DataRow.IsNull("订单日期") OrElse e.DataRow.IsNull("供应商代码") Then e.DataRow("采购订单号") = Nothing Else Dim d As Date = e.DataRow("订单日期") Dim y As Integer = d.Year Dim m As Integer = d.Month Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,m,1) \'获得该月的第一天 Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天 Dim bh As String = e.DataRow("供应商代码") & "-" & Format(d,"yyyyMM") & "-" \'生成编号的前缀 If e.DataRow("采购订单号").StartsWith(bh) = False \'如果单据编号前缀不符 Dim max As String Dim idx As Integer Dim flt As String flt = "供应商代码 = \'"& e.DataRow("供应商代码") & "\' And 订单日期 >= #" & fd & "# And 订单日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify") max = e.DataTable.Compute("Max(采购订单号)",flt) \'取得该月的相同工程代码的最大单据编号 If max > "" Then \'如果存在最大单据编号 idx = CInt(max.Substring(12,4)) + 1 \'获得最大单据编号的后四位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("采购订单号") = bh & Format(idx,"0000") End If End If End Select 同一个供应商代码在当前年/月/日的第一个代码生成没有问题,但在同一月的每二个代码就出现了以下的错误提示,恳请高手技术支持 .NET Framework 版本:2.0.50727.6413 Foxtable 版本:2014.3.8.1 错误所在事件:表,采购订单主表,DataColChanged 详细错误信息: 调用的目标发生了异常。 索引和长度必须引用该字符串内的位置。 参数名: length 请问症结所在?谢谢 |
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 13:02:00 -- 初学者,不能说编写,应该是照本宣科教程帮助里的! |
-- 作者:有点甜 -- 发布时间:2014/4/2 13:45:00 -- 这句代码错了
idx = CInt(max.Substring(12,4)) + 1 \'获得最大单据编号的后四位顺序号,并加1
你的供应商代码固定是几位?算一下,改一下12这个值 |
-- 作者:狐狸爸爸 -- 发布时间:2014/4/2 14:30:00 -- 具体数字要根据供应商代码的长度来确定,根据你的代码,应该是供应商代码的长度加上8. 如果供应商代码长度是变化的,那么将:
idx = CInt(max.Substring(12,4)) + 1
改为:
idx = CInt(Right(max,4)) + 1
这要就通用了
实在搞不定,就将这个表发上来,大家帮你看一下。 [此贴子已经被作者于2014-4-2 14:31:24编辑过]
|
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 20:13:00 -- 专家,我的编码是这样的:SQ-201404-0000 SQ是供应商代码:固定2位 201404是时间代码,类似于:yyyy/mm 后四位是顺序号:0001-9999 加上两个破折号一共是14位 我把12改成2,出来的编号就成了:SQ-201404--0020,顺序号不对不说,还多出个破折号
|
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 20:16:00 -- 狐狸爸爸,感谢技术支持,但是把您的提示复制到我的代码后出现这样的问题: 第一个顺序号:SQ-201404-0001 第二个顺序号:SQ-201404-0000 ...... 您认为是什么情况呢?
|
-- 作者:有点酸 -- 发布时间:2014/4/2 20:19:00 -- 千年万语,不如上传个例子。 |
-- 作者:有点甜 -- 发布时间:2014/4/2 20:38:00 -- 把这句代码
idx = CInt(max.Substring(12,4)) + 1
改为:
idx = CInt(Right(max,4)) + 1
或者
idx = CInt(max.Substring(10,4)) + 1 |
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 21:26:00 -- 这回成了,我引用的是您这段代码: idx = CInt(max.Substring(10,4)) + 1
感谢,感谢!
|
-- 作者:CBSLULU33 -- 发布时间:2014/4/2 21:26:00 -- 在大家的帮助下,终于解决了,感谢,感恩! |