- 第一种是跟踪物料清单资料查询执行过程,获取到的查询对应的存储过程
1.1 这是母件信息查询
1 EXEC sp_executesql N'exec Usp_BO_Bo02020_Root @v_where,@v_CreateUser1,@v_CreateUser2', 2 N'@v_where nvarchar(100),@v_CreateUser1 nvarchar(4000),@v_CreateUser2 nvarchar(4000)', 3 @v_where = N' and 1=1 And ((c.InvCode >= N''999-PCBA'') And (c.InvCode <= N''999-PCBA'')) And (a.Status IN (N''3''))', 4 @v_CreateUser1 = N'', @v_CreateUser2 = N'';
1.2 这是子件信息查询
1 EXEC sp_executesql N'exec Usp_BO_Bo02020_detail @v_BomID,@v_PartID,@v_QueryType,@v_showTDL,@v_llc,@v_effdate,@v_status1,@v_status3,@v_status4,@v_CreateUser,@v_CreateUser1', 2 N'@v_BomID int,@v_PartID int,@v_QueryType int,@v_showTDL int,@v_llc int,@v_effdate datetime,@v_status1 int,@v_status3 int,@v_status4 int,@v_CreateUser nvarchar(4000),@v_CreateUser1 nvarchar(4000)', 3 @v_BomID = 1000008582, @v_PartID = 41498, @v_QueryType = 3, @v_showTDL = 1, 4 @v_llc = 0, @v_effdate = '2015-01-01 00:00:00', @v_status1 = 0, 5 @v_status3 = 3, @v_status4 = 0, @v_CreateUser = N'', @v_CreateUser1 = N'';
其中@v_QueryType 1全阶 2仅显示下一层 3仅显示最底层,@v_where的条件按照示例的格式自己仿照就行了,子件的查询需要传入BomID和PratID,因为系统标准的存储过程查询是考虑自由项的,其他参数说明和具体的执行过程可以直接到数据库中找到对应存储过程查看
- 第二种是网上看到的,自己改了一下
1 DECLARE @partid INT; 2 SELECT @partid = 169; 3 WITH parts ( pbom, pid, cbom, cbid, cid, baseqtyn, baseqtyd, qty, lvl, cdepcode, cwhcode, seq ) 4 AS ( SELECT NULL ,p.ParentId ,p.BomId ,p.BomId ,p.ParentId ,0 ,0 ,0 ,0 ,NULL ,NULL ,0 5 FROM dbo.bom_parent AS p WITH ( NOLOCK ) 6 LEFT JOIN bom_bom AS b WITH ( NOLOCK ) ON b.BomId = p.BomId 7 WHERE b.VersionEffDate <= GETDATE() 8 AND b.VersionEndDate > GETDATE() 9 AND b.BomType = 1 10 UNION ALL 11 SELECT p.BomId , 12 p.ParentId ,cb.BomId ,c.OpComponentId ,c.ComponentId ,c.BaseQtyN ,c.BaseQtyD , 13 qty = ( c.BaseQtyN / c.BaseQtyD ) / ( 1- ISNULL(cb.ParentScrap,0) / 100 ) * ( 1+ ISNULL(c.CompScrap,0) / 100 ) ,--使用数量考虑损耗率 14 0 AS lvl ,bo.DrawDeptCode ,bo.Whcode , 15 CAST(ROW_NUMBER() OVER ( PARTITION BY c.BomId ORDER BY c.SortSeq ) AS INT) AS seq 16 FROM dbo.bom_parent AS p WITH ( NOLOCK ) 17 JOIN dbo.bom_bom AS b WITH ( NOLOCK ) ON b.BomId = p.BomId 18 JOIN dbo.bom_opcomponent AS c WITH ( NOLOCK ) ON c.BomId = p.BomId 19 LEFT JOIN dbo.bom_parent AS cb WITH ( NOLOCK ) ON c.ComponentId = cb.ParentId --关联虚拟件 20 LEFT JOIN dbo.bom_bom AS bc WITH ( NOLOCK ) ON bc.BomId = cb.BomId 21 LEFT JOIN dbo.bom_opcomponentopt bo WITH ( NOLOCK ) ON c.OptionsId = bo.OptionsId --关联子件选项资料 22 WHERE b.VersionEffDate <= GETDATE() 23 AND b.VersionEndDate > GETDATE() 24 AND ( ( bc.VersionEffDate <= GETDATE() 25 AND bc.VersionEndDate > GETDATE() AND bc.BomType = 1)OR bc.BomId IS NULL)), 26 bom 27 AS ( SELECT parts.pid AS ancestor , 28 parts.pbom ,parts.pid ,parts.cbid ,parts.cbom ,parts.cid ,parts.baseqtyn , 29 parts.baseqtyd ,parts.qty ,parts.lvl ,parts.cdepcode ,parts.cwhcode ,CAST('01' AS NVARCHAR(50)) AS pseq 30 FROM parts 31 WHERE parts.pbom IS NULL 32 AND parts.pid = @partid--'999-PCBA' 33 UNION ALL 34 SELECT p.ancestor ,c.pbom ,c.pid ,c.cbid ,c.cbom ,c.cid ,c.baseqtyn ,c.baseqtyd ,c.qty ,p.lvl + 1 ,c.cdepcode ,c.cwhcode , 35 CAST(p.pseq + '.' + RIGHT('00'+ CAST(c.seq AS NVARCHAR(50)),2) AS NVARCHAR(50)) 36 FROM parts AS c 37 JOIN bom AS p ON p.cbom = c.pbom 38 ) 39 SELECT i1.cInvCode 母件编码,i1.cInvName 母件名称,b.cbid ,i2.cinvcode 子件编码,i2.cinvname 子件名称,com.cComUnitName 单位, 40 convert(decimal(18,2),b.baseqtyn) 基本用量,convert(decimal(18,2),b.baseqtyd) 基础用量, 41 convert(decimal(18,2),b.qty) 使用数量,b.lvl 级次,b.cdepcode 部门编码,d.cdepname 部门名称,b.cwhcode 仓库编码,w.cwhname 仓库名称,b.pseq 42 FROM bom AS b 43 LEFT JOIN dbo.bas_part b1 WITH (NOLOCK) ON b.pid=b1.PartId 44 LEFT JOIN dbo.bas_part b2 WITH (NOLOCK) ON b.cid=b2.PartId 45 LEFT JOIN dbo.Inventory i1 WITH (NOLOCK) ON i1.cinvcode=b1.InvCode 46 LEFT JOIN inventory i2 WITH (NOLOCK) ON i2.cInvCode=b2.InvCode 47 LEFT JOIN dbo.ComputationUnit com WITH (NOLOCK) ON com.cComunitCode = i2.cComUnitCode 48 LEFT JOIN dbo.Department d WITH (NOLOCK) ON d.cdepcode=b.cdepcode 49 LEFT JOIN dbo.Warehouse w WITH (NOLOCK) ON w.cWhCode=b.cwhcode 50 ORDER BY b.pseq 51 OPTION ( MAXRECURSION 10 );
同样是传入partid去查询的,需要考虑自由项,如果没有自由项可以改成只传存货编码也可以,这个也可以改良下做成计算BOM成本的销售报价单