海关即时库存

drop view [dbo].[z_view_SingleStageBOM]  --删除视图

/*--1、创建BOM单级展开视图z_view_SingleStageBOM,代码如下:*/
create view [dbo].[z_view_SingleStageBOM]
as
select a.FItemID FParentID,		--BOM表.物料内码
b.FItemID,						--BOM分录表.底层物料内码
b.FUnitID,						--BOM分录表.单位内码
b.FAuxQty,						--BOM分录表.显示用量
b.FQty * a.FQty	FQty			--BOM分录表.用量 * BOM表.数量
from ICBOM a					--BOM表
inner join ICBOMChild b			--BOM分录表
on a.FInterID = b.FInterID		--BOM表.BOM内码 = BOM分录表.所属BOM内码
where a.FUseStatus = 1072

/*--2、创建存储过程zp_z_HGJSKC2019_FU,代码如下:*/
create procedure [dbo].[zp_z_HGJSKC2019_FU]

	
as  
set nocount on  

create table #Product  --创建临时表:产品  
(  
FParentID int ,							--父项物料内码
FNumber varchar(80),					--库房代码
FUnitIDfx int,							--父项单位 
FEndQty	decimal (18,6),					--期末结存数量
FItemID int,							--底层物料内码
FUnitID int,							--底层单位 
FAuxqty decimal(18,6),					--底层基本单位用量
FQty decimal(18,6),						--底层用量  
)  

create table #ProductEntry  --创建临时表:产品分录  
(  
FParentID int ,							--父项物料内码
FNumber varchar(80),					--库房代码
FUnitIDfx int,							--父项单位
FEndQty	decimal (18,6),					--期末结存数量
FItemID int,							--底层物料内码
FUnitID int,							--底层单位  
FAuxqty decimal(18,6),					--底层基本单位用量
FQty decimal(18,6),						--底层用量
)


insert into #Product			--向临时表:产品插入记录
(
FParentID,				--父项内码
FNumber,				--库房代码
FUnitIDfx,				--父项单位
FEndQty,				--期末结存数量
FItemID,				--底层内码
FUnitID,				--底层单位 
FAuxqty,				--底层基本单位用量
FQty 					--底层用量
)
select
U1.FParentID,			--父项内码
u3.FNumber,				--库房代码
u3.FUnitID,				--单位内码
u3.FEndQty,				--期末结存数量
U1.FItemID,				--底层内码
U1.FUnitID,				--底层单位
U1.FAuxQty,				--底层基本单位用量
U1.FQty					--底层用量
from z_view_SingleStageBOM U1		--BOM单级展开视图
inner join
(			--自制即时库存
select 
U1.FItemID,				--物料内码
U3.FUnitID,				--单位内码
U2.FNumber,				--库房内码
u2.FName,				--仓库名称
U1.FQty	FEndQty			--存货数量
from ICInventory U1		--存货表
INNER JOIN t_Stock	U2	--仓库表
on U1.FStockID = U2.FItemID
INNER JOIN t_ICItem U3	--物料表
on U1.FItemID = U3.FItemID
where U1.FQty <> 0		--存货数量
AND U3.FErpClsID > 1	--物料属性:1-外购,2-自制,3-委外
) u3							--自制即时库存
on u1.FParentID = u3.FItemID	--BOM表.物料内码 = U3.物料内码

 /*  
select * from #Product  --调试代码  
select * from #ProductEntry  --调试代码   
  
delete #Product  --调试代码  
delete #ProductEntry  --调试代码   
  
drop table #Product  --调试代码  
drop table #ProductEntry  --调试代码  
*/  

DECLARE @ENTRY   varchar(200);
SET @ENTRY = 1
while ( ISNULL(@ENTRY, 'A') <> 'A')
--WHILE 循环 当@ENTRY 等于'A'时跳出循环
--ISNULL判断@ENTRY是否为空,为空则返回函数里的第二个参数的值'A'
BEGIN		--控制流关键字

insert into #ProductEntry			--向临时表:产品插入记录
(
FParentID,				--父项内码
FNumber,				--库房代码
FUnitIDfx,				--父项单位
FEndQty,				--期末结存数量
FItemID,				--底层内码
FUnitID,				--底层单位
FAuxqty,				--底层基本单位用量
FQty 					--底层用量
)
select
u1.FParentID,		--父项物料内码
u1.FNumber,			--库房代码
u1.FUnitIDfx,		--父项单位
u1.FEndQty,			--期末结存数量
(CASE when u2.FItemID is null then u1.FItemID else u2.FItemID end) FItemID,
--判断:BOM单级展开.底层物料内码 如果为空值 则用 u1.FItemID 替代
(CASE when u2.FUnitID is null then u1.FUnitID else u2.FUnitID end) FUnitID,
(CASE when u2.FAuxQty is null then u1.FAuxQty else u2.FAuxQty end) FAuxQty,
(CASE when u2.FQty is null then u1.FQty else u1.FQty*u2.FQty end) FQty
----判断:BOM单级展开.用量 如果为空值 则用 u1.FQty 替代
from #Product u1
left outer join		--左连接
z_view_SingleStageBOM u2			--BOM单级展开
on u1.FItemID = u2.FParentID		--底层内码 = BOM单级展开.父项内码

