以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  不同银行不同账号的流水账如何做?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41747)

--  作者:seal51
--  发布时间:2013/10/26 11:12:00
--  不同银行不同账号的流水账如何做?

不同银行不同账号的流水账如何做,见附件

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


--  作者:Bin
--  发布时间:2013/10/26 11:13:00
--  
http://www.foxtable.com/help/topics/2136.htm
--  作者:seal51
--  发布时间:2013/10/26 11:26:00
--  
版主, 我用的就是高效率的流水账模板文件做的,我按照银行分类, 起始余额不对,你看看
--  作者:seal51
--  发布时间:2013/10/26 11:27:00
--  
是不是需要按照出入库的样板文件去做
--  作者:Bin
--  发布时间:2013/10/26 11:28:00
--  
先按照帮助的例子去做,试图去理解原理. 再进行扩展.
--  作者:seal51
--  发布时间:2013/10/26 11:30:00
--  
对了,就是按照出入库的例子就可以, 谢谢
--  作者:hanxuntx
--  发布时间:2013/10/26 12:42:00
--  

通用代码

\'--------------------------库存计算-----------------------------
Dim zd As New Dictionary(of String,String)
zd.Add("库存","物料编号")
zd.Add("本款本采购单","物料编号,规格,颜色,采购订单编号")
zd.Add("本规格库存","物料编号,规格,颜色")
Dim dr As DataRow
Dim mr As DataRow = e.DataRow
Dim drs As List(of DataRow)
For Each key As String In zd.Keys
    Dim vs() As String = zd(key).Split(",")
    Dim cs As New List(of String)
    cs.AddRange(vs)
    If cs.Contains(e.DataCol.Name) OrElse e.DataCol.Name = "入库" OrElse e.DataCol.Name = "出库" Then   \'找出上一行
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And " & Functions.Execute("FilterStr_Buid",zd(key),mr,Nothing,Nothing), "[_SortKey] Desc")        
        If dr Is Nothing Then   \'如果没有找到上一行,说明本行就是第一行
            mr(key) = mr("入库") - mr("出库")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And " & Functions.Execute("FilterStr_Buid",zd(key),dr,Nothing,Nothing), "[_SortKey]")          \'上一行以下的所有行-----------------
        For i As Integer = 1 To drs.Count - 1    \'重算余下行的余额
            drs(i)(key) = drs(i-1)(key) + drs(i)("入库") - drs(i)("出库")
        Next

        If cs.Contains(e.DataCol.Name) AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And " & Functions.Execute("FilterStr_Buid",zd(key),mr,e.DataCol.Name ,e.OldValue), "[_SortKey] Desc")     \'找出被修改行的上一个【修改列】的行------------------------
            If dr Is Nothing Then
                dr = e.DataTable.Find(Functions.Execute("FilterStr_Buid",zd(key),mr,e.DataCol.Name ,e.OldValue), "[_SortKey]")                                              \'被修改的就是第一行------------------------
                If dr IsNot Nothing Then
                    dr(key) = dr("入库") - dr("出库")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And " & Functions.Execute("FilterStr_Buid",zd(key),dr,e.DataCol.Name ,e.OldValue), "[_SortKey]")  \'重算余下所有行------------------------
                For i As Integer = 1 To drs.Count - 1
                    drs(i)(key) = drs(i-1)(key) + drs(i)("入库") - drs(i)("出库")
                Next
            End If
        End If
    End If
Next