Foxtable(狐表)用户栏目专家坐堂 → 请问老师如何在筛选后仍能找到未筛选前的最大值?发现新问题:同时提交会有重复编号问题


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

主题:请问老师如何在筛选后仍能找到未筛选前的最大值?发现新问题:同时提交会有重复编号问题

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


加好友 发短信
等级:童狐 帖子:279 积分:3155 威望:0 精华:0 注册:2014/2/19 10:32:00
请问老师如何在筛选后仍能找到未筛选前的最大值?发现新问题:同时提交会有重复编号问题  发帖心情 Post By:2021/3/3 9:32:00 [只看该作者]

我在项目事件的LoadUserSetting里面加了过滤条件
If User.Group = "管理人员" Then
    DataTables("项目表").LoadFilter = ""
Else
    DataTables("项目表").LoadFilter = "录入人员 = '" & User.Name & "'"
End If
DataTables("项目表").Load()

然后表“项目表”的表事件DataColChanged里面根据年度找到该年度的最大值,然后加1,但因为筛选过了,只能找到该录入人员名下最大的
Select e.DataCol.Name
    Case "年度批号"
        If e.DataRow.IsNull("年度批号") Then
            e.DataRow("产品批号") = Nothing
        Else
            Dim lb As String = e.DataRow("年度批号")
            If e.DataRow("产品批号").StartsWith(lb) = False '如果单据产品批号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(产品批号)","年度批号 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该年度批号的最大产品批号
                If max > "" Then '如果存在最大产品批号
                    idx = CInt(max.Substring(6,5)) + 1 '获得最大产品批号并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("产品批号") = lb & Format(idx,"00000")
            End If
        End If
End Select
[此贴子已经被作者于2021/3/3 10:32:37编辑过]

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/3 9:34:00 [只看该作者]

Select e.DataCol.Name
    Case "年度批号"
        If e.DataRow.IsNull("年度批号") Then
            e.DataRow("产品批号") = Nothing
        Else
            Dim lb As String = e.DataRow("年度批号")
            If e.DataRow("产品批号").StartsWith(lb) = False '如果单据产品批号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.SQLCompute("Max(产品批号)","年度批号 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该年度批号的最大产品批号
                If max > "" Then '如果存在最大产品批号
                    idx = CInt(max.Substring(6,5)) + 1 '获得最大产品批号并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("产品批号") = lb & Format(idx,"00000")
e.DataRow.save
            End If
        End If
End Select

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


加好友 发短信
等级:童狐 帖子:279 积分:3155 威望:0 精华:0 注册:2014/2/19 10:32:00
  发帖心情 Post By:2021/3/3 9:37:00 [只看该作者]

感谢老师,完美运行

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


加好友 发短信
等级:童狐 帖子:279 积分:3155 威望:0 精华:0 注册:2014/2/19 10:32:00
  发帖心情 Post By:2021/3/3 10:26:00 [只看该作者]

还要请教有点蓝老师,我用两个用户同时输入,如果时间间隔有五秒中,可以按顺序生成最大序列号,如果同时提交,则会产生重复的最大序列号,这种情况怎么办呢?

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/3 10:35:00 [只看该作者]

需要借助服务端控制:http://www.foxtable.com/webhelp/topics/3008.htm

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


加好友 发短信
等级:童狐 帖子:279 积分:3155 威望:0 精华:0 注册:2014/2/19 10:32:00
  发帖心情 Post By:2021/3/3 10:37:00 [只看该作者]

好的,我仔细看看帮助

 回到顶部