Foxtable(狐表)用户栏目专家坐堂 → 为什么流水账的AfterMoveRow表事件不起效


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

主题:为什么流水账的AfterMoveRow表事件不起效

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


加好友 发短信
等级:五尾狐 帖子:1019 积分:7161 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/20 16:58:00 [只看该作者]

现在发现,这样的代码在输入数据的时候,日期一定要按顺序输入,否则计算还是有问题,不知如何解决才好呢?

我这样写还是不行啊!

Dim dr1 As DataRow
        Dim dr2 As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
       
        If mr.IsNull("料品编码") = False Then
        dr1 = e.DataTable.Find("[会计期间] = '" & mr("会计期间") & "'and [日期] <= #" & mr("日期") & "# And [料品编码] = '" & mr("料品编码") & "'and [_sortkey] < " & mr("_sortkey") ,"[_SortKey] Desc")
            If dr1 Is Nothing Then '如果没有上一行,说明本行就是同产品的第一行
                If mr("摘要")="期初结存" Then
                    Return
                Else
                   
                    mr("结存量") = mr("生产供给量") - mr("订单需求量")
                   
                End If
                dr1 = mr
            End If
            drs = e.DataTable.Select("[会计期间] = '" & dr1("会计期间") & "'and [料品编码] = '" & dr1("料品编码") & "'And [日期] >= #" & dr1("日期") & "#" ,"[_SortKey]")

            For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
                drs(i)("结存量") = drs(i-1)("结存量") + drs(i)("生产供给量") - drs(i)("订单需求量")
            Next
        End If

[此贴子已经被作者于2010-12-20 17:01:38编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/20 17:09:00 [只看该作者]

如果你不比较_Identify,只比较日期,就不会有这个问题,但是这样同一天的先后顺序又分不开。

除非你将日期列的格式设置为日期时间,这样同一天的可以比较时间,不在通过_Identify比较。


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


加好友 发短信
等级:五尾狐 帖子:1019 积分:7161 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/20 17:18:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-20 17:09:00的发言:

如果你不比较_Identify,只比较日期,就不会有这个问题,但是这样同一天的先后顺序又分不开。

除非你将日期列的格式设置为日期时间,这样同一天的可以比较时间,不在通过_Identify比较。

 现在我这样好像可以了,呵呵,还在测试,不知这样写是否可行?

 经短时测试,好像达到我的目的了,现在还差当删除行时的代码重算写法了,不知有什么好的方法否?

 

Dim dr1 As DataRow
        Dim dr2 As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
       
        If mr.IsNull("料品编码") = False Then
        dr1 = e.DataTable.Find("[会计期间] = '" & mr("会计期间") & "'and [日期] <= #" & mr("日期") & "# And [料品编码] = '" & mr("料品编码") & "'and [_sortkey] < " & mr("_sortkey") ,"[日期],[_SortKey] Desc")
            If dr1 Is Nothing Then '如果没有上一行,说明本行就是同产品的第一行
                If mr("摘要")="期初结存" Then
                    Return
                Else
                   
                    mr("结存量") = mr("生产供给量") - mr("订单需求量")
                   
                End If
                dr1 = mr
            End If
            drs = e.DataTable.Select("[会计期间] = '" & dr1("会计期间") & "'and [料品编码] = '" & dr1("料品编码") & "'And [日期] >= #" & dr1("日期") & "#" ,"[日期],[_SortKey]")

            For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
                drs(i)("结存量") = drs(i-1)("结存量") + drs(i)("生产供给量") - drs(i)("订单需求量")
            Next
        End If

[此贴子已经被作者于2010-12-20 17:21:20编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/20 17:21:00 [只看该作者]

如果日期是日期时间格式,或者同一天不需要比较先后顺序,那么就没问题了

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


加好友 发短信
等级:五尾狐 帖子:1019 积分:7161 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/20 17:25:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-20 17:21:00的发言:
如果日期是日期时间格式,或者同一天不需要比较先后顺序,那么就没问题了

我的日期是日期格式的没变啊,同一天有相同产品录入时也可以很好的处理了,在同一天相同产品是按先后次序重算的,只要用户上下移动行都会重算,我觉得这样处理会更好地符合用户处理数据的意图吧。

[此贴子已经被作者于2010-12-20 17:26:46编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1019 积分:7161 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/20 17:47:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-20 16:50:00的发言:
关于删除行不行的问题,可以在DataRowDeleting事件中设置代码,将其参与流水账计算的值设置为False或分类设置为空白,然后重算此行之后的所有行。

能给个代码参考下吗?

[此贴子已经被作者于2010-12-20 17:47:16编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/20 18:01:00 [只看该作者]

其实不复杂的,你先自己想一下,搞不定的话,明天会更新,看明天的帮助即可。


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


加好友 发短信
等级:幼狐 帖子:134 积分:1101 威望:0 精华:0 注册:2010/5/27 18:06:00
  发帖心情 Post By:2010/12/20 22:52:00 [只看该作者]

帮助中的流水账的例子有个小问题:收入和支出,入库出库:在每一行里,只有一个发生。比如打电话,打入和接入。
[此贴子已经被作者于2010-12-21 6:59:15编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1019 积分:7161 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/21 7:52:00 [只看该作者]

贺先生,关于我原来的代码为什么不起效,请问你知道原因吗?因为我想搞清楚为什么会有这个情况出现,为什么外部表不起效而内部表却可以!


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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/21 8:06:00 [只看该作者]

这种问题,99%是你自己误判的。

如果可以的话,你可以做个不起作用的简单例子看看,用Access的外部数据源。


 回到顶部
总数 20 上一页 1 2