Foxtable(狐表)用户栏目专家坐堂 → [求助]自动编号的生成求助。


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

主题:[求助]自动编号的生成求助。

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
[求助]自动编号的生成求助。  发帖心情 Post By:2014/12/10 12:10:00 [只看该作者]

临时版本跟踪表有需求编号,临时版本编号,客户,博达机型,状态列。

需求编号的格式是YYYYMM3位流水号。如201412111.

现在想做的是临时版本编号为MM3位需求编号的流水号_YYYY。如:12111_2014.

1.当新增行的客户和博达机型在数据库已经存在,且状态为Bound or Confirming  or Nopass 时,临时版本编号等于之前已分配的最大编号。(认为12111_2014比12110_2014大)

2.当新增行的客户和博达机型在数据库已经存在,且状态为除这些Bound and Confirming and Confirmed and Nopass 之外的状态时,临时版本编号等于MM3位需求编号的流水号_YYYY

3.当新增行的客户和博达机型在数据库是首次出现,临时版本编号等于YY3位需求编号的流水号_YYYY

下面这段代码改怎么修改才能实现需求。

Dim d As Date = Date.Today
Dim m As String = Format(d,"MM")
Dim y As String = Format(d,"yyyy")
Dim max As String
Dim idx As Integer
max = e.DataTable.SQLCompute("Max(临时版本编号)","SubString(临时版本编号,0,2) = '" & m & "'  And SubString(临时版本编号,5,5) = '-" & y & "'")

max = e.DataTable.SQLCompute("Max(临时版本编号)","SubString(临时版本编号,0,2) = '" & m & "'  And SubString(临时版本编号,5,5) = '-" & y & "'")
If max > "" Then
    idx = CInt(max.Substring(e.DataRow("需求编号").Length,-3))
    e.DataRow("临时版本编号") = m & Format(idx,"000") & "_" & y
Else
    If DataCol.Name = "客户" AndAlso DataCol.Name = "博达机型"  Then
        If e.NewValue Is Nothing Then
            e.DataRow("临时版本编号") = Nothing
        Else
            Dim dr As DataRow
           dr = DataTables("临时版本跟踪表").SQLFind("[客户] = '" & e.NewValue & "' andalso [博达机型] = '" & e.NewValue & "' and [状态] = 'Bound' or [状态] = 'Confirming' or [状态] = 'Nopass'" )
            If dr IsNot Nothing Then
                e.DataRow("临时版本编号") = dr("临时版本编号")
            End If
        End If
    End If
End If

e.DataRow.Save
Tables("临时版本跟踪表").Sort = "需求编号 DESC"

[此贴子已经被作者于2014-12-10 13:15:26编辑过]

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


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

 上传例子。


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 14:42:00 [只看该作者]

以下是引用有点甜在2014-12-10 14:15:00的发言:

 上传例子。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:临时版本跟踪系统26.rar


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 15:20:00 [只看该作者]

以下是引用liujywwy在2014-12-10 14:42:00的发言:

 下载信息  [文件大小:286.5 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:临时版本跟踪系统26.rar

有点甜老师帮我看看呗,一直在等。呵呵。


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


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

 你的逻辑上有问题,新增行的时候,你的 客户,博达机型,状态列 还没有填入,

 

 怎么可能比较得出编号?你是想修改客户等信息的时候再生成编号?


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


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

 再有,你的1、2、3有什么区别?最后生成的时候,编号列,肯定是会重复的,这是你的初衷么

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


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


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 16:02:00 [只看该作者]

以下是引用有点甜在2014-12-10 15:51:00的发言:

 你的逻辑上有问题,新增行的时候,你的 客户,博达机型,状态列 还没有填入,

 

 怎么可能比较得出编号?你是想修改客户等信息的时候再生成编号?

哦。这个事情我没说。

补上:还有另外一个表,需求主表,在需求主表勾选“审核通过”,会在临时版本跟踪表自动增加一行,新增行的客户,博达机型的值都会从需求明细表获取。

If r.DataRow.GetChildRows("临时版本跟踪表").Count = 0 Then
  Dim dr As DataRow = DataTables("临时版本跟踪表").AddNew()
 dr("需求编号") = r("需求编号")
  End If

 

If e.DataCol.Name = "需求编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("客户") = Nothing
        e.DataRow("博达机型") = Nothing
        e.DataRow("需求提交时间") = Nothing
        e.DataRow("技术支持邮箱") = Nothing
        e.DataRow("研发邮箱") = Nothing
        e.DataRow("客户期望交期") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("需求明细表").Find("[需求编号] = '" & e.NewValue & "'")
        If dr IsNot Nothing
            e.DataRow("客户") = dr("客户")
            e.DataRow("博达机型") = dr("博达机型")
            e.DataRow("需求提交时间") = dr("需求提交时间")
            e.DataRow("技术支持邮箱") = dr("技术支持邮箱")
            e.DataRow("研发邮箱") = dr("研发邮箱")
            e.DataRow("客户期望交期") = dr("版本期望交期")
        End If
    End If
End If

[此贴子已经被作者于2014-12-10 16:19:01编辑过]

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 16:13:00 [只看该作者]

以下是引用有点甜在2014-12-10 15:58:00的发言:
 再有,你的1、2、3有什么区别?最后生成的时候,编号列,肯定是会重复的,这是你的初衷么

当新增行的客户,博达机型和已有的数据库内的是同一个客户,同一博达机型,并且已有数据的最大临时版本编号的行的状态处于Bound或者Confirming时,那么新增行的临时版本编号同已有数据的最大编号。

当新增行的客户,博达机型在已有数据库内没有找到同一客户,同一机型,那么新增行的临时版本编号为MM3位流水号_YY,如需求编号为201412001,那么临时版本编号为12001_2014.

也不知道我说清楚了没。


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


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

 那肯定会重复啊老兄

 

12001_2014、12002_2014 等等的值,会重复啊,编号就是去它标注唯一的功能啊


 回到顶部
总数 13 1 2 下一页