Foxtable(狐表)用户栏目专家坐堂 → 甜甜,你好, 自动编号问题


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

主题:甜甜,你好, 自动编号问题

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
甜甜,你好, 自动编号问题  发帖心情 Post By:2018/3/22 17:22:00 [只看该作者]

设计了这样一组数据, 比如:

编号                 次数
111 001
111 002
222 001
222 002
222 003
222 004

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

修改为:
Select e.DataCol.Name
    Case "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("次数") = Nothing
        Else
            Dim bh As String = e.DataRow("编号")
            If e.DataRow("次数").StartsWith(bh) = False '如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(次数)","编号 = '" & bh & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max) + 1 '加1
                Else
                    idx = Nothing '否则顺序号等于空
                End If
                e.DataRow("次数") = Format(idx,"000")
            End If
        End If
End Select

但没有实现


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/22 18:06:00 [只看该作者]

Select e.DataCol.Name
    Case "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("次数") = Nothing
        Else
            Dim bh As String = e.DataRow("编号")
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(次数)","编号 = '" & bh & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
            If max > "" Then '如果存在最大编号
                idx = CInt(max) + 1 '加1
            Else
                idx = 1'否则顺序号等于空
            End If
            e.DataRow("次数") = Format(idx,"000")
        End If
End Select

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2018/3/22 18:37:00 [只看该作者]

甜甜太厉害了. 如果单独使用这段代码是完全可行的, 但是我把这段代码加到这个里面,就不行了, 要稍微改动一下哪里呢?


...
...
...
 For Each fdr As DataRow In DataTables("客户数据").Select("固定时间 = '" & e.DataRow("星期") & "'", "固定排序,时间")
'从客户数据里面加载数据到主表里面

        If i = 0 Then
            dr = e.DataRow
        Else
            dr = e.DataTable.AddNew
        End If
        dr("日期") = e.DataRow("日期")
        dr("编号") = fdr("编号")
        dr("支付方式") = fdr("支付方式")
     
Select e.DataCol.Name
    Case "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("次数") = Nothing
        Else
            Dim bh As String = e.DataRow("编号")
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.Compute("Max(次数)","编号 = '" & bh & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
            If max > "" Then '如果存在最大编号
                idx = CInt(max) + 1 '加1
            Else
                idx = 1'否则顺序号等于空
            End If
            e.DataRow("次数") = Format(idx,"000")
        End If
End Select

    i += 1

    Next
    SystemReady = True
    Tables("主表").sort = "日期"
End If


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/22 20:20:00 [只看该作者]

For Each fdr As DataRow In DataTables("客户数据").Select("固定时间 = '" & e.DataRow("星期") & "'", "固定排序,时间")
    '从客户数据里面加载数据到主表里面
   
    If i = 0 Then
        dr = e.DataRow
    Else
        dr = e.DataTable.AddNew
    End If
    dr("日期") = e.DataRow("日期")
    dr("编号") = fdr("编号")
    dr("支付方式") = fdr("支付方式")
   
    If dr.IsNull("编号") Then
        dr("次数") = Nothing
    Else
        Dim bh As String = dr("编号")
        Dim max As String
        Dim idx As Integer
        max = e.DataTable.Compute("Max(次数)","编号 = '" & bh & "' And [_Identify] <> " & dr("_Identify")) '取得该类别的最大编号
        If max > "" Then '如果存在最大编号
            idx = CInt(max) + 1 '加1
        Else
            idx = 1'否则顺序号等于空
        End If
        dr("次数") = Format(idx,"000")
    End If
   
    i += 1
Next

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2018/3/26 15:28:00 [只看该作者]

现在程序要这样设置了, 次数有时要人工修改一下. 然后下一条次数会自动按照上一条次数的数字+1, 而不是用最大次数+1
比如是这样:

编号       次数
111   001
111    002
222  001
222  002
222  003
222  004
222    008 (人工修改了次数)
222    009 (自动按上面的数字+1)
222   010   (同上)

再次谢谢甜甜帮忙:)




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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/26 15:58:00 [只看该作者]

你需要加一个辅助列【人工修改】,如果手动修改,就勾选一下,然后查找数据,排除手动修改的列

 

max = e.DataTable.Compute("Max(次数)","(人工修改 = false or 人工修改 is null) and 编号 = '" & bh & "' And [_Identify] <> " & dr("_Identify")) '取得该类别的最大编号


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/26 16:01:00 [只看该作者]

如果你要计算次数,可以改成这样

 

max = e.DataTable.Compute("count(次数)","编号 = '" & bh & "' And [_Identify] <> " & dr("_Identify")) '取得该类别的最大编号


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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2018/3/26 16:27:00 [只看该作者]

"

如果你要计算次数,可以改成这样

 

max = e.DataTable.Compute("count(次数)","编号 = '" & bh & "' And [_Identify] <> " & dr("_Identify")) '取得该类别的最大编号

"

这个代码还是查找数据记录中最大次数,然后再加1, 不是按照上一条数据里面手动改的次数记录数字加1. 

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/26 16:36:00 [只看该作者]

不明白你说的意思,请上传实例说明。说明操作哪一行数据,然后需要得到什么效果。

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2018/3/26 17:45:00 [只看该作者]

帮我看下附件,谢谢1

 回到顶部
总数 26 1 2 3 下一页