以文本方式查看主题

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

--  作者:侯爱华
--  发布时间:2017/9/19 12:03:00
--  关于自动编号的问题
\'需求说明:
\'给在客户交易表(YW_XSYW_KHJY)中对客户交易编号字段:KHJY_CODE字段自动进行编号,编号形式类似:JY2016-000001234
\'编号方法是:JY+项目编号(LXTZ_CODE)中的年份(e.DataROW("LXTZ_CODE").SubString(5,4)),加上-号,加上9位定长顺序号,000000001

If e.DataRow.IsBull("KHJY_NAME") OrElse e.DataRow.IsNull("LXTZ_CODE") Then
    e.DataRow("KHJY_CODE") = Nothing
Else
    Dim lb As String = "JY"
    Dim max As String
    Dim idx As Integer
    Dim year As String = e.DataRow("LXTZ_CODE").SubString(4,4)
    lb = lb & year & "-"
    max = e.DataTable.Computer("Max(KHJY_CODE)",lb And [_Identify] <> &e.DatatRow("_Identify")) \'取得该年编号的最大值
    If max > "" Then \'如果有最大编号
        idx = CInt(max.SubString(7,9) + 1
    Else
        idx = 1
    End If
    e.DataRow("KHJY_CODE") = lb & Format(idx,"000000000")
End If

--  作者:有点甜
--  发布时间:2017/9/19 12:07:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/2403.htm

 

如果还有问题,尽量做个例子发上来测试。


--  作者:xh2207
--  发布时间:2017/9/19 12:10:00
--  

参考下

 

 

流水号,以DH-年统计单据
If e.DataCol.Name = "订货日期" Then
    If e.DataRow.IsNull("订货日期") Then
        e.DataRow("流水号") = Nothing
    Else
        Dim d As Date = e.DataRow("订货日期")
        Dim y As Integer = d.Year
        Dim fd As Date = New Date(y,1,1) \'获得该年的第一天
        Dim ld As Date =  new Date(y,12,31) \'获得该年的最后一天
        Dim bh As String = "DH-" & Format(d,"yyyy") \'生成编号的前4位,4位年.
        If e.DataRow("流水号").StartsWith(bh) = False \'如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(流水号)","订货日期 >= #" & fd & "# And 订货日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该年的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(8,4)) + 1 \'获得最大编号的后三位顺序号,并加1,DH-201701-XXX
            Else
                idx = 1 \'否则顺序号等于1
            End If
            e.DataRow("流水号") =  bh & "-" & Format(idx,"0000")
        End If
    End If
End If


--  作者:侯爱华
--  发布时间:2017/9/19 12:12:00
--  
删掉了这个图片
[此贴子已经被作者于2017/9/19 12:38:56编辑过]

--  作者:侯爱华
--  发布时间:2017/9/19 12:37:00
--  
这是上传的附件,请查收
这是做测试的例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test01.foxdb


--  作者:有点甜
--  发布时间:2017/9/19 12:52:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test01.foxdb


--  作者:侯爱华
--  发布时间:2017/9/19 13:01:00
--  
请教版主,为什么要在外面加上 Select case语句呢?这么做的用处是什么呢?


--  作者:有点甜
--  发布时间:2017/9/19 13:03:00
--  
以下是引用侯爱华在2017/9/19 13:01:00的发言:
请教版主,为什么要在外面加上 Select case语句呢?这么做的用处是什么呢?

 

判断列名,修改其他列,就不会触发代码

 

http://www.foxtable.com/webhelp/scr/1522.htm

 


--  作者:侯爱华
--  发布时间:2017/9/19 13:19:00
--  
学习了。那请教一下,对于跨表引用也要先判断字段吗?


--  作者:侯爱华
--  发布时间:2017/9/19 13:21:00
--  
\'根据客户简称KHTZ_NAME,自动填写客户编码KHTZ_CODE,客户IDYW_KHYY_KHTZ_ID,和客户全称KHTZ_KHQZ
If e.DataCol.Name = "KHTZ_NAME" Then
    Dim nms() As String = {"KHTZ_CODE","YW_KHYY_KHTZ_ID","KHTZ_KHQC"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("YW_KHYY_KHTZ").Find("[KHTZ_NAME] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If

比如这样的语句,也是加上select case语句好吗?