Foxtable(狐表)用户栏目专家坐堂 → 计算余数代码问题


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

主题:计算余数代码问题

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


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

sort不会触发上面设置的事件,不同功能对应不同的事件,排序到这些事件处理

排序BeforeSort排序数据前执行
AfterSort排序数据后执行

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/10/9 8:30:00 [只看该作者]

'用于计算余数
Dim Key As Decimal
Dim Index As Integer
Dim Filter As String
Dim r As Row
Index = Math.Min(e.OldIndex, e.NewIndex)
Key = e.Table.Rows(Index)("_SortKey")
r = e.Table.Rows(e.NewIndex)
Filter = "[_SortKey] >= " & Key & " And [物料编号] = '" & r("物料编号") & "'"
e.Table.DataTable.DataCols("出入库数量").RaiseDataColChanged(Filter)
'余数计算结束

上面是放在 aftermoverow 里面的代码,如果要在 aftersort 里面也写入代码,实现 sort 之后余数能够发生变化,上面的代码要怎样修改?谢谢。

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


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

sort之后可能所有行的位置都发生了变化,所以需要重置所有列,直接AfterSort事件

e.Table.DataTable.DataCols("出入库数量").RaiseDataColChanged()

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/2/22 8:22:00 [只看该作者]

Dim nms As New List(Of String)
Dim drs As New List(of DataRow)
With DataTables("出入库")
    nms = .GetValues("物料编号")
    For Each nm As String In nms '找出每个产品的第一行数据, 添加到集合drs中
        drs.Add(.Find("物料编号 = '" & nm & "'", "[_SortKey]")) 
    Next
    For Each dr As DataRow In drs
        .DataCols("出入库数量").RaiseDataColChanged(dr)
    Next 
End With

上面这段代码我放在 afteropenproject 里面,但是执行起来没有效果。请问是为什么呢?谢谢。上述代码来自:http://www.foxtable.com/webhelp/topics/2237.htm

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


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/22 8:28:00 [只看该作者]

"出入库数量"是表达式列?datacolchanged事件写了什么代码

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/2/22 12:42:00 [只看该作者]

"出入库数量" 不是表达式。但是 datacolchanged 里面有很多代码。要从哪里开始查起?

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


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/22 13:32:00 [只看该作者]

看根据"出入库数量"触发的代码

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/2/22 14:31:00 [只看该作者]

Select Case e.DataCol.Name
    Case "出入库数量"

    '自动计算余数
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [物料编号] = '" & mr("物料编号") & "'", "[_SortKey] Desc")
        If dr Is Nothing OrElse dr("_Identify") = mr("_Identify") Then
            mr("余数") = mr("出入库数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [物料编号] = '" & dr("物料编号") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("余数") = drs(i-1)("余数") + drs(i)("出入库数量")
            If drs(i)("出入年月") = drs(i-1)("出入年月") Then
                drs(i)("上行余数") = Nothing
            Else
                drs(i)("上行余数") = drs(i-1)("余数") 
            End If
        Next
end select

这是第一段。

If e.DataCol.name = "出入库数量" Then
    e.DataRow.save '必须先保存,后面SQL才能统计到此数据的变化
    If user.Group = "仓库" OrElse user.Group = "组装仓库" OrElse user.Group = "仓库(铝巴)" OrElse user.Group = "品质" OrElse user.Group = "品质工程师" OrElse user.name = "开发者"Then 
        DataTables("物料字典").DataCols("物料编号").RaiseDataColChanged("物料编号 = '" & e.DataRow("物料编号") & "'")
        DataTables("出入库单总表").DataCols("出入库单号").RaiseDataColChanged("出入库单号 = '" & e.DataRow("出入库单号") & "'")
    End If
End If

这是第二段。

总共就这两段由"出入库数量"触发的代码。这两段代码平时运作都是正常的。

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


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/22 14:49:00 [只看该作者]

调试,如果下面的msgbox可以弹出,说明代码是执行了的,如果不起作用,要么代码计算逻辑有问题,要么没有加载符合条件的数据

Select Case e.DataCol.Name
    Case "出入库数量"
msgbox(1)
    '自动计算余数
……

If e.DataCol.name = "出入库数量" Then
msgbox(2)
    e.DataRow.save '必须先保存,后面SQL才能统计到此数据的变化
……

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/2/22 16:13:00 [只看该作者]

设置好之后,再重新登录 foxtalbe 时,1和2都会不断重复地跳出来,说明是执行了的。

 回到顶部
总数 31 上一页 1 2 3 4 下一页