- 第一種是跟蹤物料清單資料查詢執行過程,獲取到的查詢對應的存儲過程
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成本的銷售報價單