以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 移动平均单价计算代码求助 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176056) |
||||||||
-- 作者:段虎成 -- 发布时间:2022/3/28 22:23:00 -- 移动平均单价计算代码求助 老师您好,求助一段代码,谢谢!
|
||||||||
-- 作者:有点蓝 -- 发布时间:2022/3/28 22:51:00 -- 业务的东西我不懂。请提供实例,然后说明具体的计算公式 |
||||||||
-- 作者:段虎成 -- 发布时间:2022/3/29 8:27:00 -- 老师您好。附件中有具体的公式,在文档的最后一行。谢谢。 |
||||||||
-- 作者:段虎成 -- 发布时间:2022/3/29 8:42:00 --
老师您好,已经上传案例及公式,请您帮忙,谢谢!
|
||||||||
-- 作者:有点蓝 -- 发布时间:2022/3/29 9:00:00 -- 请以示例的数据说明一下,下面红色的值指的是哪个单元格的数据?比如计算SP002,本产品原有库存金额指的是哪个数据? 每个产品的【库存_单价】 = (本产品原有库存金额 + 本产品本次入库金额 ) / (本产品原库存数量 + 本产品本次入库数量) 每个产品本次领用【出库_单价】 = 本产品本次领用前的库存单价 |
||||||||
-- 作者:段虎成 -- 发布时间:2022/3/29 11:37:00 -- 比如产品SP002: 1、本产品原有库存金额指的是:列【库存—金额】(也就是在本产品入库或者出库时,本产品上一行中的列【库存-金额】对应的值) 2、本产品原库存数量指的是:列【库存—数量】(也就是在本产品入库或者出库时,本产品上一行中的列【库存-数量】对应的值) 3、本产品本次入库金额是:当前增加行对应的列【入库—金额】 4、本产品本次入库数量是:当前增加行对应的列【入库—数量】 5、本产品本次领用前的库存单价:列【库存—单价】(也就是在本产品入库或者出库时,本产品上一行中的列【库存-单价】对应的值)
|
||||||||
-- 作者:有点蓝 -- 发布时间:2022/3/29 12:03:00 -- 参考流水账的用法即可:http://www.foxtable.com/webhelp/topics/2136.htm |
||||||||
-- 作者:段虎成 -- 发布时间:2022/3/29 13:18:00 -- \' 即时库存数量计算 Select Case e.DataCol.Name Case "物料编号","入库_数量","出库_数量" Dim drs As List(of DataRow) Dim Filter As String Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [物料编号] = \'" & e.DataRow("物料编号") & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [物料编号] = \'" & dr("物料编号") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(入库_数量)",Filter) Dim Val2 As Double = e.DataTable.Compute("Sum(出库_数量)",Filter) dr("库存_数量") = Val1 - Val2 Next If e.DataCol.Name = "物料编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [物料编号] = \'" & e.OldValue & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [物料编号] = \'" & dr("物料编号") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(入库_数量)",Filter) Dim Val2 As Double = e.DataTable.Compute("Sum(出库_数量)",Filter) dr("库存_数量") = Val1 - Val2 Next End If End Select 这个数量我调出来了,但是单价的代码我没调出来。麻烦老师给添加一下单价部分代码
|
||||||||
-- 作者:有点蓝 -- 发布时间:2022/3/29 13:41:00 -- 请按照流水账的用法。8楼的代码没有获取上一行 Select Case e.DataCol.Name Case "收入","支出" Dim dr As DataRow Dim drs As List(of DataRow) dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") \'找出上一行 If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行 e.DataRow("余额") = e.DataRow("收入") - e.DataRow("支出") dr = e.DataRow End If drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]") For i As Integer = 1 To drs.Count - 1 \'重算余下行的余额 drs(i)("余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出") \'这里的drs(i-1)就是上一行 Next End Select |