新手——刚开始研究BOM,不对之处还望各位博友不吝赐教

1、创建BOM父项表    ——FID,FItemID

create table HWbom
(
FId int identity(1,1),
FItemID int
)

2、创建BOM子项表    ——FID,FOrgID,FParentID,FLevel,FSN,FItemID,FQty,FBOMInterID,FEntryID

create table HWbomchild
(FID int identity(1,1),FOrgID int,FParentID int,FLevel int,FSN nvarchar(200),FItemID int,FQty decimal(28,19),FBOMInterID int,FEntryID int
)

3、将父项BOM对应的物料内码插入父项表(可带条件)

--t_ICItem——物料表
--t_item——基础资料主表
--icbom——BOM表
--ICBOMGROUP——BOM组别表--物料表FErpClsID  物料属性(1-外购,2-自制,3-委外加工,5-虚拟件)
--基础资料主表    fdeleted   是否删除(0,未删除)
--基础资料主表    FItemClassID    对应编码:
--1-客户
--2-部门
--3-职员
--4-商品
--5-仓位
--7-单位
--8-供应商
--基础资料主表    FDetail 是否明细(1,明细)-- delete from HWbom                                                            INSERT INTO HWbom ( FItemID ) SELECT
t.Fitemid
FROMt_ICItem t --71615INNER JOIN t_item t5 ON t5.FItemID = t.FitemidLEFT JOIN icbom t6 ON t6.fitemid= t.FitemidLEFT JOIN ICBOMGROUP t7 ON t7.finterid= t6.fparentid
WHEREt.FErpClsID IN ( 1, 2, 3, 5 ) --2代表自制件,3代表委外件,5代表虚拟件AND t5.FItemClassID= 4 AND t5.FDeleted= 0 AND t5.FDetail= 1 --类型是4(商品),未删除,明细是1 --and t5.fnumber in('物料编码1','物料编码2')  --可根据需要限定BOM范围ORDER BYt.fnumber 

4、根据父项表数据,将数据插入子项表,为后续卷算做准备

 INSERT INTO HWbomchild ( FOrgID, FParentID, FSN, FItemID, FQty, FBOMInterID, FEntryID, FLevel ) SELECTFId,- 1 AS FParentID,'001',u1.FItemID,1 AS Fqty,t1.FInterID AS FBOMInterID,- 1 AS FEntryID,0
FROMHWbom u1LEFT JOIN ICBOM t1 ON u1.FItemID= t1.FItemID AND t1.FUseStatus= 1072 

5、BOM卷算

DECLARE@LEVEL INT SET @LEVEL = 1WHILEEXISTS ( SELECT 1 FROM HWbomchild WHERE FLevel = @LEVEL - 1 AND FItemID IN ( SELECT Fitemid FROM icbom WHERE FUseStatus = 1072 ) ) AND @LEVEL < 20 BEGININSERT INTO HWbomchild ( FOrgID, FParentID, FSN, FItemID, FQty, FBOMInterID, FEntryID, FLevel ) SELECTu1.FOrgID,u1.FID,u1.FSN+ '.' + RIGHT ( '000' + CONVERT ( nvarchar ( 50 ), t2.Fentryid ), 3 ),t2.Fitemid,u1.FQty* ( t2.FQty/ t1.FQty ) / ( 1-t2.FScrap/ 100 ),t2.FInterID,t2.FEntryID,@LEVEL FROMHWbomchild u1INNER JOIN icbom t1 ON u1.FItemID= t1.FItemIDINNER JOIN ICBOMChild t2 ON t2.FInterID= t1.FInterID WHEREu1.FLevel=@LEVEL - 1 AND t1.FUseStatus= 1072 SET @LEVEL =@LEVEL + 1 END 

6、最终BOM展开数据检索

