日期:2014-05-18 浏览次数:20637 次
--bom成本计算?
表一:品号信息档 
品号     品号属性   材料成本   人工成本     本阶人工 
MB001     MB025         MB057       MB058             MB061 
A               M                                                     2 
B               M                                                     1 
C               P                   2 
D               P                   3                               
(MB025=M   时只有本阶人工是基础数据,其他的是计算过来的,MB025=P时只有MB057有基础数据) 
表二(BOM) 
主件品号     元件品号     用量 
A                         B               2(A由2个B组成) 
B                         C               1     (B由1个C和3个D组成) 
B                         D               3 
计算原理: 
1、计算MB025=M   的人工成本,人工成本=本阶人工+下阶人工成本 
2、计算材料成本,材料成本=本阶用到材料+下阶材料之和(如本例 
结果: 
MB001     MB025         MB057       MB058             MB061 
A               M                   22           4                   2 
B               M                   11           1                   1 
C               P                   2             0                   0 
D               P                   3             0                   0 
11=(3D+1C)=11 
22=11*2 
4=2B+2 
go
create table BOM(主件品号 nvarchar(2),元件品号 nvarchar(2), 用量 int)
insert  BOM select 'A','B',2 
insert  BOM select 'B','C',1 
insert  BOM select 'B','D',3 
go
create table product(MB001 nvarchar(2),    MB025  nvarchar(2),  MB057 int,  MB058 int,  MB061 int)
insert product select 'A','M',null,null,   2 
insert product select 'B','M',null,null,  3-----改为3测试 
insert product select 'C','P', 2 ,null,null
insert product select 'D','P', 3 ,null,null
go
go
create function BomTree(@Product nvarchar(2))
returns numeric(18,5)
as
begin
declare @T table(主件品号 nvarchar(2),元件品号 nvarchar(2), 用量 int,lev int)
declare @i int,@num numeric(18,5)
if not exists(select 1 from BOM where 主件品号=@Product)
    begin
        select 
            @num=sum(MB057)
        from 
            product
        where
            MB001=@Product
        return @num
    end
set @i=0
insert @T select 主件品号,元件品号,用量,@i from BOM where 主件品号=@Product
while @@rowcount>0
begin
    set @i=@i+1
    insert @T
    select 
        t2.主件品号,t2.元件品号,t.用量*t2.用量,@i
    from @t t join BOM t2 on t.元件品号=t2.主件品号
    where t.Lev=@i-1
end
select 
    @num=sum(t.用量*case when t2.MB057>0 then t2.MB057  else 1 end)
from 
    @t t 
join 
    product t2 on t.元件品号=t2.MB001
where
    not exists(select 1 from @t where t.元件品号=主件品号)
return @num
end
go
create function BomTree2(@Product nvarchar(2))
returns numeric(18,5)
as
begin
declare @T table(主件品号 nvarchar(2),元件品号 nvarchar(2), 用量 int,lev int)
declare @i in