[E10]展BOM

应朋友邀请(赏金50)帮忙写一个财务分析报表,其中需要用到展BOM。由于需要用SQL语句直接调用,需要写成表值函数。

-- =============================================      
-- Author: <David Gong>      
-- Create date: <2017-05-01>      
-- Description: <展BOM>      
-- =============================================
ALTER  Function [dbo].[GetBomCost2] (@ITEMNO VARCHAR(80))
returns  @Jason table
(
成品品号 VARCHAR(100),  
阶层 VARCHAR(100), 
主件品号 VARCHAR(100),  
元件品号  VARCHAR(100) DEFAULT '',  
品号属性  VARCHAR(100), 
品名 VARCHAR(200) DEFAULT '', 
规格 VARCHAR(200) DEFAULT '',  
单位 VARCHAR(10), 
组成用量 NUMERIC(18,6) DEFAULT 0,  
底数 NUMERIC(18,6) DEFAULT 0,  
损耗率 NUMERIC(18,6) DEFAULT 0,  
累计组成用量 NUMERIC(18,6) DEFAULT 0, 
纳入标准成本 VARCHAR(80) DEFAULT '', 
取替代顺序 VARCHAR(100) DEFAULT '' 

)

BEGIN




--BOM展阶 
--@ITEMNO:查询品号
--返回:元件品号V1001(BOM_D.SOURCE_ID_ROid),主件品号V1002(BOM.ITEM_ID),阶码V1004,阶层次V1005,
--尾阶标志V1006,展开标志V1007,组成用量V1011,底数V1012,损耗率%V1013,纳入标准成本 V1014,取替代顺序 V1015 
DECLARE @ITEM_CHILD VARCHAR(200), @ITEM_EXPAND VARCHAR(200), @ITEM_LEVELNO INT, @COUNT INT
DECLARE @BATCH_NUMBER NUMERIC(18,6)
DECLARE @ITEM_PARENT VARCHAR(200)
DECLARE @V1011 NUMERIC(18,6) ,@V1012 NUMERIC(18,6),@V1013 NUMERIC(18,6),@V1014 VARCHAR(200),
 @V1000 VARCHAR(200)

DECLARE  @VIEW1 TABLE
(
V1000 VARCHAR (200), 
V1001 VARCHAR(200), 
V1002 VARCHAR(200),  
V1004 VARCHAR(200) DEFAULT '',  
V1005 INT DEFAULT 0, 
V1006 CHAR(1) DEFAULT '0', 
V1007 CHAR(1) DEFAULT '0',  
V1011 NUMERIC(18,6) DEFAULT 0, 
V1012 NUMERIC(18,6) DEFAULT 0,  
V1013 NUMERIC(18,6) DEFAULT 0, 
V1014 VARCHAR(200) DEFAULT '', 
V1015 VARCHAR(10) DEFAULT '', 
V1021 VARCHAR(200),  
V1022 VARCHAR(200) 

)
--返回:元件品号V1001(BOM_D.SOURCE_ID_ROid),主件品号V1002(BOM.ITEM_ID),阶码V1004,阶层次V1005,
--尾阶标志V1006,展开标志V1007,组成用量V1011,底数V1012,损耗率%V1013,纳入标准成本 V1014,取替代顺序 V1015 


SELECT @ITEM_LEVELNO = 1
--返回:元件品号V1001,主件品号V1002,阶码V1004,阶层次V1005,尾阶标志V1006,展开标志V1007,组成用量V1011,底数V1012,损耗率%V1013,纳入标准成本 V1014,取替代顺序 V1015 
INSERT INTO @VIEW1 (V1000, V1001,V1002, V1004, V1005, V1011, V1012, V1013,V1014,V1021,V1022)
SELECT @ITEMNO, A.ITEM_CODE,B.ITEM_CODE, SequenceNumber, 1, QTY_PER , DENOMINATOR*STANDARD_BATCH_QTY, DYNAMIC_LOSS_RATE,STANDARD_COST_ITEM,EFFECTIVE_DATE,EXPRITY_DATE 
FROM BOM
left join BOM_D on BOM.BOM_ID = BOM_D.BOM_ID 
left join ITEM  A   ON  SOURCE_ID_ROid=A.ITEM_BUSINESS_ID
left join ITEM  B   ON  ITEM_ID=B.ITEM_BUSINESS_ID
LEFT JOIN PLANT ON REFERENCE_PLANT_ID=PLANT_ID
WHERE  BOM.ApproveStatus='Y' AND PLANT_CODE='101' and B.ITEM_CODE = 'FR10100316101'

DECLARE BOMEXPAND CURSOR FOR SELECT V1000,V1001, V1004, V1005, V1011/V1012,V1014,V1002 FROM @VIEW1 WHERE V1007 = '0' FOR UPDATE

