以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  流水帐公式  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=2646)

--  作者:foxmis
--  发布时间:2009/4/30 14:53:00
--  流水帐公式
流水账:余额=收入-支出

DataColChanged代码哪里错了?
Dim i As Integer
If e.DataCol.Name = "收入" OrElse e.DataCol.Name = "支出" Then
    For Each dr As DataRow In e.DataTable.DataRows
        dr(0)("余额") = dr(0)("收入")-dr(0)("支出")
        For i = 1 to e.DataTable.DataRows.Count-1
            dr(i)("余额") = dr(i-1)("余额")+dr(i)("收入")-dr(i)("支出")
        Next
    Next
End If


[此贴子已经被狐狸爸爸于2009-4-30 15:30:42编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/4/30 15:12:00
--  
这是一个按日期的流水帐:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目7.table


Select Case e.DataCol.Name
  Case "日期","收入","支出"
    If e.DataRow.Isnull("日期") = False Then
        For Each dr As DataRow In e.DataTable.Select("[日期] >= #" & e.DataRow("日期") & "#")
            Dim Val1 As Double =  e.DataTable.compute("Sum(收入)","[日期] <= #" & dr("日期") & "#")
            Dim Val2 As Double =  e.DataTable.compute("Sum(支出)","[日期] <= #" & dr("日期") & "#")
            dr("余额") = Val1 - Val2
        Next
    End If
End Select


--  作者:wcs
--  发布时间:2009/4/30 16:11:00
--  

流水账的余额一般是按顺序计算的,不全按日期。

准确地说是按行号的顺序来计算的。


--  作者:狐狸爸爸
--  发布时间:2009/4/30 16:13:00
--  

按输入顺序的,之前已经有了。


--  作者:kylin
--  发布时间:2009/4/30 19:41:00
--  
以下是引用wcs在2009-4-30 16:11:00的发言:

流水账的余额一般是按顺序计算的,不全按日期。

准确地说是按行号的顺序来计算的。

日期 改成 _Identify 就可以了
更严格的做法是 日期 和 _Identify 一起来

[此贴子已经被作者于2009-4-30 19:41:43编辑过]

--  作者:wcs
--  发布时间:2009/4/30 20:22:00
--  

我想我要非得要说说了:

流水账应该根据TABLE中记录的顺序来计算(从上到下,不任主键大小),因为用户只想看根据查询到的记录生成的流水账。

而主键的顺序很可能与TABLE中的记录的顺序不同,如此计算的流水账,会让人不知所云!

另外,如果一天中有多条记录,那根据日期记录的流水账多半是错的,只是最后一行是正确的!

我见过早期的财务软件,很多有这样的BUG!感觉好像是“余额”列中的值错了行!


--  作者:ggmm
--  发布时间:2009/5/1 0:24:00
--  
能重排_Identify 就好了,这样一来按要求排序(例按日期排序)后重排_Identify 就能正确计算余额,雅奇mis就可以重排_Identify 的。
--  作者:狐狸爸爸
--  发布时间:2009/5/1 0:57:00
--  
kylin说得对,同时根据日期和_Identify 计算即可。
[此贴子已经被作者于2009-5-1 0:56:47编辑过]