以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 流水账问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=82029) |
||||
-- 作者:kaituozhe -- 发布时间:2016/3/10 13:41:00 -- 流水账问题 一个科目明细表记录每个会计科目流水账(日期、摘要、借方、贷方、余额),另一个表是余额表,余额表想自动取截止某一日期的余额怎么办,比如我想根据明细账在余额表中显示库存现金科目截止2015年10月30日的余额怎么办?而且2015年10月30日库存现金可能发生多笔业务,怎么能取到当天发生最后一笔的余额呢? |
||||
-- 作者:大红袍 -- 发布时间:2016/3/10 14:46:00 -- 查找那个日期的_Identify或_Sortkey最大的一条。
DataTables("").find("日期 = #2015-10-30#", "_Identify desc")
或者换个思路,统计那个日期之前的 借和贷,相减就是余额 |
||||
-- 作者:kaituozhe -- 发布时间:2016/3/10 15:47:00 -- 再问一个关于流水账的问题,流水账一般按日期及先后顺序计算余额呢,如果某一日期后加了一行是此日期以前日期的,比如在2015-10-30之前加了一个10-25日的数据,怎么还能按日期的先后顺序自动调整余额,数据的顺序不调整。 |
||||
-- 作者:kaituozhe -- 发布时间:2016/3/10 16:06:00 -- 帮助是单条件计算流水账,现在是多条件计算流水账该如何修改下列黄色代码? 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("科目编号") & "\'and [项目编号] = \'" & mr("项目编号") & "\'", "[_SortKey] Desc") If dr Is Nothing Then mr("余额") = mr("借方金额") - mr("贷方金额") dr = mr End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [科目编号] = \'" & dr("科目编号") & "\'[项目编号] = \'" & mr("项目编号") & "\'", "[_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
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2016/3/10 21:28:00 -- 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 (e.DataCol.Name = "科目编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue) OrElse ( If e.DataCol.Name = "项目编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue ) Then
If e.DataCol.Name = "科目编号" Then dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [科目编号] = \'" & e.OldValue & "\'And 项目编号 = \'" & e.DataRow("项目编号") & "\'", "[_SortKey] Desc") If dr Is Nothing Then dr = e.DataTable.Find("[科目编号] = \'" & e.OldValue & "\'And 项目编号 = \'" & e.DataRow("项目编号") & "\'", "[_SortKey] Desc") End If Else dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [项目编号] = \'" & e.OldValue & "\'And 科目编号 = \'" & e.DataRow("科目编号") & "\'", "[_SortKey] Desc") If dr Is Nothing Then dr = e.DataTable.Find("[项目编号] = \'" & e.OldValue & "\'And 科目编号 = \'" & e.DataRow("科目编号") & "\'", "[_SortKey] Desc") End If End If If dr IsNot Nothing Then dr("余额") = dr("借方金额") - dr("贷方金额")
drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [科目编号] = \'" & dr("科目编号") & "\' And [项目编号] = \'" & dr("项目编号") & "\'", "[_SortKey]") For i As Integer = 1 To drs.Count - 1
drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
Next End Ifend if [此贴子已经被作者于2016/3/10 21:32:39编辑过]
|
||||
-- 作者:大红袍 -- 发布时间:2016/3/10 23:50:00 -- 你既然是根据日期统计,那么 _Sortkey 就应该改成 日期列。
相同日期的时候,如果根据 _Sortkey/_Identify排序,那就这样写 日期 desc, _Sortkey desc
|
||||
-- 作者:kaituozhe -- 发布时间:2016/3/11 7:52:00 -- 这个例子中有两个问题需要解决:一是希望项目明细增加一个新的科目编号和科目名称,在项目汇总中也能同时增加相应的科目编号和科目名称(前提汇总中没有这个科目及编号),但是会增加的不一致;二是明细账中实现不三楼所想的功能。 |
||||
-- 作者:kaituozhe -- 发布时间:2016/3/11 7:53:00 --
|
||||
-- 作者:大红袍 -- 发布时间:2016/3/11 9:17:00 -- 1、自动增加行,参考 http://www.foxtable.com/help/topics/2490.htm
2、把_Sortkey改成你的日期列就行啊。
|
||||
-- 作者:大红袍 -- 发布时间:2016/3/11 10:18:00 -- 汗,参考代码
Select Case e.DataCol.Name |