以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  流水号如何从头开始编  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132474)

--  作者:yfy13338431925
--  发布时间:2019/3/22 15:16:00
--  流水号如何从头开始编

老师,模仿帮助文件做了一下可生成1-1-1的

自动编号代码

编码规则1-1代表试验项目号,最后一位是同一个试验项目在相同试验地区的流水号,从1开始编起

同一个实验项目在不同地区试验,流水号从头开始编

如下图


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

 如何在下面的代码中,加入改变试验地区后,流水号又从头开始编 语句

 

Select e.DataCol.Name
    Case "试验项目号"
        If e.DataRow.IsNull("试验项目号") Then
            e.DataRow("分类号") = Nothing
        Else
            Dim lb As String = e.DataRow("试验项目号")
            If e.DataRow("分类号").StartsWith(lb) = False \'如果单据分类号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(分类号)","试验项目号 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该试验项目号的最大分类号
                If max > "" Then \'如果存在最大分类号
                    idx = CInt(max.Substring(lb.Length+1)) + 1 \'获得最大分类号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("分类号") = lb & "-"& idx
            End If
        End If
End Select


--  作者:有点蓝
--  发布时间:2019/3/22 20:12:00
--  
 idx = CInt(max.Substring(lb.Length-1)) + 1
--  作者:yfy13338431925
--  发布时间:2019/3/22 20:29:00
--  

老大,结果不对啊

 


--  作者:yfy13338431925
--  发布时间:2019/3/22 20:34:00
--  

[此贴子已经被作者于2019/3/22 20:37:15编辑过]

--  作者:yfy13338431925
--  发布时间:2019/3/22 20:37:00
--  

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

--  作者:有点蓝
--  发布时间:2019/3/22 21:34:00
--  
还和档号有关,那又是另外一种规则啊。麻烦一次性把问题说清楚好吗。这个和1楼的问题完全不是一回事

Select e.DataCol.Name
    Case "试验项目号","档号"
        If e.DataRow.IsNull("试验项目号") OrElse e.DataRow.IsNull("档号") Then
            e.DataRow("分类号") = Nothing
        Else
            Dim lb As String = e.DataRow("试验项目号")
            \'If e.DataRow("分类号").StartsWith(lb) = False ore \'如果单据分类号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(分类号)","试验项目号 = \'" & lb & "\' and 档号 = \'" & e.DataRow("档号") & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该试验项目号的最大分类号
                If max > "" Then \'如果存在最大分类号
                    idx = CInt(max.Substring(lb.Length+1)) + 1 \'获得最大分类号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("分类号") = lb & "-"& idx
            \'End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2019/3/22 21:35:00
--  
您这种用法,没有明确的界限,所以不能在已经有的数据上重置列。需要清空"分类号"才能重置列
--  作者:yfy13338431925
--  发布时间:2019/3/22 22:06:00
--  

把实例发给您。蓝老师你帮我看看,第四列是正确的结果

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目33.table


--  作者:有点蓝
--  发布时间:2019/3/22 22:22:00
--  
Select e.DataCol.Name
    Case "试验项目号","试验地区"
        If e.DataRow.IsNull("试验项目号") OrElse e.DataRow.IsNull("试验地区") Then
            e.DataRow("分类号") = Nothing
        Else
            Dim lb As String = e.DataRow("试验项目号")
            \'If e.DataRow("分类号").StartsWith(lb) = False ore \'如果单据分类号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(分类号)","试验项目号 = \'" & lb & "\' and 试验地区 = \'" & e.DataRow("试验地区") & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该试验项目号的最大分类号
                If max > "" Then \'如果存在最大分类号
                    idx = CInt(max.Substring(lb.Length+1)) + 1 \'获得最大分类号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("分类号") = lb & "-"& idx
            \'End If
        End If
End Select