Foxtable(狐表)用户栏目专家坐堂 → 流水账问题


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

主题:流水账问题

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
流水账问题  发帖心情 Post By:2016/3/10 13:41:00 [只看该作者]

一个科目明细表记录每个会计科目流水账(日期、摘要、借方、贷方、余额),另一个表是余额表,余额表想自动取截止某一日期的余额怎么办,比如我想根据明细账在余额表中显示库存现金科目截止2015年10月30日的余额怎么办?而且2015年10月30日库存现金可能发生多笔业务,怎么能取到当天发生最后一笔的余额呢?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/10 14:46:00 [只看该作者]

查找那个日期的_Identify或_Sortkey最大的一条。

 

DataTables("").find("日期 = #2015-10-30#", "_Identify desc")

 

或者换个思路,统计那个日期之前的 借和贷,相减就是余额


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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2016/3/10 15:47:00 [只看该作者]

再问一个关于流水账的问题,流水账一般按日期及先后顺序计算余额呢,如果某一日期后加了一行是此日期以前日期的,比如在2015-10-30之前加了一个10-25日的数据,怎么还能按日期的先后顺序自动调整余额,数据的顺序不调整。

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By: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

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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 If
end if
[此贴子已经被作者于2016/3/10 21:32:39编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/10 23:50:00 [只看该作者]

你既然是根据日期统计,那么 _Sortkey 就应该改成 日期列。

 

相同日期的时候,如果根据 _Sortkey/_Identify排序,那就这样写     日期 desc, _Sortkey desc

 

 


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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2016/3/11 7:52:00 [只看该作者]

这个例子中有两个问题需要解决:一是希望项目明细增加一个新的科目编号和科目名称,在项目汇总中也能同时增加相应的科目编号和科目名称(前提汇总中没有这个科目及编号),但是会增加的不一致;二是明细账中实现不三楼所想的功能。

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2016/3/11 7:53:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:增加相应行.foxdb


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/11 9:17:00 [只看该作者]

1、自动增加行,参考 http://www.foxtable.com/help/topics/2490.htm

 

2、把_Sortkey改成你的日期列就行啊。

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/11 10:18: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("[日期] = #" & mr("日期") & "# and _Sortkey < " & mr("_Sortkey") & " And [科目编号] = '" & mr("科目编号") & "' and [项目编号] = '" & mr("项目编号") & "'", "日期 desc, _Sortkey desc")
        If dr Is Nothing Then '同日期么找到
            dr = e.DataTable.Find("[日期] < #" & mr("日期") & "# And [科目编号] = '" & mr("科目编号") & "' and [项目编号] = '" & mr("项目编号") & "'", "日期 desc, _Sortkey desc")
            If dr Is Nothing Then
                mr("余额") = mr("借方金额") - mr("贷方金额")
                dr = mr
            Else
                mr("余额") = dr("余额") + mr("借方金额") - mr("贷方金额")
            End If
        Else
            mr("余额") = dr("余额") + mr("借方金额") - mr("贷方金额")
        End If
        drs = e.DataTable.Select("[日期] >= #" & mr("日期") & "# and [科目编号] = '" & dr("科目编号") & "' and [项目编号] = '" & mr("项目编号") & "'", "日期,[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
        Next
msgbox(2)
        If e.DataCol.Name = "科目编号" OrElse e.DataCol.name = "项目编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Dim filter As String = ""
            If e.DataCol.name = "科目编号" Then
                filter = " [科目编号] = '" & e.oldvalue & "' and [项目编号] = '" & mr("项目编号") & "'"
            ElseIf e.DataCol.name = "项目编号"
                filter = " [科目编号] = '" & mr("科目编号") & "' and [项目编号] = '" & e.OldValue & "'"
            End If
           
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[日期] >= #" & mr("日期") & "# And " & filter, "日期,[_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


 回到顶部