多版本BOM成本计算   MSSQL2000版本
SELECT  BILLID,GOODSID,QTY,BOMVER,BOMVERNAME,IBILLID,IITEMNO   FROM  M_BOM  ---BOM主表
单据ID号,货品ID,数量,版本号,版本名,? , ?
BILLID,GOODSID,QTY,BOMVER,BOMVERNAME,IBILLID,IITEMNO 
86 87 1.0 A A NULL NULL   ---版本A
87 90 1.0 D D 86 3
88 92 1.0 F F 87 2
161 87 1.0 A2 A2 NULL NULL   ---版本A2
163 92 1.0 F2 F2 NULL NULL
164 90 1.0 D2 D2 NULL NULL
SELECT  BILLID,ITEMNO,GOODSID,QTY,BOMID  FROM  M_BOMD   ---BOM从表
单据ID,序号, 货品ID,数量,对应版本ID号,单价
BILLID,ITEMNO,GOODSID, QTY,    BOMID    PRICE
86 1 88 1.0 NULL  ,  1
86 2 89 1.0 NULL  ,  1
86 3 90 1.0 87    ,  0
87 1 91 1.0 NULL  ,  1
87 2 92 1.0 88    ,  0
88 1 93 2.0 NULL  ,  1
161 1 88 1.0 NULL  ,  1
161 2 89 1.0 NULL  ,  1
161 3 90 2.0 164   ,  0
163 1 93 4.0 NULL  ,  1
164 1 91 1.0 NULL  ,  1
164 2 92 1.0 163   ,  0
164 3 95 1.0 NULL  ,  2说明: M_BOM.BILLID=M_BOMD.BILLID 时表示母件与子件的关系
如BILLID=86时 (货品ID87 由货品88、89、90组成)M_BOMD细表BILLID=86,BOMID=87表示该货品有下级清单并且BILLID是87,
同理细表BOMID=163
如此循环下去的。货品87版本号A由88、89、90组成;货品90由91、92组成;货品92由2个93组成。货品87版本号A2由88、89、2个90组成;货品90由91、92、95组成;货品92由4个93组成。
要求通过函数分别计算出货品87版本号A和A2的成本单价(由最下层开始往上推算)
BILLID , MGOODSID  ,  MQTY  BOMVER , BOMVERNAME , DGOODSID  ,  DQTY  , DRPICE , DAMT
86 , 87    ,  1.0  , A  ,  A         ,   88      ,   1    ,   ?    ,  ?
86 , 87    ,  1.0  , A  ,  A         ,   89      ,   1    ,   ?    ,  ?
86 , 87    ,  1.0  , A  ,  A         ,   90      ,   1    ,   ?    ,  ?

解决方案 »

  1.   

    请参考http://topic.csdn.net/u/20090828/20/623DE9A7-B417-4AF5-ADFF-B1D19F28172D.html
    这个贴,现在需求是多版本的(就是主产品有多个配方的),谢谢!!
      

  2.   

    看你的描述信息,不知道你的表结构是什么设计的?BOM表结构设计是非常重要,表设计得好,代码编写起来简单,如果设计不好,那就意味着用函数或弟归函数来处理,这就给成本计算带来很多麻烦了如果表设计得好,一对父子表关系就可以把BOM结构存储了,所有的BOM信息通过父子的关系,可以在这对表里查询出来
      

  3.   

    tony哥最近没见,或许有马甲在
      

  4.   

    BOM高难度的,努力向大家学习学习!也希望有高手能写个程序