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


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

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

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


加好友 发短信
等级:五尾狐 帖子:1018 积分:7150 威望:0 精华:0 注册:2008/9/1 22:34:00
为什么流水账的AfterMoveRow表事件不起效  发帖心情 Post By:2010/12/18 16:00:00 [只看该作者]

我做了个流水账,用外部数据源做的,在测试的时候AfterMoveRow表事件的代码不执行

然后想将其发到论坛来求助,谁知在定向到内部表后AfterMoveRow表事件的代码却执行了(难道内部表和外部表有什么不同的地方?)!

真怪,想不出是什么原因。外部数据源是用SQL Server

密码都是123

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:订单生产按排供需流水账1.rar

 


此主题相关图片如下:03.jpg
按此在新窗口浏览图片

"订单生产安排供需流水账"表里的

DataColChanged 事件代码:

 

Select Case e.DataCol.Name
    Case "日期"
        e.DataRow("会计期间")=e.DataRow("日期").Year & Format(e.DataRow("日期").Month,"00")
       
       
    Case "料品编码","会计期间","订单需求量","生产供给量","摘要"
        Dim dr As DataRow
        dr = DataTables("料品基础数据表").Find("料品编码 = '" & e.DataRow("料品编码") & "'" )
        If dr IsNot Nothing '如果找到, 则设置各列内容
            e.DataRow("每一打的公斤数")= dr("库存打数换算")
            e.DataRow("最低安全库存量")= dr("最低安全库存量")
            e.DataRow("通用范围")= dr("通用范围")
            e.DataRow("料品归类")= dr("料品归类")
            e.DataRow("料品名称")= dr("料品名称")
            e.DataRow("料品规格")= dr("料品规格")
            e.DataRow("库存单位")= dr("库存单位")
           
        Else
            '否则清除部门和姓名两列的内容
            e.DataRow("每一打的公斤数") =Nothing
            e.DataRow("最低安全库存量") =Nothing
            e.DataRow("通用范围")= Nothing
            e.DataRow("料品归类")= Nothing
            e.DataRow("料品名称")= Nothing
            e.DataRow("料品规格")= Nothing
            e.DataRow("库存单位")= Nothing
           
        End If
       
        Dim dr1 As DataRow
       
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
                      
        dr1 = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [会计期间] = '" & mr("会计期间") & "'and [料品编码] = '" & mr("料品编码") & "'", "[_SortKey] Desc")
        If dr1 Is Nothing Then '如果没有上一行,说明本行就是同产品的第一行
            If mr("摘要")="期初结存" Then '这里的用意是本流水账是按每个会计期间来结账的,就是每个会计期间都有一个“期初结存”,这样用户从数

 

                                                       据库里加载数据的时候只要加载一个会计期间的数据就能正常计算了。当然如果到了要处理下一个会计期间

 

                                                       时就要做个结账处理:将当期的每个产品的结存结转到下一个会计期间的期初结存里。
            Return
            Else
            mr("结存量") = mr("生产供给量") - mr("订单需求量")
                dr1 = mr
              End If
           
           
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr1("_SortKey") & " And [会计期间] = '" & dr1("会计期间") & "'and [料品编码] = '" & dr1("料品编码") & "'")
        For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
            drs(i)("结存量") = drs(i-1)("结存量") + drs(i)("生产供给量") - drs(i)("订单需求量")
        Next  
'当然这里的代码还未能想到同一个会计期间里的日期比较,如:这个会计期间里如果同一天里同一款产品都有数据的时候。
                
        
    Case "结存量","库存单位","每一打的公斤数"
        Select Case e.DataRow("库存单位")
            Case "公斤","千克"
                e.DataRow("公斤数")= e.DataRow("结存量")
            Case Else
                e.DataRow("公斤数")= e.DataRow("结存量")*e.DataRow("每一打的公斤数")
        End Select
       
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("会计期间") & "'and [料品编码] = '" & r("料品编码") & "'"
e.Table.DataTable.DataCols("料品编码").RaiseDataColChanged(Filter)