select @ENTRY = MAX(u2.FItemID)
from #Product u1
left outer join		--左连接
z_view_SingleStageBOM u2			--BOM单级展开
on u1.FItemID = u2.FParentID		--底层内码 = BOM单级展开.父项内码

delete  #Product					---清空产品表 
insert into #Product 
select * from #ProductEntry
delete  #ProductEntry				---清空产品分录表 
END

select 
C1.FName 库位,
F1.FNumber 库存物料代码,
(CASE F1.FErpClsID when 1 then '外购' when 2 then '自制' when 3 then '委外加工' when 5 then '虚拟件'end) as 物料属性,
F1.FName 库存物料名称,
D1.FName 单位,
u1.FEndQty 即时库存,
F2.FNumber 底层物料代码,
F2.FName 底层物料名称,
(CASE F2.FErpClsID when 1 then '外购' when 2 then '自制' when 3 then '委外加工' when 5 then '虚拟件'end) as 底层物料属性,
ISNULL(F2.F_120,'') 底层海关编码,
ISNULL(F2.F_124,'') 底层海关名称,
u1.FAuxQty 底层基本单位用量,
CONVERT(VarChar(200), u1.FQty) 底层物料单位含量,
D2.FName 单位,
u1.FEndQty * u1.FQty 底层物料库存量,
F2.FNetWeight 单重,
(CASE F2.FNetWeight when 0 then u1.FEndQty * u1.FQty else u1.FEndQty * u1.FQty * F2.FNetWeight end) 底层物料海关库存数量
--判断:单重是否为0,如果为0 则不取单重
from
#Product U1							--产品表
left outer join t_ICItem F1			--物料表
on u1.FParentID = F1.FItemID		--产品表.父项内码 = 物料表.物料内码
left outer join t_Stock C1			--仓库表
on u1.FNumber = C1.FNumber		--仓库内码 = 仓库内码
left outer join t_MeasureUnit D1	--计量单位表
on U1.FUnitIDfx = D1.FMeasureUnitID	--产品表.单位 = 单位表.单位内码

left outer join t_ICItem F2			--物料表
on u1.FItemID = F2.FItemID			--产品表.底层内码 = 物料表.物料内码
left outer join t_MeasureUnit D2	--计量单位表
on U1.FUnitID = D2.FMeasureUnitID	--产品表.单位 = 单位表.单位内码
where F2.FErpClsID = 1				--物料属性为 1-外购

union all

select
C1.FName 库位,
F1.FNumber 库存物料代码,
(CASE F1.FErpClsID when 1 then '外购' when 2 then '自制' when 3 then '委外加工' when 5 then '虚拟件'end) as 物料属性,
F1.FName 库存物料名称,
D1.FName 单位,
U1.FQty 即时库存,
F1.FNumber 底层物料代码,
F1.FName 底层物料名称,
(CASE F1.FErpClsID when 1 then '外购' when 2 then '自制' when 3 then '委外加工' when 5 then '虚拟件'end) as 底层物料属性,
ISNULL (F1.F_120, '') 底层海关编码,
ISNULL (F1.F_124, '') 底层海关名称,
'1'底层基本单位用量,
'1' 底层物料单位含量,
D1.FName 单位,
U1.FQty 底层物料库存数量,
F1.FNetWeight 单重,
(CASE F1.FNetWeight when 0 then U1.FQty else U1.FQty * F1.FNetWeight end) 底层物料海关库存数量
--判断:单重是否为0,如果为0 则不取单重
from ICInventory U1					--存货表
left outer join t_ICItem F1			--物料表
on u1.FItemID = F1.FItemID			--库房余额.物料内码 = 物料表.内码
left outer join t_Stock C1			--仓库表
on u1.FStockID = C1.FItemID			--仓库内码 = 仓库内码
left outer join t_MeasureUnit D1	--计量单位表
on F1.FUnitID = D1.FMeasureUnitID	--单位内码
where U1.FQty <> 0		--存货数量
AND F1.FErpClsID = 1	--物料属性:1-外购,2-自制,3-委外

order by 库位, 库存物料代码, 底层物料代码

drop table #Product  --删除 产品表  
drop table #ProductEntry  --删除产品分录表 


/*--K3查询分析工具调用存储过程,代码如下:*/

exec zp_z_HGJSKC2019_FU 

drop procedure zp_z_HGJSKC2019_FU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值