以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  流水账与重置列的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193027)

--  作者:lin98
--  发布时间:2024/8/10 11:50:00
--  流水账与重置列的问题
流水账与重置列
下面都是重置
问题一:哪个更高效?
问题二:"库存表"增加一列为”期初数“,要加在下面代码哪个位置?


方法一
Dim drs As List(of DataRow) = DataTables("库存表").Select("", "产品,日期")
Dim prev As String  = ""
For i As Integer = 0 To drs.count -1
    Dim cur As String = drs(i)("产品")
    If cur = prev Then
        drs(i)("库存") = drs(i - 1)("库存") + drs(i)("入库") - drs(i)("出库")
    Else
        drs(i)("库存") = drs(i)("入库") - drs(i)("出库")
        prev = cur
    End If
Next

方法二
Dim nms As New List(Of String)
Dim drs As New List(of DataRow)
With DataTables("表名")
    nms = .GetValues("产品")
    For Each nm As String In nms \'找出每个产品的第一行数据, 添加到集合drs中
        drs.Add(.Find("产品 = \'" & nm & "\'", "[_SortKey]"))
    Next
    For Each dr As DataRow In drs
        .DataCols("入库").RaiseDataColChanged(dr)
    Next
End With

--  作者:有点蓝
--  发布时间:2024/8/10 12:41:00
--  
1、加载10W行数据,自己测试哪个更快?

2、整个表格只有一个期初值?还是每年、每季、每月都有期初?

--  作者:lin98
--  发布时间:2024/8/10 15:03:00
--  
2、整个表格只有一个期初值?还是每年、每季、每月都有期初?
帮助-流水帐-实例-库存表的字段:日期,产品,入库,出库,库存
需求-流水帐-库存表的字段:日期,产品,期初数,入库,出库,库存

库存表能有更优化,每年会更省事,但可能数据会大比如100W行数据,可能考虑,每月会相对好,但每月要迁数据

--  作者:有点蓝
--  发布时间:2024/8/10 15:12:00
--  
建议做月结。期初永远放到第一行,这样从第二行开始计算即可
--  作者:lin98
--  发布时间:2024/8/10 15:49: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("产品") & "\'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("库存") = mr("入库") - mr("出库")
 mr("库存") = 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 Select

--  作者:lin98
--  发布时间:2024/8/10 15:51:00
--  
方法一
Dim drs As List(of DataRow) = DataTables("库存表").Select("", "产品,日期")
Dim prev As String  = ""
For i As Integer = 0 To drs.count -1
    Dim cur As String = drs(i)("产品")
    If cur = prev Then
        drs(i)("库存") = drs(i - 1)("库存") + drs(i)("入库") - drs(i)("出库")
drs(i)("期初数") = drs(i - 1)("库存") + drs(i)("入库") - drs(i)("出库")
    Else
        drs(i)("库存") = drs(i)("入库") - drs(i)("出库")
        prev = cur
    End If
Next

方法二
Dim nms As New List(Of String)
Dim drs As New List(of DataRow)
With DataTables("表名")
    nms = .GetValues("产品")
    For Each nm As String In nms \'找出每个产品的第一行数据, 添加到集合drs中
        drs.Add(.Find("产品 = \'" & nm & "\'", "[_SortKey]"))
    Next
    For Each dr As DataRow In drs
        .DataCols("入库").RaiseDataColChanged(dr)
.DataCols("期初数").RaiseDataColChanged(dr)
    Next
End With

--  作者:lin98
--  发布时间:2024/8/10 15:53:00
--  
5楼6楼的期初数放的位置是否正确?放在哪正确?
--  作者:有点蓝
--  发布时间:2024/8/10 16:30:00
--  
完全不需要期初数这种列,期初值放到第一行的入库列即可。代码不需要做任何改动
--  作者:lin98
--  发布时间:2024/8/12 9:38:00
--  
月结。期初永远放到第一行,这样从第二行开始计算即可
完全不需要期初数这种列,期初值放到第一行的入库列即可

这就有以下问题:
1.如何当前月未结存?每月未或固定日期为25日,就自动结算为:摘要:本月合计,结存数据每种产品日记帐最后一行的数据。
2.如何实现当前表的当前数据转到历史表的数据,当前表的期初数如何获取?
也就表A到月未或次月1日,将其流水数据,全部转给表B,在新一月(次月),表A因为月未或次月做结转清空表,没数据,新月份记帐,如何期初?


此主题相关图片如下:日记帐.png
按此在新窗口浏览图片


--  作者:有点蓝
--  发布时间:2024/8/12 9:43:00
--  
填充数据参考:http://www.foxtable.com/webhelp/topics/1533.htm,填充后把表A清空,然后表A新增一行,记录之前月结的结果,也就是期初值。就是当前表永远只有本月的数据