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


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

主题:计算余数代码问题

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
计算余数代码问题  发帖心情 Post By:2020/7/15 19:02:00 [显示全部帖子]

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

以上用于计算余数的代码是放在afteropenproject里面的,但老是出现如下警告:
.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.5.29.8
错误所在事件:项目,AfterOpenProject
详细错误信息:
未将对象引用设置到对象的实例。

请问为什么?

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 8:32:00 [显示全部帖子]

一、上述代码已经加了如下判断了,但还是出现一样的警告:

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

二、“出入库”这个数据表的代码如下

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
        
        If e.DataCol.Name = "物料编号" AndAlso 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
            End If
            If dr IsNot Nothing Then
                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

上面红色部分,我觉得不对,但我是从使用说明里面抄的,这段代码是否会引起那样的警告?



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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 10:41:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "出入库数量"
 MessageBox.Show(1) 
    '自动计算余数
        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
        
        If e.DataCol.Name = "物料编号" AndAlso 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
            End If
            If dr IsNot Nothing Then
                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


afteropenproject 里面的代码改好了,不会出现1楼的警告了,但是又出现另外一个警告了(如下所示): 

.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.5.29.8
错误所在事件:表,出入库, DataColChanged
详细错误信息:
调用的目标发生了异常。
该字符串未被识别为有效的 DateTime。

上面是“出入库”这个数据表的部分代码,我放置了 MessageBox.Show(1),所以老是出现“1”。但是,我不知道问题的原因是什么。 

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 11:01:00 [显示全部帖子]

5楼我已经谈到,afteropenproject 里面的代码改好了,我改的跟你6楼改的是一样的。现在我的问题是在“出入库”之 datacolchanged 事件里面了。详见5楼。谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 12:00:00 [显示全部帖子]

1、2、3、4以及如下警告都会轮流出现:

.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.5.29.8
错误所在事件:表,出入库, DataColChanged
详细错误信息:
调用的目标发生了异常。
该字符串未被识别为有效的 DateTime。



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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 14:02: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) 
        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
    MessageBox.Show(5)     
        If e.DataCol.Name = "物料编号" AndAlso 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
            End If
            If dr IsNot Nothing Then
                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

上述涉及余数计算的代码,如果全部注释掉,就不会出现任何警告。如果把前面4个 Messagebox.show 都注释掉,留下Messagebox.show(5),就只出现如下代码
.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.5.29.8
错误所在事件:表,出入库, DataColChanged
详细错误信息:
调用的目标发生了异常。
该字符串未被识别为有效的 DateTime。

如果留下Messagebox.show(4),把Messagebox.show(5)注释掉,就会出现“4” 字。

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/7/17 17:58:00 [显示全部帖子]

http://www.foxtable.com/webhelp/ 
我按照上述链接中你们更新后的代码,将涉及 find和select 几个语句的代码都更换了,现在就没有问题了。

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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/9/29 8:18:00 [显示全部帖子]

我现在有两个问题:

一:“出入库”这个数据表里面 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("出入库数量")
            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)("出入库数量")
        Next
end select

二:“出入库”这个数据表里面 aftermoverow 之下述代码,我对数据重新排序之后,余数一列的数据也不会发生变化,也就是说,这段代码不起作用

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)

请教上述两个问题是什么原因?谢谢。


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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/9/29 13:16:00 [显示全部帖子]

1. 上述15楼第1点的问题我已经改好了(< 改为 <=)。运行效果没有改善。
2. 请看附页项目,麻烦你帮我看一下。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar



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


加好友 发短信
等级:七尾狐 帖子:1511 积分:9801 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2020/10/8 12:54:00 [显示全部帖子]

可是你试一下对数据重新进行排序,余数一栏就不会跟着变动。

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