以下附件内容为2023年4月11日分享的BOM计算存储过程脚本,大家可以下载到本地后根据实际情况进行新建调整
20240312024351384-execbom.sql_.zip
zip文件
959B
alter PROCEDURE Exec_BOM
@serial varchar(20), --需求计划号
@material_id varchar(20), --物料编号
@request decimal(20,2) = 1, --物料需求数量
@current_level decimal(5,0) = 0, --当前计算层级
@level decimal(5,0) = 0 --需求计算层级
AS
BEGIN
set @current_level=@current_level+1
--根据层级,判断本级是否写入到结果中
if @current_level=@level
begin
insert into UDT_M_116 values(131,0,@serial,@material_id,@request,@current_level)
end
else
begin
--建立物料信息临时表
create table #materialInfo(
id varchar(20),
request decimal(20,2)
)
--获取该物料在BOM表中的记录号
declare @reportId int
select @reportId = RID from UDT_S_109 where UDF_S_179=@material_id
--获取该物料需要的所有下级物料
insert into #materialInfo
select UDF_M_184,UDF_M_187 from UDT_M_110 where RID=@reportId
--判断是否含有下级,没有则将自己写入到结果中
if @@ROWCOUNT>0
begin
--指针递归遍历所有下级物料
declare @info_id varchar(20), @info_request decimal(20,2)
--定义指针(local参数一定要记得)
declare my_cursor cursor local for select * from #materialInfo
open my_cursor
fetch my_cursor into @info_id,@info_request
while @@FETCH_STATUS=0
begin
--设置下一级需要的数量
set @info_request=@info_request*@request
--递归计算
exec Exec_BOM @serial,@info_id,@info_request,@current_level,@level
fetch my_cursor into @info_id,@info_request
end
close my_cursor
deallocate my_cursor
end
else
begin
--不再递归遍历下级物料并将自己写入结果表
insert into UDT_M_116 values(131,0,@serial,@material_id,@request,@current_level)
end
--释放临时表
drop table #materialInfo
end
END
GO
如需要体验,可以下载压缩包,支持LocalDB或SQL Server2014以上版本
20240312024309201-bom.zip.zip
zip文件
602.1K
2023-4-11物料需求计划
- bom是什么
物料清单,用于记录一个项目用到的所有下级材料 - bom计算最小组成
物料信息、BOM、需求计划 - bom计算过程
基于Workfine的存储过程
编写 - 思考:结合库存、允许使用库存中间件
原文地址
Workfine每日分享(0411)BOM计算课件 – 服务中心
请登录后查看回复内容