SELECTt2.FModel 专机号,t4.FBOMNumber BOM编号,t2.FNumber 产品代码,t2.FName 产品名称,t1.FSN 序号,t3.FNumber 材料代码,t3.FName 材料名称,t3.FModel 材料规格,t1.FQty 产品用量,yy.fname 材料属性,t5.FQty 单位用量,t5.FScrap 损耗率,t6.FName AS 是否跳层,t5.FNote 备注,t5.FPositionNo 位置号 FROMHWbom u1INNER JOIN HWbomchild t1 ON u1.FId= t1.FOrgIDINNER JOIN t_icitem t2 ON t2.FItemID= u1.FItemIDINNER JOIN t_ICItem t3 ON t3.FItemID= t1.FItemIDLEFT JOIN ICBOM t4 ON t4.FInterID= t1.FBOMInterIDLEFT JOIN ICBOMChild t5 ON t5.FInterID= t1.FBOMInterID AND t5.FEntryID= t1.FEntryIDLEFT JOIN t_SubMessage t6 ON t6.FInterID= t4.FBOMSkipINNER JOIN t_SubMessage yy ON yy.FInterID= t3.FErpClsID
where t2.FModel='EYY33/04/S.515'
AND T4.FUseStatus = 1072
and t4.FBomType <> 3 --FBomType;0-普通,1-配置类,2-生产规划类,3-客户BOM,4-特征类
-- and t4.fitemid=t2.fitemid
-- and t4.FBOMNumber = 'BOM019979'order by u1.FId,t1.FSN

7、最后清空父项表和子项表数据

TRUNCATE TABLE HWbom --清空附表数据
TRUNCATE TABLE HWbomchild --清空子表数据

8、如果不再使用,可以将这两个表删除

DROP TABLE HWbom --删除父表
DROP TABLE HWbomchild --删除子表

9、依据BOM号或规格型号查询某bom所有层级物料价格——注意这只能查询出BOM字表单层级的

在以上1-8以需求选取基础上创建一个定时任务每天实时同步BOM,其中的参数如下,注释的为依据BOM查询,第一条为规格型号查询

AND t2.FModel='ATD60L/19.300.E01'
-- and t4.fitemid=t2.fitemid
-- and t4.FBOMNumber = 'BOM019979'

with bb as(
(
select
t2.FModel 专机号,
t4.FBOMNumber BOM编号,
t2.FNumber 产品代码,
t2.FName 产品名称,
t1.FSN 序号,
t3.FNumber 材料代码,
t3.FName 材料名称,t3.FModel 材料规格
,t1.FQty 产品用量,yy.fname 材料属性,
t5.FQty 单位用量,
t5.FScrap 损耗率,
t6.FName as 是否跳层,
t5.FNote 备注,
t5.FPositionNo 位置号from HWbom u1
inner join HWbomchild t1 on u1.FId=t1.FOrgID
inner join t_icitem t2 on t2.FItemID=u1.FItemID
inner join t_ICItem t3 on t3.FItemID=t1.FItemID
left join ICBOM t4 on t4.FInterID=t1.FBOMInterID
left join ICBOMChild t5 on t5.FInterID=t1.FBOMInterID and t5.FEntryID=t1.FEntryID
left join t_SubMessage t6 on t6.FInterID=t4.FBOMSkip
inner join t_SubMessage yy on yy.FInterID=t3.FErpClsID
--left join pp on pp.FNumber=t3.FNumber
where T4.FUseStatus = 1072 and t4.FBomType <> 3 --FBomType;0-普通,1-配置类,2-生产规划类,3-客户BOM,4-特征类
AND t2.FModel='ATD60L/19.300.E01'
-- and t4.fitemid=t2.fitemid
-- and t4.FBOMNumber = 'BOM019979'
))
select bb.*,pp.FName,pp.FPrice from bb
left join (
select zz.*
from(
SELECT v1.FNumber AS FSupplyNumber,t1.FModel,v1.FName,
u1.FPrice,
t1.FNumber AS FItemNumber,
u1.FLastModifiedDate,
t1.FName AS FItemName, row_number ( ) OVER ( partition BY t1.FNumber,v1.FNumber ORDER BY u1.FLastModifiedDate DESC ) Suquence
FROM t_SupplyEntry u1 INNER JOIN t_Supplier v1 ON u1.FSupID=v1.FItemIDINNER JOIN t_Supply u2 ON u1.FSupID = u2.FSupID AND u1.FItemID=u2.FItemID AND u1.FPType=u2.FPTypeINNER JOIN t_ICItem t1 ON u2.FItemID = t1.FItemIDINNER JOIN t_MeasureUnit t2 ON u1.FUnitID = t2.FItemIDINNER JOIN t_Currency t3 ON u1.FCyID = t3.FCurrencyIDINNER JOIN t_Currency u3 ON u3.FCurrencyID = u2.FCurrencyIDLEFT JOIN ICSupOperation t7 on u1.FEntryID=t7.FIDLEFT JOIN t_item t5 ON t1.FParentID=t5.FItemIDLEFT JOIN t_User U ON u1.FLastModifiedBy = U.FUserIDLEFT JOIN t_SubMessage t8 ON t7.FOpID=t8.FInterIDLEFT JOIN t_User uu ON uu.FUserID <> 0 AND u1.FCheckerID = uu.FUserIDWHERE v1.FStatus<>1074  and u1.FPType = '1')zzwhere zz.Suquence=1
)pp on bb.材料代码=pp.FItemNumber

