以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  自动编号问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=127278)

--  作者:aza520
--  发布时间:2018/11/9 20:54:00
--  自动编号问题
以下代码红色部分显示有错,请问老师该怎么修改

Select e.DataCol.Name
    Case "施工合同段","计量期次"
        If e.DataRow.IsNull("施工合同段") OrElse e.DataRow.IsNull("计量期次")Then
            e.DataRow("计量编号") = Nothing
        Else
            Dim bd As String = e.DataRow("施工合同段")
            Dim qc As String = e.DataRow("计量期次")
            Dim bh As String = e.DataRow("施工合同段") & "-" & e.DataRow("计量期次") & "-" \'生成编号的前缀
            If e.DataRow("计量编号").StartsWith(bh) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "施工合同段 = \'"& e.DataRow("施工合同段") & "\' And 计量期次 = \'"& e.DataRow("计量期次") " & bd & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(计量编号)",flt) \'取得
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(6,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("计量编号") = bh & Format(idx,"000")
            End If
        End If
End Select

--  作者:aza520
--  发布时间:2018/11/9 20:55:00
--  
想生成这样的编号:No.2-01-001,分别对应:施工合同段-计量期次-编号
--  作者:有点蓝
--  发布时间:2018/11/9 21:09:00
--  
flt = "施工合同段 = \'" & e.DataRow("施工合同段") & "\' And 计量期次 = \'" & e.DataRow("计量期次") "\' and _Identify <> " & e.DataRow("_Identify")
--  作者:aza520
--  发布时间:2018/11/10 17:56:00
--  
老师,还是显示以下错误

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


--  作者:有点甜
--  发布时间:2018/11/11 9:50:00
--  

改成

 

flt = "施工合同段 = \'" & e.DataRow("施工合同段") & "\' And 计量期次 = \'" & e.DataRow("计量期次") & "\' and _Identify <> " & e.DataRow("_Identify")


--  作者:aza520
--  发布时间:2018/11/11 10:34:00
--  
甜老师,根据你的意见修改代码可以生成编号,但是新增行的时候,生成的编号也是001,没有按顺序生成002,我是每新增一行才在计量期次列录入计量期次的
--  作者:有点甜
--  发布时间:2018/11/11 11:26:00
--  

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

 

改成

 

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


--  作者:aza520
--  发布时间:2018/11/11 11:39:00
--  
可以实现了,多谢甜老师。但是还有一个问题,比如我已经增加了4行,自动编号为001~004,如果我把002行删除,怎么实现:003行自动更改编号为002,004则自动更改编号为003.这样的功能能实现吗?
--  作者:有点甜
--  发布时间:2018/11/11 11:45:00
--  

1、生成的编号不建议修改。因为别的地方有可能引用到这个编号,如果你改了,引用的地方(加入有多个表都引用此编号)那就都要修改。

 

2、现在的系统,一般不处理断号。


--  作者:有点甜
--  发布时间:2018/11/11 11:46:00
--  

如果执意要做,参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=85293&replyID=590914&skin=1