Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
我做了个流水账,用外部数据源做的,在测试的时候AfterMoveRow表事件的代码不执行
然后想将其发到论坛来求助,谁知在定向到内部表后AfterMoveRow表事件的代码却执行了(难道内部表和外部表有什么不同的地方?)!
真怪,想不出是什么原因。外部数据源是用SQL Server
密码都是123
下载信息 [文件大小: 下载次数: ] | |
![]() |
"订单生产安排供需流水账"表里的
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)
看不到代码呀!
现在经过我的修正如下,好像可以了,请问大家我这样写是否可行?或者有其他更好更高效的写法呢?
说明一下:经过我这样写,当同一会计期间同一天入同一款产品的时候都可以正常计算了。但如果删除某行的时候还不能重算,我想只要加入代码就应该可以了。
但还是想不明白当初的代码出现问题的原因,希望有那位高人指点一下。
现在发现,这样的代码在输入数据的时候,日期一定要按顺序输入,否则计算还是有问题,不知如何解决才好呢?
"订单生产安排供需流水账"表里的
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)