10、若要实现多级展开需要捋顺BOM的层级逻辑关系

BOM主表与子表之间可能只是存储了一层的关联关系;通过BOM主子表关联出来这一层后,这一层中所包含的物料很可能是个组件对应的是另一个BOM需要对它进行再次的展开

通过关联关系将子表中对应的物料id查询出,可再通过关联关系查询出对应物料的用料信息,价格信息

因为每个物料对应的BOM很可能是不一致的所以多级展开无法使用BOM进行查询,此处我使用的是规格型号,可自己再往上加条件

with bb as(
select distinct cc.FItemID from HWbomchild cc
inner join t_ICItem t3 on t3.FItemID=cc.FItemID
where cc.FBOMInterID in(
selectdistinct t1.FBOMInterIDfrom HWbom u1
inner join HWbomchild t1 on u1.FId=t1.FOrgID
inner join t_icitem t2 on t2.FItemID=u1.FItemID
inner join t_ICItem t3 on t3.FItemID=t1.FItemID
left join ICBOM t4 on t4.FInterID=t1.FBOMInterID
left join ICBOMChild t5 on t5.FInterID=t1.FBOMInterID and t5.FEntryID=t1.FEntryID  --添加与BOM分组表关联
left join t_SubMessage t6 on t6.FInterID=t4.FBOMSkip
inner join t_SubMessage yy on yy.FInterID=t3.FErpClsID
--left join pp on pp.FNumber=t3.FNumber
where T4.FUseStatus = 1072 and t4.FBomType <> 3 --FBomType;0-普通,1-配置类,2-生产规划类,3-客户BOM,4-特征类
AND t2.FModel='ADW77K')
)
select aa.FItemID,aa.FModel,aa.FName,aa.FNumber,aa.FDeleted,aa.FErpClsID,FUnitID,FUseState,aa.FFullName from bb left join t_ICItem aa on aa.FItemID = bb.FItemID
left join (
select zz.*
from(
SELECT v1.FNumber AS FSupplyNumber,t1.FModel,v1.FName,
u1.FPrice,
t1.FNumber AS FItemNumber,
u1.FLastModifiedDate,
t1.FName AS FItemName, row_number ( ) OVER ( partition BY t1.FNumber,v1.FNumber ORDER BY u1.FLastModifiedDate DESC ) Suquence
FROM t_SupplyEntry u1 INNER JOIN t_Supplier v1 ON u1.FSupID=v1.FItemIDINNER JOIN t_Supply u2 ON u1.FSupID = u2.FSupID AND u1.FItemID=u2.FItemID AND u1.FPType=u2.FPTypeINNER JOIN t_ICItem t1 ON u2.FItemID = t1.FItemIDINNER JOIN t_MeasureUnit t2 ON u1.FUnitID = t2.FItemIDINNER JOIN t_Currency t3 ON u1.FCyID = t3.FCurrencyIDINNER JOIN t_Currency u3 ON u3.FCurrencyID = u2.FCurrencyIDLEFT JOIN ICSupOperation t7 on u1.FEntryID=t7.FIDLEFT JOIN t_item t5 ON t1.FParentID=t5.FItemIDLEFT JOIN t_User U ON u1.FLastModifiedBy = U.FUserIDLEFT JOIN t_SubMessage t8 ON t7.FOpID=t8.FInterIDLEFT JOIN t_User uu ON uu.FUserID <> 0 AND u1.FCheckerID = uu.FUserIDWHERE v1.FStatus<>1074  and u1.FPType = '1')zzwhere zz.Suquence=1
)pp on aa.FNumber=pp.FItemNumber

