Foxtable(狐表)用户栏目专家坐堂 → 请教内部函数编号代码


  共有3088人关注过本帖树形打印复制链接

主题:请教内部函数编号代码

帅哥哟,离线,有人找我吗?
13315253800
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
请教内部函数编号代码  发帖心情 Post By:2024/9/7 12:30:00 [显示全部帖子]

请教内部函数自动编号代码,flt处有问题,敬请老师帮助修改一下
'按日期类别自动编号
Dim e = args(0)'定义参数,Args(0)
Dim 类别 As String = args(1) 'Args(1)
Dim 编号 As String = args(2) 
Dim 代码 As String = args(3) 
Select e.DataCol.Name 
    Case 日期, 类别
        If e.DataRow.IsNull(日期) OrElse e.DataRow.IsNull(类别) Then
            e.DataRow(编号) = Nothing
        Else
            Dim d As Date = e.DataRow(日期)
            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 = e.DataRow(类别) & "-" & Format(d, "yyyyMM") & "-" '生成编号的前缀
            If e.DataRow(编号).StartsWith(bh) = False Then'如果编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = 类别 & " = '" & e.DataRow("类别") & "' And 日期 & " >= #" & fd & "# And " & 日期 & " <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(编号)", flt) '取得该月的相同分类的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(12, 4)) + 1 '获得最大编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow(编号) = bh & Format(idx, "0000")
            End If
        End If 
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 8:23:00 [显示全部帖子]

flt = 类别 & " = '" & e.DataRow("类别") & "' And 日期 & >= #" & fd & "# And " & 日期 & " <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")

.NET Framework 版本:4.0.30319.36543
Foxtable 版本:2022.8.18.1
错误所在事件:自定义函数,按日期类别编号
详细错误信息:
Exception has been thrown by the target of an invocation.
Syntax error: Missing operand before '>=' operator.


 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 9:13:00 [显示全部帖子]

图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 9:29:00 [显示全部帖子]

改为
flt = 类别 & " = '" & e.DataRow("类别") & "' And 日期 >= #" & fd & "# And 日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")
第一行出现编号,第二行又出现错误提示
.NET Framework 版本:4.0.30319.36543
Foxtable 版本:2022.8.18.1
错误所在事件:自定义函数,按日期类别编号
详细错误信息:
Exception has been thrown by the target of an invocation.
Index and length must refer to a location within the string.
Parameter name: length


 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 9:41:00 [显示全部帖子]

日期后面去掉任何一个“,都无法保存

 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 9:56:00 [显示全部帖子]

修改了一下,编号不增加,请蓝老师指导一下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 10:14:00 [显示全部帖子]

Dim e = args(0)'定义参数,Args(0)表示第一个参数
Dim 类别 As String = args(1) 'Args(1)表示第二个参数,类别列名称,以下均无双引号,类别为变动的列
Dim 日期 As String = args(2) '第三个参数,编号列名称
Dim 编号 As String = args(3) '第四个参数,编号列名称,以下均无双引号
Select e.DataCol.Name 
    Case 日期, 类别
        If e.DataRow.IsNull(日期) OrElse e.DataRow.IsNull(类别) Then
            e.DataRow(编号) = Nothing
        Else
            Dim d As Date = e.DataRow(日期)
            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 = e.DataRow(类别) & "-" & Format(d, "yyyyMM") & "-" '生成编号的前缀
            If e.DataRow(编号).StartsWith(bh) = False Then'如果编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String 
                flt = 类别 & " = '" & e.DataRow("类别") & "' And 日期 >= #" & fd & "# And 日期 <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(" & 编号 & ")", flt) '取得该月的相同分类的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(9, 4)) + 1 '获得最大编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow(编号) = bh & Format(idx, "0000")
            End If
        End If 
End Select
蓝老师我也上传了实例

 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 10:17:00 [显示全部帖子]

蓝老师,我找到原因了已解决

 回到顶部
帅哥哟,离线,有人找我吗?
13315253800
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:603 积分:4392 威望:0 精华:0 注册:2018/1/3 16:03:00
  发帖心情 Post By:2024/9/9 15:55:00 [显示全部帖子]

谢谢蓝老师,我用内部函数按分类和分组编号,用下面的代码总是一个编号,请指导一下
flt = 分类 & " = '" & e.DataRow(分类) & " And 分组 & = " & e.DataRow(分组) & "' And [_Identify] <> " & e.DataRow("_Identify")
...
idx = CInt(max.Substring(max.length - 2)) + 1

 回到顶部