以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请教一个自定义函数怎么代替e属性  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=122871)

--  作者:饭浇盖
--  发布时间:2018/8/3 13:30:00
--  请教一个自定义函数怎么代替e属性
Dim data As DataTable=args(0)\'设置一个参数接受表
Dim title As String=args(1)\'设置一个参数接受字段
Dim start As String = args(2)\'设置一个参数接受开始的字母  如KP
Dim result As String
Dim d As Date = Date.Today
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim fd As Date = New Date(y,m,1) \'获得该月的第一天
Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
Dim bh As String = title & Format(d,"yyyyMMdd") \'生成编号的前6位,4位年,2位月.
If e.DataRow(title).StartsWith(bh) = False \'如果编号的前6位不符
    Dim max As String
    Dim idx As Integer
    max = e.DataTable.Compute("Max(开票流水单号)","日期 >= #" & fd & "# And 日期 <= #" & ld & "# And [开票流水单号] <> \'" & e.DataRow(title) & "\'") \'取得该月的最大编号
    If max > "" Then \'如果存在最大编号
        idx = CInt(max.SubString(10,4)) + 1 \'获得最大编号的后三位顺序号,并加1
        MessageBox.show(idx & "成功")
    Else
        idx = 1 \'否则顺序号等于1
        MessageBox.show("2")
    End If
    result =  bh  & Format(idx,"0000")
End If
Return result





老师啊,我想设置一个自动编号的自定义函数 放在事件中 ,请问e.datatable或者 e.datarow  怎么用args代替呢,还有就是max(开票流水单号),这个开票流水单号字段是没有双引号,我需要用title这个参数代替他,请问怎么设置??

--  作者:饭浇盖
--  发布时间:2018/8/3 14:08:00
--  

 

1、调用函数的时候,把e参数传递进去;

 

2、函数里面获取e参数

 

Dim e = args(0)


--  作者:饭浇盖
--  发布时间:2018/8/3 14:12:00
--  
Max(开票流水单号)  现在就是一个问题  这里面的字段应该怎么用变量代替
--  作者:饭浇盖
--  发布时间:2018/8/3 14:33:00
--  
会了,用动态合成表达式。
Dim e=args(0)\'设置一个参数接受表
Dim title As String=args(1)\'设置一个参数接受字段
Dim start As String =args(2)\'设置一个参数接受开始的字母  如KP
Dim result As String
Dim d As Date = Date.Today
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim fd As Date = New Date(y,m,1) \'获得该月的第一天
Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
Dim bh As String = start & Format(d,"yyyyMMdd") \'生成编号的前6位,4位年,2位月.
If e.DataRow(title).StartsWith(bh) = False \'如果编号的前6位不符
    Dim max As String
    Dim idx As Integer
    max = e.DataTable.Compute("Max(" & title & ")","日期 >= #" & fd & "# And 日期 <= #" & ld & "# And " & title & "<> \'" & e.DataRow(title) & "\'") \'取得该月的最大编号
    If max > "" Then \'如果存在最大编号
        idx = CInt(max.SubString(10,4)) + 1 \'获得最大编号的后三位顺序号,并加1
        MessageBox.show(idx & "成功")
    Else
        idx = 1 \'否则顺序号等于1
        MessageBox.show("2")
    End If
    result =  bh  & Format(idx,"0000")
End If
Return result

--  作者:有点甜
--  发布时间:2018/8/3 14:33:00
--  
以下是引用饭浇盖在2018/8/3 14:08:00的发言:

 

1、调用函数的时候,把e参数传递进去;

 

2、函数里面获取e参数

 

Dim e = args(0)

 

你这个做了没有,把e参数传递进去了没有?


--  作者:有点甜
--  发布时间:2018/8/3 14:34:00
--  
以下是引用饭浇盖在2018/8/3 14:12:00的发言:
Max(开票流水单号)  现在就是一个问题  这里面的字段应该怎么用变量代替

 

改成

 

max = e.DataTable.Compute("Max(" & title & ")","日期 >= #" & fd & "# And 日期 <= #" & ld & "# And [" & title & "] <> \'" & e.DataRow(title) & "\'") \'取得该月的最大编号