Foxtable(狐表)用户栏目专家坐堂 → [求助]自动编号代码修正


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

主题:[求助]自动编号代码修正

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
[求助]自动编号代码修正  发帖心情 Post By:2019/3/27 11:50:00 [只看该作者]

各位老师好!这段自动编号的代码想改为“不判断、不获取月的第一天和最后一天。将按月获取最大工号,改为获取全部最大工号(也就是全部的最大顺序号),最后生成的[工号]为:单位编码+工作日期[yyyyMM]+00000(5位顺序码)”。请老师帮助。谢谢


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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/3/27 12:46: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 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 = "[_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(工号)",flt) '取得该月的相同单位编码的最大工号
                If max > "" Then '如果存在最大工号
                    idx = CInt(max.Substring(bh.length, 4)) + 1 '获得最大工号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("工号") = bh & Format(idx,"0000")
            End If
        End If
End Select


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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 13:46:00 [只看该作者]

谢谢老师!将老师的代码复制到表“DataColChanged”事件,运行出错如图:

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20190327134139.png
图片点击可在新窗口打开查看

麻烦老师再看一下,是那里不对。谢谢!
[此贴子已经被作者于2019/3/27 13:48:02编辑过]

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 14:45:00 [只看该作者]

谢谢教师指导!是我的问题(原有工号的格式和代码中的格式不一至),现已解决。再次感谢教师!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/3/27 15:12: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 bh As String = e.DataRow("单位编码") & "-" & Format(d,"yyyyMM") & "-" '生成编号的前缀
            If e.DataRow("工号").StartsWith(bh) = False '如果工号前缀不符
                Dim flt As String
                flt = "[_Identify] <> " & e.DataRow("_Identify")
                Dim idx As Integer = e.DataTable.Compute("Max(顺序号)",flt) '取得该月的相同单位编码的最大工号
                idx += 1
                e.DataRow("工号") = bh & Format(idx,"0000")
                e.DataRow("顺序号") = idx
            End If
        End If
End Select

[此贴子已经被作者于2019/3/27 15:12:38编辑过]

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 15:30:00 [只看该作者]

老师好!代码出现重复编号,不知原因,请老师再给看看(附实例附件)。谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动生成编号问题.rar



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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 15:49:00 [只看该作者]

老师好!加入辅佐列【顺序号】处理后,只要是“单位编码”不变,是能按顺序往下一直编号。但只要单位编码一变(比如说调动单位)其原有的顺序号就跟着娈了。但我想要的效果是:只要首次在增加人员时赋予其后四位顺序号后,就是终身的不可改变。其在调动单位时,只是变动单位编码,其首次赋予的“yyyyMM-0001”永远不变。还得麻烦老师再给修正一下代码。谢谢!

另外请教老师,辅佐列【顺序号】能不要吗?谢谢!
[此贴子已经被作者于2019/3/27 15:51:30编辑过]

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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 16:17:00 [只看该作者]

老师好!麻烦再帮助指导一下。谢谢。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/3/27 16:28:00 [只看该作者]

 

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

 


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


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/3/27 18:59:00 [只看该作者]

谢谢老师指导。

 回到顶部