以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  流水账的筛选问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=159281)

--  作者:18920118515
--  发布时间:2020/12/20 14:35:00
--  流水账的筛选问题
老师,您好

请教一下,如何将流水账中每一个账户的最后记录筛选出来,也就是将每一个账户当前余额的所在行筛选出来,我要将筛选的结果体现在一个窗口附表中,您受累给指导下,谢谢您

--  作者:有点蓝
--  发布时间:2020/12/20 20:55:00
--  
表数据截图说明一下。根据什么区分是最后的余额?
[此贴子已经被作者于2020/12/20 20:55:05编辑过]

--  作者:18920118515
--  发布时间:2020/12/21 10:13:00
--  
老师,您好,感谢您的回复,我的具体情况如下:

有一个表,该表也是仓库的流水账,结构为:存货名称;入库数量;入库金额;出库数量;出库金额;结存数量;结存金额

我已经按照贵处对流水账的帮助信息,设置了分别针对每个不同的“存货名称”分别计算库存数量及库存金额的表事件,我的需求是想通过筛选该【仓库流水账】的不同存货明细的最后一行,调取每种存货的库存情况

烦劳老师给指导一下,我是一个新手,您受累指点指点

--  作者:有点蓝
--  发布时间:2020/12/21 10:17:00
--  
怎么区分哪一行是不同存货明细的最后一行?代码是怎么计算流水账的?排序使用的是_sortkey还是_Identify?
--  作者:18920118515
--  发布时间:2020/12/21 10:27:00
--  
老师,以下是分别计算余额的代码,您看下


Select Case e.DataCol.Name \'实现按照不同账号分别计算余额功能
    Case "存货三级明细","入库数量","出库数量","日期"
        If e.OldValue <> e.NewValue Then
            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("索引标识") & "\'", "[_SortKey] Desc")
            If dr Is Nothing Then
                mr("库存数量") = mr("入库数量") - mr("出库数量")
                dr = mr
            End If
            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
            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 If
End Select


--  作者:有点蓝
--  发布时间:2020/12/21 10:45:00
--  
要使用sql获取

sel
ect a.* from {表A} as a  inner join (select 索引标识,max([_SortKey]) from {表A} group by 索引标识) as b on a.索引标识=b.索引标识 where a.[_SortKey]=b.[_SortKey]
--  作者:18920118515
--  发布时间:2020/12/21 11:12:00
--  
谢谢老师,我先看看,有不明白的再请教您
--  作者:18920118515
--  发布时间:2020/12/21 13:40:00
--  
老师
--  作者:18920118515
--  发布时间:2020/12/21 16:01:00
--  


Select a.
索引标识,a.库存数量,a.单价,a.库存金额 Fro m {仓库} a INNER JOIN (Select 索引标识,Max(行标识) As 行标识 Fro m {仓库} Group By 索引标识) b on a.索引标识 = b.索引标识 And a.行标识 = b.行标识 Order By a.索引标识

1- 老师帮我看看上边的代码哪里有问题
2- 另外,老师,我想把筛选的内容体现在窗口的附表中,该如何操作

我是一个新手,因此问题可能有些幼稚,您多见谅

--  作者:有点蓝
--  发布时间:2020/12/21 16:11:00
--  
1、没有问题,应该告诉我们的是执行后有什么问题?