以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [分享]部分数据加载下自动编号生成方法 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=177789) |
-- 作者:洮沙 -- 发布时间:2022/6/4 10:49:00 -- [分享]部分数据加载下自动编号生成方法 根据帮助文件可以实现简单的自动编号,如下: 现举例: 一、根据帮助,将表DataColChanged事件代码设置为: Select e.DataCol.Name Case "工程代码" If e.DataRow.IsNull("工程代码") Then e.DataRow("单据编号") = Nothing Else Dim bh As String = e.DataRow("工程代码") & "-" \'生成编号的前缀 If e.DataRow("单据编号").StartsWith(bh) = False Then\'如果单据编号前缀不符 Dim max As String Dim idx As Integer Dim flt As String flt = "工程代码 = \'" & e.DataRow("工程代码") & "\' And [_Identify] <> " & e.DataRow("_Identify") max = e.DataTable.Compute("Max(单据编号)", flt) \'取得该月的相同工程代码的最大单据编号 If max > "" Then \'如果存在最大单据编号 idx = CInt(max.Substring(4, 4)) + 1 \'获得最大单据编号的后四位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("单据编号") = bh & Format(idx, "0000") End If End If End Select 生成以下效果编号: 二、部分数据加载情况下会出现的问题及解决办法: 1、取最大编号错误,解决办法可以将红色代码部分修改为: max = e.DataTable.SQLCompute("Max(单据编号)", flt) \'取得该月的相同工程代码的最大单据编号 2、如果是部分数据加载,同时又有未保存数据的情况下,取最大编号同样会出现错误,代码修改为(将max变量改为max1、max2根据不同统计赋值): Select e.DataCol.Name Case "工程代码" If e.DataRow.IsNull("工程代码") Then e.DataRow("单据编号") = Nothing Else Dim bh As String = e.DataRow("工程代码") & "-" \'生成编号的前缀 If e.DataRow("单据编号").StartsWith(bh) = False Then\'如果单据编号前缀不符 Dim idx As Integer Dim flt As String flt = "工程代码 = \'" & e.DataRow("工程代码") & "\' And [_Identify] <> " & e.DataRow("_Identify") Dim max1 As String max1 = e.DataTable.Compute("Max(单据编号)", flt) \'从Table取得该月的相同工程代码的最大单据编号 Dim max2 As String max2 = e.DataTable.SQLCompute("Max(单据编号)", flt) \'从后台取得该月的相同工程代码的最大单据编号 If max1 > "" Then \'如果table存在最大单据编号 If max2 > "" Then \'如果后台存在最大单据编号 idx = Math.Max(CInt(max1.Substring(4, 4)), CInt(max2.Substring(4, 4))) \'比较取最大值 Else idx = CInt(max1.Substring(4, 4)) End If Else If max2 > "" Then \'如果后台存在最大单据编号 idx = CInt(max2.Substring(4, 4)) Else idx = 0 End If End If If idx >= 0 Then idx = idx + 1 \'否则顺序号等于1 End If e.DataRow("单据编号") = bh & Format(idx, "0000") End If End If End Select 此代码适合小白,大神见笑了! |
-- 作者:狐狸爸爸 -- 发布时间:2022/6/5 7:16:00 -- 谢谢分享 |