Foxtable(狐表)用户栏目专家坐堂 → [求助]老师您好请问怎么动态加权平均设计进销存表思路呢


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

主题:[求助]老师您好请问怎么动态加权平均设计进销存表思路呢

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


加好友 发短信
等级:婴狐 帖子:44 积分:358 威望:0 精华:0 注册:2019/8/20 11:03:00
  发帖心情 Post By:2019/9/2 9:29:00 [只看该作者]

不是的老师,只要每次进货价格不一样    销售日期在后面  前面的采购成本都加权平均   可能我开始没描述清楚 谢谢

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/2 9:38:00 [只看该作者]

这样就更简单了,没有必要使用循环。

直接使用compute统计这个销售时间之前的所有采购数据的总金额除以总数量即可

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


加好友 发短信
等级:婴狐 帖子:44 积分:358 威望:0 精华:0 注册:2019/8/20 11:03:00
  发帖心情 Post By:2019/9/2 9:43:00 [只看该作者]

还得把销售日期前面的销售额减掉 除以剩余数量     销售日期前面  (采购总金额-销售总金额  )/剩余数量  =本次加权平均价格   还得写循环吧   初次接触所有多问问

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


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

If e.DataCol.name = "销售数量"
    Dim oldCount As Integer = e.DataTable.Compute("sum(销售数量)","货号='" & e.DataRow("货号") & "' and 日期 < #" & e.DataRow("日期") & "#")
    Dim cnt As Integer = 0
    Dim c1 As Integer = 0
    Dim c2 As Integer = 0
    Dim csum As Double = 0
    Dim drs As List(of DataRow) = DataTables("采购").Select("货号='" & e.DataRow("货号") & "' and 日期 <= #" & e.DataRow("日期") & "#","日期")
    Dim idx As Integer = -1
    For i As Integer = 0 To drs.count - 1
        cnt += drs(i)("数量")
        If cnt > oldCount Then
            idx = i
            Exit For
        End If
    Next
    If idx > -1
        Dim dr As DataRow = drs(idx)
        c1 = cnt - oldCount
        csum = c1 * dr("单价")
        For j As Integer = idx+1 To drs.count - 1
            dr = drs(j)
            c2 = dr("数量")
            csum += c2 * dr("单价")
            c1 += c2
        Next
        e.DataRow("平均价格") = csum / c1
    End If
End If

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


加好友 发短信
等级:婴狐 帖子:44 积分:358 威望:0 精华:0 注册:2019/8/20 11:03:00
  发帖心情 Post By:2019/9/2 11:51:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:调用单价不对.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:第三行加权平均价格不对.png
图片点击可在新窗口打开查看
老师您好~我发现第三行数据开始不对了  我就自己
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:进销存.table

研究了下代码 我觉得   标红色调用单价那个地方有点不对  那个能不能调用后面算好的 加权平均价   我思考了好久实在想不出来怎么把后面的调用过来,再麻烦老师看看   

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


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

这个是您业务的问题,不是代码可以解决的。先确定所谓的加权平均价格的算法是正确的!

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


加好友 发短信
等级:婴狐 帖子:44 积分:358 威望:0 精华:0 注册:2019/8/20 11:03:00
  发帖心情 Post By:2019/9/2 12:28:00 [只看该作者]

好的非常感谢老师耐心指导,我在学习学习研究研究。    咨询个问题  对于我们这些小白 开发系统   学那个程序语言,以前大学学了一点C语言基础,foxtable里面用那些语言方便。

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/2 13:32:00 [只看该作者]

Foxtable使用的是vb.net,编程基础看:http://www.foxtable.com/webhelp/topics/1592.htm

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


加好友 发短信
等级:婴狐 帖子:44 积分:358 威望:0 精华:0 注册:2019/8/20 11:03:00
  发帖心情 Post By:2019/9/2 14:34:00 [只看该作者]

感谢老师耐心指导      我研究出来  在你的思路下 我加了几个代码    实现了
图片点击可在新窗口打开查看此主题相关图片如下:加权平均价好了.png
图片点击可在新窗口打开查看
If e.DataCol.name = "销售数量"
    Dim oldCount As Integer = e.DataTable.Compute("sum(销售数量)","货号='" & e.DataRow("货号") & "' and 日期 < #" & e.DataRow("日期") & "#")
    Dim oldCount1 As Double = e.DataTable.Compute("sum(销售成本)","货号='" & e.DataRow("货号") & "' and 日期 < #" & e.DataRow("日期") & "#")
    Dim cnt As Integer = 0
    Dim c1 As Integer = 0
    Dim c2 As Integer = 0
    Dim csum As Double = 0
    Dim csum1 As Double = 0
    Dim csum2 As Double = 0
    Dim drs As List(of DataRow) = DataTables("采购").Select("货号='" & e.DataRow("货号") & "' and 日期 <= #" & e.DataRow("日期") & "#","日期")
    Dim idx As Integer = -1
    For i As Integer = 0 To drs.count - 1
        cnt += drs(i)("数量")
        csum +=drs(i)("数量")*drs(i)("单价")
        If cnt >= oldCount Then
            idx = i
            Exit For
        End If
    Next
    If idx > -1
        Dim dr As DataRow = drs(idx)
        c1 = cnt - oldCount
        csum1 =csum-oldCount1
        For j As Integer = idx+1 To drs.count - 1
            dr = drs(j)
            c2 = dr("数量")
            csum2 = c2*dr("单价")
            csum1 += csum2
            c1 += c2
        Next
        e.DataRow("平均价格") = csum1 / c1
    End If
End If

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


加好友 发短信
等级:五尾狐 帖子:1085 积分:8220 威望:0 精华:4 注册:2012/3/31 18:08:00
  发帖心情 Post By:2019/9/2 15:17:00 [只看该作者]

这个理解 了算法其实不难,就是当前的余额除以当前的剩余数量,动态算出来的单价,属于会计成本核算的范畴,这个用 SQLCOMPUT就可以搞定的,如果你要核算批次的话还对应的加批次条件就可以,

可以给你提供另一个解决思路:
建一个即时成本表,在做每一张入库单的时候去计算此物料【如果核算批次需要记录批次成本单价】的成本单价,如果没有入库业务发生,出库成本不会变
在做出库的时候直接从此表中取对应的物料成本单价就可以了。


 回到顶部
总数 24 上一页 1 2 3 下一页