以文本方式查看主题

-  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 If
end 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
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:增加相应行.foxdb


--  作者:大红袍
--  发布时间: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
    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