以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]BOM物料成本核算  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=102539)

--  作者:yangsion
--  发布时间:2017/6/22 7:40:00
--  [求助]BOM物料成本核算

搞了 好久没弄好,要崩溃了

,需要的效果是,如果是第一层,那么成本就等于单价,这个OK,

如果有下层,那么dr1(“单价“)= dr2单价*dr2数量 之和,卡了好久不知道怎么弄,希望老师大神门帮帮忙

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:bom 测试_201706220247.zip

[此贴子已经被作者于2017/6/22 7:48:31编辑过]

--  作者:有点色
--  发布时间:2017/6/22 9:41:00
--  

 汗,才理解你的意思。为什么要在展开的时候计算?你在bom表里面可以先一次性得到值啊。

 

内部函数 sum

Dim dr As DataRow = args(0)
Dim dt As DataTable = dr.DataTable
Dim dj As Double = dr("单价")
Dim drs As List(of DataRow)
drs = dt.Select("[父键] = \'" & dr("子键") & "\'")
If drs.Count = 0 Then
    Return dr("单价")
Else
    Dim sum As Double = 0
    For Each cdr As DataRow In drs
        sum += Functions.Execute("sum",cdr) * cdr("数量")
    Next
    dr("单价") = sum
    Return sum
End If

 

计算单价代码

Dim dt As DataTable = DataTables("bom")
For Each dr As DataRow In dt.Select("父键 is null")
    Functions.Execute("sum",dr)
Next


--  作者:yangsion
--  发布时间:2017/6/23 0:08:00
--  
这个挺好了,就是没有父键为空的比较多的时候容易闪退
--  作者:有点色
--  发布时间:2017/6/23 0:35:00
--  
以下是引用yangsion在2017/6/23 0:08:00的发言:
这个挺好了,就是没有父键为空的比较多的时候容易闪退

 

闪退应该是因为你的数据【死循环】了吧?比如 A有子健B,B的子健又是A