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


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

主题:计算余数代码问题

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/16 8:38:00 [显示全部帖子]

1、Find查询不一定有结果,虽然理论上这里不可能没有结果,但是程序运行很多时候代码之间可能会互相干扰的,所以尽量还是先判断在使用:http://www.foxtable.com/webhelp/topics/0396.htm

2、有可能是RaiseDataColChanged,执行后"出入库数量"的datacolchanged事件有问题导致的

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 9:16:00 [显示全部帖子]

1、判断Find的结果,不是判断GetValues的结果,这个判断没有意义

2、看不出什么问题,自己调试一下看那一句代码出错:http://www.foxtable.com/webhelp/scr/1485.htm

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 10:53:00 [显示全部帖子]

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

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 11:13:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "出入库数量"
 MessageBox.Show(1) 
    '自动计算余数
        Dim dr As DataRow
 MessageBox.Show(2)
        Dim mr As DataRow = e.DataRow
 MessageBox.Show(3)
        Dim drs As List(of DataRow)
 MessageBox.Show(4)
……

看是哪一句代码出错

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 13:41:00 [显示全部帖子]

每一行代码后都加上MessageBox.Show,测试看哪一个MessageBox.Show之后会出错

表,出入库, DataColChanged还有没有其他代码?提示的错误和日期有关
datacolchanged:

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("入库数量") + 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)("入库数量") + drs(i)("出库数量")
        Next
    Case "物料编号"
        If  e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] <= #" & mr("_SortKey") & "# And [物料编号] = '" & e.OldValue & "'", "_SortKey desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[物料编号] = '" & e.OldValue & "'", "_SortKey")
                If dr IsNot Nothing Then
                    dr("余数") = dr("入库数量") + dr("出库数量")
                End If
            Else
                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)("入库数量") + drs(i)("出库数量")
                Next
            End If
        End If
End Select

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/17 14:14:00 [显示全部帖子]

dr = e.DataTable.Find("[_SortKey] <= " & mr("_SortKey") & " And [物料编号] = '" & mr("物料编号") & "'", "_SortKey desc")

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/29 8:41:00 [显示全部帖子]

1、dr = e.DataTable.Find("[_SortKey] <=  " & mr("_SortKey") & " And [物料编号] = '" & mr("物料编号") & "'", "[_SortKey] Desc")

2、请上传实例测试

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/29 13:57:00 [显示全部帖子]

改回14楼的用法即可(< 不需要改为 <=

我测试没有问题,具体哪一个余数不准?截图说明

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/8 13:50:00 [显示全部帖子]

排序是指sort?http://www.foxtable.com/webhelp/topics/0116.htm

还是移动行?移动行我测试没有任何问题,移动前后的行余数肯定变动了,至于其它行,计算结果都一样的,还变什么?

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/8 16:21:00 [显示全部帖子]

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

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

 回到顶部
总数 15 1 2 下一页