当前位置: 代码迷 >> 企业开发 >> BOM带库藏算法
  详细解决方案

BOM带库藏算法

热度:2132   发布时间:2013-02-26 00:00:00.0
BOM带库存算法
 
 向你请教一种算法
现在我有一张表bom   mid表示物品编码 ,Cid表示所组成的物品编码,num表示 所需要 Cid物品个数
(举例现有一支笔A,笔由笔帽,笔心,外壳组成,笔心由,油墨,笔心壳组成)这种组合会随不同物品而变化,产生不同的层级) 
   Mid  Cid   num
    A    A1     2
    A    A2     3
    A    A3     3
    A2    A3     3
    A2    A4     3
    A2    A5     3
    A4    A5     3
    A4    A6     3
 .........
表 store 仓库,mid即物品编码  SL表示数量 
Mid    SL
A       2
A1      5
A2      3
A4      1
A5      2
A6      3
 
 现在要求领10个A,程序大致要这样执行,先去store看A的个数,成品有2个,接下来8个要用子原料来生产,A2=3*8  A3=3*8,然后再看A2 A3各自库存数……这样,可以通过哪种算法去实现?
------解决方案--------------------------------------------------------
以下这些代码是从书上抄的,希望对大家有用

--------mrp计算存储过程
CREATE PROCEDURE sf_mrp计算 ( @考虑库存等  bit=1, 
@考虑提前期 bit=1, @考虑损耗 bit=1)
AS
begin tran
--清除
delete from mrp物料需求计算
-- 更新物料清单底层码,计算时使用
update 物料清单 set 低层码 = 0 where 父项编号 = 0
-- 循环10次,根据情况,这里默认bom物料的层级不超过10级
declare @i int
select @i = 1
while (@i<=10)
begin 
update 物料清单 set 低层码 = b.低层码+1 from 物料清单 as a,
(select * from 物料清单) as b 
where a.父项编号 = b.物料编号
select @i = @i + 1
end
--重新生成物料需求计算表,并计算毛需求
-- 低层码代表物料的层级,使用他来循环
insert into mrp物料需求计算(物料编号,年份,计划期,毛需求)
select 物料编号,年份,计划期,sum(MPS数量)
FROM 主生产计划 group by 物料编号,年份,计划期
select @i = 1
while (@i<=10)
begin 
-- 没有的先查入记录,因为一个物料可以对应多个父项
insert into mrp物料需求计算(物料编号,年份,计划期,毛需求)
select distinct b.物料编号,年份,计划期,0
FROM mrp物料需求计算 as a, 物料清单 as b
where rtrim(b.物料编号)+convert(char(4),年份)+
convert(char(2),计划期) not in(select rtrim(物料编号)+
convert(char(4),年份)+convert(char(2),计划期) 
from mrp物料需求计算)
and b.父项编号=a.物料编号 and b.低层码=@i
-- 计算毛需求
-- 注意考虑损耗的情况
update mrp物料需求计算 set 毛需求 = c.毛需求 + d.需求
from mrp物料需求计算 as c, 
(select b.物料编号,年份,计划期,
sum((a.毛需求*b.需要数量)/(1-(case when @考虑损耗=1 then 
isnull(损耗率,0) else 0 end))) as 需求
FROM mrp物料需求计算 as a, 物料清单 as b
where b.父项编号=a.物料编号 and b.低层码=@i
group by b.物料编号,a.年份,a.计划期
) as d
where c.物料编号=d.物料编号 and c.年份=d.年份 and c.计划期=d.计划期

select @i = @i + 1
end
--------------- 不考虑提前期的毛需求计算完成
-- 考虑提前期,计算提前期
--if (@考虑提前期=1) 
--begin
  相关解决方案