OPEN BOMEXPAND  /* 打开游标 */ 
FETCH NEXT FROM BOMEXPAND INTO @V1000,@ITEM_CHILD, @ITEM_EXPAND, @ITEM_LEVELNO, @BATCH_NUMBER,@V1014,@ITEM_PARENT
WHILE @@FETCH_STATUS = 0   /* 用WHILE循环控制游标活动*/ 
BEGIN
--SELECT @ITEM_LEVELNO, @ITEM_CHILD
UPDATE @VIEW1 SET V1007 = '1' WHERE CURRENT OF BOMEXPAND
SELECT @COUNT = COUNT(*) FROM BOM
left join BOM_D on BOM.BOM_ID = BOM_D.BOM_ID 
left join ITEM ON ITEM_ID=ITEM_BUSINESS_ID
where  ITEM_CODE = @ITEM_CHILD
IF @COUNT = 0 
UPDATE @VIEW1 SET V1006 = '1' WHERE CURRENT OF BOMEXPAND
ELSE
BEGIN

--返回:元件品号V1001,主件品号V1002,阶码V1004,阶层次V1005,尾阶标志V1006,展开标志V1007,组成用量V1011,底数V1012,损耗率%V1013,纳入标准成本 V1014,取替代顺序 V1015 
INSERT INTO @VIEW1 (V1000, V1001,V1002, V1004, V1005, V1011, V1012, V1013,V1014)
SELECT @V1000,A.ITEM_CODE, @ITEM_CHILD, @ITEM_EXPAND + '.' +CAST(SequenceNumber AS CHAR), @ITEM_LEVELNO + 1, QTY_PER * @BATCH_NUMBER, DENOMINATOR*STANDARD_BATCH_QTY, DYNAMIC_LOSS_RATE,
STANDARD_COST_ITEM=(case when @V1014='N' then 'N' else STANDARD_COST_ITEM end)
FROM BOM 

left join BOM_D on BOM.BOM_ID = BOM_D.BOM_ID 
left join ITEM  A   ON  SOURCE_ID_ROid=A.ITEM_BUSINESS_ID
left join ITEM  B   ON  ITEM_ID=B.ITEM_BUSINESS_ID
LEFT JOIN PLANT ON REFERENCE_PLANT_ID=PLANT_ID
WHERE  B.ITEM_CODE = @ITEM_CHILD  and PLANT_CODE='101'  AND BOM.ApproveStatus='Y' 


END




FETCH NEXT FROM BOMEXPAND INTO @V1000,@ITEM_CHILD, @ITEM_EXPAND, @ITEM_LEVELNO, @BATCH_NUMBER,@V1014,@ITEM_PARENT /* 在循环体内将读取其余行数据 */
END
CLOSE BOMEXPAND   /* 关闭游标 */ 
DEALLOCATE BOMEXPAND   /* 删除游标 */ 

Insert into @Jason
(
成品品号 ,   
阶层 ,     
主件品号 ,  
元件品号  ,  
品号属性  , 
品名 , 
规格 ,  
单位 , 
组成用量 ,  
底数 ,  
损耗率 ,  
累计组成用量 , 
纳入标准成本 , 
取替代顺序  

)
 SELECT 
 @ITEMNO 成品品号,  
 space(V1005*1)+'.'+cast(V1005  as varchar)  as 阶层, 
 V1002 as 主件品号, 
 V1001 as 元件品号, 
 CASE ITEM_PLANT.ITEM_PROPERTY 
 WHEN 'M' THEN '自制件' WHEN 'P' THEN '采购件' WHEN 'S' THEN '委外件' ELSE 'Others' END as  品号属性, 
 ITEM.ITEM_NAME, 
 ITEM.ITEM_SPECIFICATION, 
 UNIT_CODE AS 单位 ,
 V1011 as 组成用量, 
 V1012 as 底数, 
 V1013 as 损耗率, 
 V1011/V1012*(1+V1013) as 累计组成用量 , 
 V1014 , 
 V1015   







 from @VIEW1 LEFT JOIN ITEM ON V1001=ITEM.ITEM_CODE
  LEFT JOIN UNIT ON STOCK_UNIT_ID=UNIT_ID
 LEFT JOIN ITEM_PLANT ON ITEM .ITEM_BUSINESS_ID = ITEM_PLANT.ITEM_ID  
 LEFT JOIN PLANT ON ITEM_PLANT.Owner_Org_ROid=PLANT_ID

 where PLANT_CODE='101'  and  ITEM_PLANT.ITEM_PROPERTY ='P' 

-- AND (V1021 IS NULL OR V1021='' OR V1021='') and EXPRITY_DATE  增加生效日期、失效日期的判断;

return 

END
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页
实付 99.00元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值