以文本方式查看主题

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

--  作者:pfj511
--  发布时间:2012/12/7 21:42:00
--  [求助]自动编号 已上传附件

 

项目名称 + 年份 + 编号

 

例如

HH12-1               2012年第1份

HH12-2               2012年第2份

HH12-3               2012年第3份

HH13-1               2013年第1份

HH13-2               2013年第2份

HH14-1               2013年第1份

 

 

 

目前没有考虑到跳年编号问题; 简单用表达式: 项目编号 +SubString(Convert(委托日期,\'System.String\'),3,2)+\'-\' + Convert([_Identify], \'System.String\')

 

编号依据录入日期自动生成,编号依次+1  跳过年份编号归1 重新递加

 

如此请问 表达式 或者代码 如何实现? 感谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动编号.rar

[此贴子已经被作者于2012-12-9 22:37:26编辑过]

--  作者:lin_hailun
--  发布时间:2012/12/8 10:10:00
--  
 这种的话,需要通过代码去完成的。可以先参考一下帮助。不行的话,就上传例子帮你实现。

 http://www.foxtable.com/help/topics/2403.htm
--  作者:pfj511
--  发布时间:2012/12/8 23:50:00
--  
自动编号  样品编号  委托日期
 TH12-1   TH          2012-2-15
  TH12-2   TH         2012-5-25
  TH13-1    TH         2013-1-5
   TH13-2   TH         2013-3-9
   TH14-1    TH         2014-5-6
想要实现如上效果
逢跳年 编号 归1  不跳年 编号+1
 
 
If e.DataCol.Name = "委托日期" Then
    If e.DataRow.IsNull("委托日期") Then
        e.DataRow("自动编号") = Nothing
    Else
        Dim y As String = Format(e.DataRow("委托日期"),"yyyy") \'取得编号的年号
        Dim bh As String ="样品编号" & y.SubString(3,2)\'取得编号的前缀
        Dim max As String=e.DataTable.Compute("Max(自动编号)","委托日期 = #" & e.DataRow("委托日期") & "#") \'取得该年的最大自动编号
        Dim idx As Integer
        Dim va As String() = CStr(max).Split("-")
        If e.DataRow("自动编号").StartsWith(bh) = False \'如果编号的前缀不符
            idx = 1 \'否则顺序号等于1
        Else
            idx = CInt(va(1)) + 1 \'获得最大编号的后三位顺序号,并加1
            e.DataRow("自动编号") = bh & "-" & Format(idx,"0000")
        End If
    End If
End If
 
代码哪里写错了 提示 调用目标发生异常 高手帮忙看下 ,谢谢 了 !  另外 代码 里面 我 貌似  少加了行  代码 ,同时要 判断 委托日期 和 样品编号 不为空 才能 运行代码
[此贴子已经被作者于2012-12-8 23:58:42编辑过]

--  作者:lin_hailun
--  发布时间:2012/12/9 0:14:00
--  
 楼主,这样吧,你做一个简单的例子,输入少量数据,上传上来。这样几分钟就可以解决了。

--  作者:lin_hailun
--  发布时间:2012/12/9 0:45:00
--  
你这样试一下吧。

 If e.DataCol.Name = "委托日期" Then
    If e.DataRow.IsNull("委托日期") Then
        e.DataRow("自动编号") = Nothing
    Else
        Dim y As String = Format(e.DataRow("委托日期"),"yyyy") \'取得编号的年号
        Dim bh As String = e.DataRow("样品编号") & y.SubString(3,2)\'取得编号的前缀
        Dim max As String=e.DataTable.Compute("Max(自动编号)","自动编号 like \'" & bh & "*\'") \'取得该年的最大自动编号
        Dim idx As Integer

        If max = "" \'如果编号的前缀不符
            idx = 1 \'否则顺序号等于1
        Else
            Dim va As String() = CStr(max).Split("-")
            idx = CInt(va(1)) + 1 \'获得最大编号的后三位顺序号,并加1
            e.DataRow("自动编号") = bh & "-" & Format(idx,"0000")
        End If
    End If
End If

--  作者:pfj511
--  发布时间:2012/12/9 16:48:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动编号.rar

上传了附件 帮忙看下 谢谢!


--  作者:lin_hailun
--  发布时间:2012/12/10 10:14:00
--  
 Ok了,请看附件。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动编号.table



--  作者:pfj511
--  发布时间:2012/12/10 21:50:00
--  
非常感谢! 林你太厉害了!