Foxtable(狐表)用户栏目专家坐堂 → 按年份自动编号


  共有2000人关注过本帖树形打印复制链接

主题:按年份自动编号

帅哥哟,离线,有人找我吗?
txtxtttt1919
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
按年份自动编号  发帖心情 Post By:2017/1/4 18:34:00 [只看该作者]

帮助里的自动编号有按月自动编号的,按日自动编号的,按类型自动编号的,但没有按年自动编号的,举的例子代码看不太懂,哪位老师能直接写个按年自动编号的代码?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/4 19:08:00 [只看该作者]

If e.DataCol.Name = "日期" Then
    If e.DataRow.IsNull("日期") Then
        e.DataRow("编号") = Nothing
    Else
        Dim d As Date = e.DataRow("日期")
        Dim y As Integer = d.Year
        Dim fd As Date = New Date(y,1,1)
        Dim bh As String = Format(d,"yyyy") '生成编号的前6位,4位年,2位月.
        If e.DataRow("编号").StartsWith(bh) = False '如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(编号)","日期 >= #" & fd & "# And 日期 < #" & fd.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该月的最大编号
            If max > "" Then '如果存在最大编号
                idx = CInt(max.Substring(bh.Length,3)) + 1 '获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 '否则顺序号等于1
            End If
            e.DataRow("编号") = bh & "-" & Format(idx,"000")
        End If
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
txtxtttt1919
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
  发帖心情 Post By:2017/1/4 19:16:00 [只看该作者]

很好用,谢谢呀。但max = e.DataTable.Compute("Max(编号)","来文日期 >= #" & fd & "# And 来文日期 < #" & fd.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")) 这句代码应该怎么看?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/4 19:20:00 [只看该作者]

根据下面的条件,取出最大的编号。

 

日期 >= #2017-1-1# and 日期 <= #2018-1-1# and 等于当前行


 回到顶部
帅哥哟,离线,有人找我吗?
txtxtttt1919
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
  发帖心情 Post By:2017/1/4 19:20:00 [只看该作者]

代码好像有点问题,只能生成001呀

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/4 19:23:00 [只看该作者]

改一下

 

If e.DataCol.Name = "日期" Then
    If e.DataRow.IsNull("日期") Then
        e.DataRow("编号") = Nothing
    Else
        Dim d As Date = e.DataRow("日期")
        Dim y As Integer = d.Year
        Dim fd As Date = New Date(y,1,1)
        Dim bh As String = Format(d,"yyyy") '生成编号的前6位,4位年,2位月.
        If e.DataRow("编号").StartsWith(bh) = False '如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(编号)","日期 >= #" & fd & "# And 日期 < #" & fd.AddYears(1) & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该月的最大编号
            If max > "" Then '如果存在最大编号
                idx = CInt(max.Substring(bh.Length+1,3)) + 1 '获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 '否则顺序号等于1
            End If
            e.DataRow("编号") = bh & "-" & Format(idx,"000")
        End If
    End If
End If


 回到顶部
帅哥哟,离线,有人找我吗?
txtxtttt1919
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
  发帖心情 Post By:2017/1/4 19:27:00 [只看该作者]

好像还是不行,只能生成001

 回到顶部
帅哥哟,离线,有人找我吗?
txtxtttt1919
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
  发帖心情 Post By:2017/1/4 19:46:00 [只看该作者]

好像还是不行,只能生成001

 回到顶部
帅哥哟,离线,有人找我吗?
txtxtttt1919
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1178 威望:0 精华:0 注册:2016/10/31 21:07:00
  发帖心情 Post By:2017/1/4 19:48:00 [只看该作者]

删除了之后可以生成,重置列没用。。。。,不过还是可以用了,谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/5 9:44:00 [只看该作者]

以下是引用txtxtttt1919在2017/1/4 19:48:00的发言:

删除了之后可以生成,重置列没用。。。。,不过还是可以用了,谢谢

 

重置列,你要重置的是日期列。


 回到顶部