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


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

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

帅哥哟,离线,有人找我吗?
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
liujywwy
  2楼 | 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
  3楼 | 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

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


 回到顶部
帅哥哟,离线,有人找我吗?
liujywwy
  4楼 | 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
  5楼 | 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.

也不知道我说清楚了没。


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 16:33:00 [显示全部帖子]

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

 那肯定会重复啊老兄

 

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

是会重复啊。

但只有找到同一个客户,同一机型,并且最大的临时版本编号行的状态处于Bound和Confirming时,新增行的临时版本编号才等同已有的同一客户同一机型的最大临时版本编号。

比如,已有客户为aaa,机型是123,并且状态是Bound。临时版本编号为12002_2014.

那么当新增行的客户也为aaa,机型也为123,这时临时版本编号就应该为12002_2014.

如果新增行的客户为bbb,机型为456,需求编号为201412003,在临时版本跟踪表并没有找到客户客户也为bbb,机型为456 的行(除新增行),那么新增行的临时版本编号就为12003_2014.


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4034 威望:0 精华:0 注册:2014/6/23 10:27:00
  发帖心情 Post By:2014/12/10 17:42:00 [显示全部帖子]

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

 汗,这个意思?Datacolchanged事件加入如下代码,DataRowAdded事件的代码记得去除

 

If e.DataCol.Name = "客户" OrElse e.DataCol.Name = "博达机型" Then
    If e.DataRow.IsNull("客户") OrElse e.DataRow.IsNull("博达机型") Then
        e.DataRow("临时版本编号") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("临时版本跟踪表").SQLFind("[客户] = '" & e.DataRow("客户") & "' and [博达机型] = '" & e.DataRow("博达机型") & "' and ([状态] = 'Bound' or [状态] = 'Confirming' or [状态] = 'Nopass')")
        If dr IsNot Nothing Then
            e.DataRow("临时版本编号") = dr("临时版本编号")
        Else
            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(临时版本编号,1,2) = '" & m & "'  And SubString(临时版本编号,6,5) = '_" & y & "'")
            'If max > "" Then
                idx = right(e.DataRow("需求编号"),3)
                e.DataRow("临时版本编号") = m & Format(idx,"000") & "_" & y
            'Else
             '   e.DataRow("临时版本编号") = m & Format(1,"000") & "_" & y
            'End If
        End If
    End If
    e.DataRow.Save
End If

是啊。就是这个意思啊。看来我表述不行啊。呵呵。

 


 回到顶部