半成品进销存

USE [RossERP_R7]
GO
/****** Object: StoredProcedure [dbo].[usp_NFSE] Script Date: 2020-09-01 17:21:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[usp_NFSE]
@ProviderNM varchar(30),--加工商
@MpsID varchar(50),--制单号
@BeginDate date,
@EndDate date

as
IF OBJECT_ID('Temp2019030305', 'U') IS NOT NULL
BEGIN
drop table Temp2019030305
END
IF OBJECT_ID('Temp2019030305Re', 'U') IS NOT NULL
BEGIN
drop table Temp2019030305Re
END

IF OBJECT_ID('Temp2019030305In', 'U') IS NOT NULL
BEGIN
drop table Temp2019030305In
END

IF OBJECT_ID('NFSE05', 'U') IS NOT NULL
BEGIN
drop table NFSE05
END

IF OBJECT_ID('NFSE', 'U') IS NOT NULL
BEGIN
drop table NFSE
END

select ProviderNM,MPSID,WPID,YM into Temp2019030305 from (
select Provider.Name ProviderNM,WWWPOutList.MPSID,WWWPOutList.WPID,format(WWWPOutList.Filldate,'yyyy-MM')YM
from WWWPOutList(nolock)
left join WW(nolock) on WWWPOutList.Matioid = WW.Matioid
inner join Provider(Nolock) ON Provider.ProviderID=ww.ProviderID
where WWWPOutList.state = '已审核' and WWWPOutList.WPID not in('001','002','003') --and WWWPOutList.MPSID='1I730810=BD1'
and CONVERT(varchar(10),WWWPOutList.filldate,120)>'2019-12-01'
and (WWWPOutList.mpsid like '%'+@MpsID+'%' or isnull(@MpsID,'')='')
and (Provider.Name like '%'+@ProviderNM+'%' or isnull(@ProviderNM,'')='')
and (WWWPOutList.Filldate>=@BeginDate or ISNULL(@BeginDate,'')='')
and (WWWPOutList.Filldate<=@EndDate or ISNULL(@EndDate,'')='')
group by Provider.Name,WWWPOutList.MPSID,WWWPOutList.WPID,format(WWWPOutList.Filldate,'yyyy-MM')
union all
Select
provider.Name ProviderNM,wwINList.MPSID,wwINList.WPID,format(WWIn.Filldate,'yyyy-MM')YM
from wwIN(Nolock)
Inner join wwINList(Nolock) On wwIN.MatIOID=wwINList.MatIOID
left join MPSList(nolock) on WWInList.MPSID=MPSList.mpsid and WWInList.MatID=MPSList.matid
left join mmf(nolock) on wwINList.Matid=mmf.Matid
inner join Provider(Nolock) ON Provider.ProviderID=wwIN.ProviderID
where WWIn.State='已入帐' and WWInList.WPID not in('001','002','003') --and WWInList.MPSID='1I730810=BD1'
and CONVERT(varchar(10),WWIn.filldate,120)>'2019-12-01'
and (wwINList.mpsid like '%'+@MpsID+'%' or isnull(@MpsID,'')='')
and (Provider.Name like '%'+@ProviderNM+'%' or isnull(@ProviderNM,'')='')
and (WWIn.Filldate>=@BeginDate or ISNULL(@BeginDate,'')='')
and (WWIn.Filldate<=@EndDate or ISNULL(@EndDate,'')='')
group by provider.Name,format(WWIn.Filldate,'yyyy-MM'),wwINList.MPSID,wwINList.WPID
having sum(isnull(wwINList.GoodQty,0))>0
)NF
group by ProviderNM,MPSID,WPID,YM

select
Provider.Name ProviderNM,--加工商
format(WWWPOutList.Filldate,'yyyy-MM')YM, --发货年月
WWWPOutList.MPSID, --制单号
WWWPOutList.WPID, --工序名称
sum(WWPOutListSize.total) sumtotal --数量
into Temp2019030305Re
from WWWPOutList(nolock)
left join WWPOutListSize(nolock) on WWWPOutList.Matioid = WWPOutListSize.WWID AND
WWWPOutList.MPSID = WWPOutListSize.MPSID AND
WWWPOutList.MPSMatid = WWPOutListSize.MPSMatid AND
WWWPOutList.WPID = WWPOutListSize.WPID AND
WWWPOutList.XH = WWPOutListSize.XH
left join WW(nolock) on WWWPOutList.Matioid = WW.Matioid
inner join Provider(Nolock) ON Provider.ProviderID=ww.ProviderID
where WWpoutlistsize.type = 'A' and WWWPOutList.state = '已审核' and WWWPOutList.WPID not in('001','002','003') --and WWWPOutList.MPSID='1I730810=BD1'
and (WWWPOutList.mpsid like '%'+@MpsID+'%' or isnull(@MpsID,'')='')
and (Provider.Name like '%'+@ProviderNM+'%' or isnull(@ProviderNM,'')='')
and (WWWPOutList.Filldate>=@BeginDate or ISNULL(@BeginDate,'')='')
and (WWWPOutList.Filldate<=@EndDate or ISNULL(@EndDate,'')='')
group by format(WWWPOutList.Filldate,'yyyy-MM'),WWWPOutList.MPSID,Provider.Name,WWWPOutList.WPID

Select
provider.Name ProviderNM,--加工商
format(WWIn.Filldate,'yyyy-MM')YM, --入库年月
wwINList.MPSID, --制单号
wwINList.WPID,--工序号
sum(wwINList.GoodQty) sumtotal --数量
into Temp2019030305In
from wwIN(Nolock)
Inner join wwINList(Nolock) On wwIN.MatIOID=wwINList.MatIOID
left join MPSList(nolock) on WWInList.MPSID=MPSList.mpsid and WWInList.MatID=MPSList.matid
left join mmf(nolock) on wwINList.Matid=mmf.Matid
inner join Provider(Nolock) ON Provider.ProviderID=wwIN.ProviderID
where WWIn.State='已入帐' and WWInList.WPID not in('001','002','003') --and WWInList.MPSID='1I730810=BD1'
and (wwINList.mpsid like '%'+@MpsID+'%' or isnull(@MpsID,'')='')
and (Provider.Name like '%'+@ProviderNM+'%' or isnull(@ProviderNM,'')='')
and (WWIn.Filldate>=@BeginDate or ISNULL(@BeginDate,'')='')
and (WWIn.Filldate<=@EndDate or ISNULL(@EndDate,'')='')
group by provider.Name,format(WWIn.Filldate,'yyyy-MM'),wwINList.MPSID,wwINList.WPID
having sum(isnull(wwINList.GoodQty,0))>0

create table NFSE05
(
ProviderNM varchar(50),YM varchar(20),MpsID varchar(50),WPID varchar(10),BeginQty decimal(12,0),ReQty decimal(12,0),InQty decimal(12,0),EndQty decimal(12,0),rn int
)
insert into NFSE05(ProviderNM,YM,MpsID,WPID,rn) select Temp2019030305.ProviderNM,Temp2019030305.YM,Temp2019030305.MPSID,Temp2019030305.WPID,
ROW_NUMBER() over (partition by providerNM,mpsid,wpid order by ym)rn from Temp2019030305

if exists (select 1 from NFSE05 where rn=1)
begin
update NFSE05 set BeginQty=0,ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(BeginQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
where NFSE05.rn=1
end

if exists (select 1 from NFSE05 where rn=2)
begin
update NFSE05 set BeginQty=ISNULL(NFSE01.EndQty,0),ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(NFSE01.EndQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
left join(
select * from NFSE05
) NFSE01 ON NFSE01.MPSID=NFSE05.MPSID and NFSE01.WPID=NFSE05.WPID and NFSE01.ProviderNM=NFSE05.ProviderNM
and NFSE01.rn+1=NFSE05.rn
where NFSE05.rn=2
end

if exists (select 1 from NFSE05 where rn=3)
begin
update NFSE05 set BeginQty=ISNULL(NFSE01.EndQty,0),ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(NFSE01.EndQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
left join(
select * from NFSE05
) NFSE01 ON NFSE01.MPSID=NFSE05.MPSID and NFSE01.WPID=NFSE05.WPID and NFSE01.ProviderNM=NFSE05.ProviderNM
and NFSE01.rn+1=NFSE05.rn
where NFSE05.rn=3
end

if exists (select 1 from NFSE05 where rn=4)
begin
update NFSE05 set BeginQty=ISNULL(NFSE01.EndQty,0),ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(NFSE01.EndQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
left join(
select * from NFSE05
) NFSE01 ON NFSE01.MPSID=NFSE05.MPSID and NFSE01.WPID=NFSE05.WPID and NFSE01.ProviderNM=NFSE05.ProviderNM
and NFSE01.rn+1=NFSE05.rn
where NFSE05.rn=4
end

if exists (select 1 from NFSE05 where rn=5)
begin
update NFSE05 set BeginQty=ISNULL(NFSE01.EndQty,0),ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(NFSE01.EndQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
left join(
select * from NFSE05
) NFSE01 ON NFSE01.MPSID=NFSE05.MPSID and NFSE01.WPID=NFSE05.WPID and NFSE01.ProviderNM=NFSE05.ProviderNM
and NFSE01.rn+1=NFSE05.rn
where NFSE05.rn=5
end

if exists (select 1 from NFSE05 where rn=6)
begin
update NFSE05 set BeginQty=ISNULL(NFSE01.EndQty,0),ReQty=isnull(Temp2019030305Re.sumtotal,0),InQty=isnull(Temp2019030305In.sumtotal,0),EndQty=isnull(NFSE01.EndQty,0)+isnull(Temp2019030305Re.sumtotal,0)-isnull(Temp2019030305In.sumtotal,0)
from NFSE05
left join Temp2019030305Re on NFSE05.YM=Temp2019030305Re.YM and NFSE05.MPSID=Temp2019030305Re.MPSID and NFSE05.WPID=Temp2019030305Re.WPID and NFSE05.ProviderNM=Temp2019030305Re.ProviderNM
left join Temp2019030305In on NFSE05.YM=Temp2019030305In.YM and NFSE05.MPSID=Temp2019030305In.MPSID and NFSE05.WPID=Temp2019030305In.WPID and NFSE05.ProviderNM=Temp2019030305In.ProviderNM
left join(
select * from NFSE05
) NFSE01 ON NFSE01.MPSID=NFSE05.MPSID and NFSE01.WPID=NFSE05.WPID and NFSE01.ProviderNM=NFSE05.ProviderNM
and NFSE01.rn+1=NFSE05.rn
where NFSE05.rn=6
end
select NFSE05.ProviderNM,NFSE05.YM,MPSList.SOID,NFSE05.MpsID,series.BIGTYPE SeriesNM,MPSList.Qty MpsQty,mmf.Unit,
case when NFSE05.WPID='004' then '车缝' when NFSE05.WPID='005' then '包装' end WPName,Channel.Name ChannelNM,
NFSE05.WPID,
NFSE05.BeginQty,NFSE05.ReQty,NFSE05.InQty,NFSE05.EndQty
from NFSE05
left join MPSList(nolock) on NFSE05.MpsID=MPSList.mpsid
left join mps(nolock) on MPSList.mpsid=mps.mpsid
left join channel(nolock) on mps.ChannelID=Channel.ChannelID
left join mmf(nolock) on MPSList.matid=mmf.Matid
left join series(nolock) on mmf.SeriesID=series.seriesid
order by NFSE05.WPID,NFSE05.YM


--exec usp_NFSE '永群',''

原文地址:https://www.cnblogs.com/wwwlzp/p/13597344.html