金蝶K3 Wise—BOM批量多级展开相关推荐

  1. 金蝶K3 WISE BOM多级展开_BOM成本表

    /****** Object: StoredProcedure [dbo].[pro_bobang_BOMCost] Script Date: 07/29/2015 16:09:11 ******/ ...

  2. 多层bom展开_金蝶K3 WISE BOM多级展开_BOM成本表

    /****** Object: StoredProcedure [dbo].[pro_bobang_BOMCost] Script Date: 07/29/2015 16:09:11 ******/ ...

  3. 金蝶K3 WISE 视频教程-金速鹏-专题视频课程

    金蝶K3 WISE 视频教程-409人已学习 课程介绍         系统基础:系统安装.部署,账套.用户及权限,金蝶企业云平台,基础资料.系统设置.初始化.k3BOS初步. 供应链:采购.仓储.销 ...

  4. 关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法

    关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法 1. 找到以下路径 ...\Kingdee\K3ERP\KDHR\SITEFILE\WEBUI\ 找到"Login. ...

  5. 金蝶K3 WISE 15.1金蝶K3 15.1金蝶K3 V15.1 金蝶K3 WISE 15.0金蝶K3 15.0金蝶K3 V15.0 14.3/14.2/14.1/14.0/13.1/13.0 12

    金蝶K3 WISE 15.1金蝶K3 15.1金蝶K3 V15.1 金蝶K3 WISE 15.0金蝶K3 15.0金蝶K3 V15.0 14.3/14.2/14.1/14.0/13.1/13.0 12 ...

  6. 玩转金蝶K3 WISE API接口

    目录 VB版测试 Delphi版测试 C#版测试 Java版(手机客户端)测试 基于API的服务程序 开发自己的API接口 金蝶K3 WISE 从14.3版本开始提供API接口,实现企业上下游(供应商 ...

  7. 金蝶K3 WISE 15版本用户手册

    金蝶K3 WISE 15版本用户手册 网盘 提取码:fsoh

  8. 金蝶k3 wise 15.0单据序时簿二维码打印后打印预览时提示没有注册类

    金蝶K3 wise 15.0 销售出库单打开二维码打印后这个界面在点击布局设计或打印预览时提示没有注册类,提示如下: 解决方案: 请在K3安装目录C:\Program Files (x86)\King ...

  9. 金蝶K3 WISE版本过服务期后打补丁方法

    因为新的金蝶补丁全部加壳,在服务期内的通过验证后,可以打补丁.超过服务期的,正常是打不了的,可以通过如下方法变通处理下: 1.找一台已经装好补丁的客户端(如果找不到,那就用金蝶服务器也行).将客户端下 ...

  10. 金蝶K3 WISE创新管理平台各个版本补丁情况数据探讨

    拿到一份截止5月底的金蝶补丁清单文件,顺便看下数据: 下图为金蝶WISE各版本的补丁数,从补丁数量看,13.1这个版本表现还不错:14以上版本因为上市比较晚,数据看看就得了,注意14.2版本,产品大改 ...

最新文章

  1. vscode:解决操作git总让输入用户名及密码问题
  2. webstorm小技巧
  3. 2020-11-4(安卓开发)
  4. Spring获取JavaBean的xml形式和注解形式
  5. php编程模式,PHP编程之-设计模式简单实例
  6. NSOperation队列实实现多线程
  7. lua脚本移植到linux平台,如何将lua移植到arm平台的linux内核
  8. 【TDA4系列】CCS 最新版本安装与教程地址
  9. CentOS下du 和 df 的区别
  10. prison break
  11. 【Novel AI】基于Koishi的QQ群配置AI绘图机器人方法
  12. 微信小程序——增删改
  13. Linux可重入函数
  14. 打开.md格式文件的方式
  15. 7000字,详解仓湖一体架构!
  16. RISC-V学习笔记【简介】
  17. 《本草纲目拾遗》清代医学家赵学敏编著
  18. MyEclipse 2015 Windows版下载地址(已更新最新版Stable 3.0)
  19. JavaEE笔记——快递管理系统架构
  20. Nginx+Tomcat集群的安装与配置

热门文章

  1. 计算1~20阶乘的和
  2. Java 输入输出流 解决中文乱码问题【不一定详细但一定实用篇】【全文4800字】
  3. 利用Python进行游戏脚本编程,不愧是最强的脚本语言!
  4. 流媒体-RTMP协议-librtmp库学习(二)
  5. 在Delphi中开发使用多显示器的应用程序[转]
  6. 超级推荐!!值得收藏的黑客系列书:《黑客攻防实战xx》系列图书简介,一共4本
  7. 来自Intouch小菜鸟的第一篇Blog——报表制作
  8. 计算机怎么开启tftp服务器,Win7系统如何开启TFTP服务器?
  9. 24小时动手学prezi入门到精通+破解(全能“破解”软件)
  10. 室内设计优美语句_关于室内设计的名言