Foxtable(狐表)用户栏目专家坐堂 → 流水账与重置列的问题


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

主题:流水账与重置列的问题

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
流水账与重置列的问题  发帖心情 Post By: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

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/10 12:41:00 [只看该作者]

1、加载10W行数据,自己测试哪个更快?

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

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/10 15:03:00 [只看该作者]

2、整个表格只有一个期初值?还是每年、每季、每月都有期初?
帮助-流水帐-实例-库存表的字段:日期,产品,入库,出库,库存
需求-流水帐-库存表的字段:日期,产品,期初数,入库,出库,库存

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

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/10 15:12:00 [只看该作者]

建议做月结。期初永远放到第一行,这样从第二行开始计算即可

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/10 15:53:00 [只看该作者]

5楼6楼的期初数放的位置是否正确?放在哪正确?

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/10 16:30:00 [只看该作者]

完全不需要期初数这种列,期初值放到第一行的入库列即可。代码不需要做任何改动

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/12 9:38:00 [只看该作者]

月结。期初永远放到第一行,这样从第二行开始计算即可
完全不需要期初数这种列,期初值放到第一行的入库列即可

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


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


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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/12 9:43:00 [只看该作者]

填充数据参考:http://www.foxtable.com/webhelp/topics/1533.htm,填充后把表A清空,然后表A新增一行,记录之前月结的结果,也就是期初值。就是当前表永远只有本月的数据

 回到顶部
总数 16 1 2 下一页