以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]参考多列内容的自动编号  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=99079)

--  作者:jumping
--  发布时间:2017/4/12 13:25:00
--  [求助]参考多列内容的自动编号

 

向专家求助:

在下图表中的“收据编号”列按日可以自动生成编号,想实现的功能是:

同一天,同一个身份证号对应的明细的编号要相同的,(如下图中红色区域,编号都为20170329-001)

请问要如何改以下代码:

If e.DataCol.Name = "缴费日期" Then

    If e.DataRow.IsNull("缴费日期") Then

        e.DataRow("收据编号") = Nothing

    Else

        Dim bh As String = Format(e.DataRow("缴费日期"),"yyyyMMdd") \'取得编号的8位前缀

        If e.DataRow("收据编号").StartsWith(bh) = False \'如果编号的前8位不符

            Dim max As String

            Dim idx As Integer

            max = e.DataTable.Compute("Max(收据编号)","缴费日期 = #" & e.DataRow("缴费日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大编号

            If max > "" Then \'如果存在最大编号

                idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的后三位顺序号,并加1

            Else

                idx = 1 \'否则顺序号等于1

            End If

            e.DataRow("收据编号") = bh & "-" & Format(idx,"000")

        End If

    End If

End If


 

多谢了!


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


--  作者:有点色
--  发布时间:2017/4/12 14:21:00
--  
If e.DataCol.Name = "缴费日期" Then
    If e.DataRow.IsNull("缴费日期") Then
        e.DataRow("收据编号") = Nothing
    Else
        Dim bh As String = Format(e.DataRow("缴费日期"),"yyyyMMdd") \'取得编号的8位前缀
        If e.DataRow("收据编号").StartsWith(bh) = False \'如果编号的前8位不符
            Dim fdr As DataRow = e.DataTable.find("缴费日期 = #" & e.DataRow("缴费日期") & "# and 身份证号码 = \'" & e.DataRow("身份证号码") & "\' and 收据编号 is not null And [_Identify] <> " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                e.DataRow("收据编号") = fdr("收据编号")
            Else
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(收据编号)","缴费日期 = #" & e.DataRow("缴费日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("收据编号") = bh & "-" & Format(idx,"000")
            End If
        End If
    End If
End If

--  作者:jumping
--  发布时间:2017/4/12 14:32:00
--  
多谢了!