Foxtable(狐表)用户栏目专家坐堂 → 编号重复


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

主题:编号重复

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


加好友 发短信
等级:狐精 帖子:3223 积分:21401 威望:0 精华:0 注册:2016/3/28 16:57:00
编号重复  发帖心情 Post By:2020/1/13 15:50:00 [只看该作者]

老师,我生成申请单号,以下代码还有出现重复情况,请老师看看怎么处理?

生成申请单号编码(代码放在保存按钮中):

    If a.IsNull("申请单号") Then
        a("登记人") = _UserXingMing
        a("登记日期") = Functions.Execute("服务器时间")
        a("申请单号") = Functions.Execute("委托支付编码")
        a("审批状态") = "待财务部制单审批"
        a("ID") = Guid.NewGuid.TOstring()
        a("登记状态") = True
        a.save

 

生成申请单号的内部函数如下:

''生成申请单号
Dim dt As DataTable = DataTables("委托支付管理")
Dim dr As Row = Tables("委托支付管理").Current
If dr.IsNull("登记日期") Then
    dr("申请单号") = Nothing
Else
    Dim d As Date = dr("登记日期")
    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 = Format(d,"yyyyMM") '生成申请单号的前6位,4位年,2位月.
    If dr("申请单号").StartsWith(bh) = False '如果申请单号的前6位不符
        Dim  max As String
        Dim  idx As  Integer
        max = dt.sqlCompute("Max(申请单号)","登记日期 >= '" & fd & "' And 登记日期 <= '" & ld & "' And [_Identify] <> " & dr("_Identify")) '取得该月的最大申请单号
        If  max > "" Then '如果存在最大申请单号
            idx = CInt(max.Substring(7,3)) + 1  '获得最大申请单号的后三位顺序号,并加1
        Else
            idx = 1 '否则顺序号等于1
        End  If
        dr("申请单号") = bh & "-" & Format(idx,"000")
    End If
End  If
Return dr("申请单号")

 

 

[此贴子已经被作者于2020/1/13 15:51:20编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/13 16:05:00 [只看该作者]

单机是没有问题。多人并发使用这种用法肯定会有重复的。多客户端的情况下需要有一个服务统一处理编号:http://www.foxtable.com/webhelp/topics/3008.htm

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


加好友 发短信
等级:狐精 帖子:3223 积分:21401 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/1/13 16:25:00 [只看该作者]

之前做过一个这样的确实能解决,主要是有多个表都这样的话,每次还需要更新服务端就有点繁琐。

我每次也是生成后马上保存都不能解决这样的问题,并发也不是很多啊

我也不想断号。

[此贴子已经被作者于2020/1/13 16:30:38编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/13 17:13:00 [只看该作者]

注意是要搞懂帮助处理问题的逻辑,而不是就抄代码。

首先需要有一个统一的地方生成编号,才不会有并发冲突
其次可以建一个专门的编号表,存储所有表的最新编号
最后结合帮助的用法,其实就是结合http://www.foxtable.com/webhelp/topics/1994.htmhttp://www.foxtable.com/webhelp/topics/3008.htm用法,相当于把第一个帮助的用法从客户端移到服务端处理,第二个帮助保留消息通讯那部分,生成编号的用法改为使用第一个帮助的用法

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



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


加好友 发短信
等级:狐精 帖子:3223 积分:21401 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2020/1/14 9:32:00 [只看该作者]

老师,这种方式新增时就会有编号,我新增可能出现撤销的情况,有可能会断号,这种怎么处理呢?

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/14 9:52:00 [只看该作者]

我只是做个例子,能不能不要那么死板!在什么地方生成编号根据自己需要使用!

断号这种问题我没有办法解决。

 回到顶部