[此贴子已经被作者于2010-12-20 8:24:34编辑过]

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


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

有谁知道原因吗?我想是否是软件本身的原因呢?
[此贴子已经被作者于2010-12-18 18:07:22编辑过]

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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/12/19 10:45:00 [只看该作者]

看不到代码呀!


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


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

这个是开发版的,要用开发版才能打开,你有开发版吗?
[此贴子已经被作者于2010-12-19 11:49:39编辑过]

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


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

大家看看个问题到底是何原因呢?

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


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

你得有个不生效的例子才能看啊,你上传的例子是生效的吧?

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


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

是的,我上传的这个例子是内部表的,因为外部表还要上传数据库所以就没上传了。
[此贴子已经被作者于2010-12-20 8:42:24编辑过]

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


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

    现在经过我的修正如下,好像可以了,请问大家我这样写是否可行?或者有其他更好更高效的写法呢?

 

   说明一下:经过我这样写,当同一会计期间同一天入同一款产品的时候都可以正常计算了。但如果删除某行的时候还不能重算,我想只要加入代码就应该可以了。

   但还是想不明白当初的代码出现问题的原因,希望有那位高人指点一下。

 

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

 

"订单生产安排供需流水账"表里的

DataColChanged 事件代码:

 

Select Case e.DataCol.Name
    Case "结存量"
        If e.DataRow("摘要")="期初结存" Then
            Dim Filter As String
            Filter = "[会计期间] = '" & e.DataRow("会计期间") & "'and [料品编码] = '" & e.DataRow("料品编码") & "'"
            e.DataTable.DataCols("料品编码").RaiseDataColChanged(Filter)
        Else
            Return
        End If
    Case "日期","料品编码","订单需求量","生产供给量","摘要"
        e.DataRow("会计期间")=e.DataRow("日期").Year & Format(e.DataRow("日期").Month,"00")
        Dim dr As DataRow
        dr = DataTables("料品基础数据表").Find("料品编码 = '" & e.DataRow("料品编码") & "'" )
        If dr IsNot Nothing '如果找到, 则设置各列内容
            e.DataRow("每一打的公斤数")= dr("库存打数换算")
            e.DataRow("最低安全库存量")= dr("最低安全库存量")
            e.DataRow("通用范围")= dr("通用范围")
            e.DataRow("料品归类")= dr("料品归类")
            e.DataRow("料品名称")= dr("料品名称")
            e.DataRow("料品规格")= dr("料品规格")
            e.DataRow("库存单位")= dr("库存单位")
           
        Else
            '否则清除部门和姓名两列的内容
            e.DataRow("每一打的公斤数") =Nothing
            e.DataRow("最低安全库存量") =Nothing
            e.DataRow("通用范围")= Nothing
            e.DataRow("料品归类")= Nothing
            e.DataRow("料品名称")= Nothing
            e.DataRow("料品规格")= Nothing
            e.DataRow("库存单位")= Nothing
           
        End If
       
        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 [_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
       
   
Case "结存量","库存单位","每一打的公斤数"
        Select Case e.DataRow("库存单位")
            Case "公斤","千克"
                e.DataRow("公斤数")= e.DataRow("结存量")
            Case Else
                e.DataRow("公斤数")= e.DataRow("结存量")*e.DataRow("每一打的公斤数")
        End Select
       
End Select

 

 

 

"订单生产安排供需流水账"表里的

AfterMoveRow 事件代码:

 

Dim Filter As String
Dim r As Row
r = e.Table.Rows(e.NewIndex)
Filter = "[会计期间] = '" & r("会计期间") & "'and [料品编码] = '" & r("料品编码") & "'"
e.Table.DataTable.DataCols("料品编码").RaiseDataColChanged(Filter)

 

 

 

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

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


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

关于删除行不行的问题,可以在DataRowDeleting事件中设置代码,将其参与流水账计算的值设置为False或分类设置为空白,然后重算此行之后的所有行。

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


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

我改一下帮助中的流水账的例子,加上针对删除行这种情况的处理。

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