以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]老师您好请问怎么动态加权平均设计进销存表思路呢 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140189) |
||||
-- 作者:beyond6018 -- 发布时间:2019/8/31 11:26:00 -- [求助]老师您好请问怎么动态加权平均设计进销存表思路呢 老师您好 我举个例子:我现在有一张采购表,同产品价格每次采购可能不一样哦, 还有一张销售表,我怎么设计动态查询每个月的进销存呢 成本采用加权平均法核算,请老师给个设计指导思路,谢谢!
|
||||
-- 作者:有点蓝 -- 发布时间:2019/8/31 13:54:00 -- 我不懂这些业务,具体怎么计算?使用文字描述一下。并给出实际的结果进行对比 |
||||
-- 作者:beyond6018 -- 发布时间:2019/8/31 15:05:00 -- 老师您好 我截个图 老师您好就是 销售表中的加权平均单价是实时变动的,怎么设计实现呢,谢谢 此主题相关图片如下:进销存表.png |
||||
-- 作者:有点蓝 -- 发布时间:2019/8/31 15:49:00 -- 销售表,datacolchanged事件 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("货号") & "\'","日期") 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("单价") Do While c1 < e.DataRow("销售数量") AndAlso idx <drs.count - 1 idx += 1 dr = drs(idx) c2 = dr("数量") csum += c2 * dr("单价") c1 += c2 Loop e.DataRow("平均价格") = csum / c1 End If End If |
||||
-- 作者:beyond6018 -- 发布时间:2019/8/31 17:51:00 -- 老师您好,您的设计思路 我看明白了,代码放到上面销售表,datacolchanged事件 录入销售数量,平均价格出不来啊,帮忙看看,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2019/9/1 22:02:00 -- 我测试没有问题,旧数据重置一下列 |
||||
-- 作者:beyond6018 -- 发布时间:2019/9/2 8:46:00 -- 非常感谢老师,我是原来 把旧数据销售数量删掉重新输的数量不行 必须的重置列就好了O(∩_∩)O哈哈~ 那我自己设置一个切换表重置列让它自动 |
||||
-- 作者:有点蓝 -- 发布时间:2019/9/2 9:00:00 -- 重新输的数量不行?这个不应该,我测试也没有问题,输了什么数据? |
||||
-- 作者:beyond6018 -- 发布时间:2019/9/2 9:12:00 -- 此主题相关图片如下:销售表没加权.png 老师您好 当我输入第2行销售数据的时候 如果2行销售数量合计大于第1行采购数量它才加权平均 但是要是等于和小于 它不加权平均 它去的是第1行采购的单价 平均成本没加权平均 ?第2行 加权平均应该是88元才对 您帮忙
看看 |
||||
-- 作者:有点蓝 -- 发布时间:2019/9/2 9:23:00 -- 我的理解是按照先进先出原则,第二次输入50个,没有超出采购第一次的数量100,所以仍然是按照采购第一次的数量100的价格80,有什么不对。 |