ALTER PROCEDURE [dbo].[Report_PPurchaseContract1]
@orgNoIn varchar(20),
@PODocNoIn varchar(20),
@SupplierIn varchar(20),
@ArrivedTimeBeginIn datetime,
@ArrivedTimeEndIn datetime,
@BusinessDateBeginIn datetime,
@BusinessDateEndIn datetime,
@ZjIn varchar(20)
AS
BEGIN if(@OrgNoIn is null and @PODocNoIn is null and @SupplierIn is null and @ArrivedTimeBeginIn is null and @ArrivedTimeEndIn is null and @BusinessDateBeginIn is null and @BusinessDateEndIn is null and @ZjIn is null)
begin
select null as Org,null as OrgName,null as DocNo,null as Supplier_Supplier,null as SupplierName,0 as CRApplyOCMoney_TotalMoney,0 as TotalMnyAC,0 as RcvMnyAC,0 as RcvMnyAC_NonTax,0 as RcvMnyAC_Tax,
0 as APOCMoney_TotalMoney,0 as APOCMoney_NonTax,0 as APOCMoney_Tax,null as DescFlexSegments_PubDescSeg1,null as ZjName,null as shipmentdate,null as BusinessDate
return
end DECLARE @SQL nvarchar(1000)

create table #POIDN
(
ID nvarchar(20),
Org nvarchar(20),
DocNo nvarchar(20),
Supplier_Supplier nvarchar(20),
shipmentdate datetime,
BusinessDate datetime,
DescFlexSegments_PubDescSeg1 nvarchar(20)
)

--采购订单行
create table #POLine
(
ID nvarchar(20),
PurchaseOrder nvarchar(20)
)

--采购收货单行
create table #PM_RcvLine
(
ID nvarchar(20),
Receivement nvarchar(20)
)

set @SQL='select * from (SELECT A.ID, A.Org,A.DocNo, A.Supplier_Supplier, (select top 1 C.NeedPODate from PM_POShipLine as C  left join PM_POLine as B on C.POLine=B.ID where B.PurchaseOrder=A.ID ) as NeedPODate,A.BusinessDate,(select top 1 DescFlexSegments_PubDescSeg1 from PM_POLine where PurchaseOrder=A.ID) as DescFlexSegments_PubDescSeg1 FROM PM_PurchaseOrder as A) as M where 1=1'

--根据参数筛选采购合同
if(@ArrivedTimeBeginIn<>'' and @ArrivedTimeEndIn<>'')
begin
set @SQL=@SQL+' and M.NeedPODate BETWEEN '''+convert(nvarchar(25),@ArrivedTimeBeginIn,120)+''' and '''+convert(nvarchar(25),@ArrivedTimeEndIn,120)+''''
end
if (@BusinessDateBeginIn<>'' and @BusinessDateEndIn<>'')
begin
set @SQL=@SQL+' and M.BusinessDate BETWEEN '''+convert(nvarchar(25),@BusinessDateBeginIn,120)+''' and '''+convert(nvarchar(25),@BusinessDateEndIn,120)+''''
end
if(@ZjIn<>'')
begin
set @SQL=@SQL+' and M.DescFlexSegments_PubDescSeg1='''+@ZjIn+''''
end
if (@PODocNoIn<>'')
begin
set @SQL=@SQL+' and M.DocNo like ''%'+@PODocNoIn+'%'''
end
if(@SupplierIn<>'')
begin
set @SQL=@SQL+' and M.Supplier_Supplier='''+@SupplierIn+''''
end
if (@orgNoIn<>'')
begin
set @SQL=@SQL+' and M.Org='''+@orgNoIn+''''
end

--添加索引列
ALTER table #POIDN add row int identity

declare @ID nvarchar(20)
declare @Org nvarchar(20)
declare @OrgName nvarchar(20)
declare @DocNo nvarchar(20)
declare @Supplier_Supplier nvarchar(20)
declare @SupplierName nvarchar(20)
declare @CRApplyOCMoney_TotalMoney decimal (24,9)
declare @TotalMnyAC decimal (24,9)
declare @RcvMnyAC decimal (24,9)
declare @RcvMnyAC_NonTax decimal (24,9)
declare @RcvMnyAC_Tax decimal (24,9)
declare @APOCMoney_TotalMoney decimal (24,9)
declare @APOCMoney_NonTax decimal (24,9)
declare @APOCMoney_Tax decimal (24,9)
declare @DescFlexSegments_PubDescSeg1 nvarchar(20)
declare @ZjName nvarchar(20)
declare @shipmentdate datetime
declare @BusinessDate datetime

--发票金额
declare @j decimal(24,9)
declare @d decimal(24,9)
declare @jn decimal(24,9)
declare @dn decimal(24,9)
declare @jt decimal(24,9)
declare @dt decimal(24,9)

create table #TotalMoneyJ
(
APOCMoney_TotalMoney decimal(24,9), --总额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)
create table #TaxJ
(
APOCMoney_Tax decimal(24,9), --税额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)
create table #NonTaxJ
(
APOCMoney_NonTax decimal(24,9), --未税额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)
create table #TotalMoneyD
(
APOCMoney_TotalMoney decimal(24,9), --总额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)
create table #TaxD
(
APOCMoney_Tax decimal(24,9), --税额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)
create table #NonTaxD
(
APOCMoney_NonTax decimal(24,9), --未税额
DescFlexField_PrivateDescSeg2 nvarchar(20)
)

insert into #TotalMoneyD select B.APOCMoney_TotalMoney,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=4 --贷
insert into #TotalMoneyJ select B.APOCMoney_TotalMoney,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=5 --借

insert into #TaxD select B.APOCMoney_Tax,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=4 --贷
insert into #TaxJ select B.APOCMoney_Tax,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=5 --借

insert into #NonTaxD select B.APOCMoney_NonTax,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=4 --贷
insert into #NonTaxJ select B.APOCMoney_NonTax,B.DescFlexField_PrivateDescSeg2 from AP_APBillHead as A left join AP_APBillLine as B on A.ID=B.APBillHead where A.DocumentType=5 --借

create table #t (row int identity,Org nvarchar(20),OrgName nvarchar(20),DocNo nvarchar(20),Supplier_Supplier nvarchar(20),SupplierName nvarchar(20),CRApplyOCMoney_TotalMoney decimal(24,9),TotalMnyAC decimal(24,9),RcvMnyAC decimal(24,9),RcvMnyAC_NonTax decimal(24,9),RcvMnyAC_Tax decimal(24,9),
APOCMoney_TotalMoney decimal(24,9),APOCMoney_NonTax decimal(24,9),APOCMoney_Tax decimal(24,9),DescFlexSegments_PubDescSeg1 nvarchar(20),ZjName nvarchar(20),shipmentdate datetime,BusinessDate datetime) 

select id,name into #orgTb from Base_Organization_Trl
select id,name into #SupplierTb from CBO_Supplier_Trl
select A.Code,B.Name into #Zj from CBO_FreeValue as A left join CBO_FreeValue_Trl as B on A.ID=B.ID where A.FreeDef='1'

--插入采购订单临时表数据
set @SQL='insert into #POIDN '+@SQL
exec (@SQL)

declare @p int
set @p=@@identity
while (@p>0)
begin 

print '第'+convert(nvarchar(5),@p)

BEGIN TRANSACTION Tran1
select @ID=ID,@Org=Org,@DocNo=DocNo,@Supplier_Supplier=Supplier_Supplier,@BusinessDate=BusinessDate,@shipmentdate=shipmentdate,@DescFlexSegments_PubDescSeg1=DescFlexSegments_PubDescSeg1 from #POIDN where row=@p
--组织机构
select @OrgName=name from #orgTb where ID=@Org
--供应商
select @SupplierName=name from #SupplierTb where ID=@Supplier_Supplier
--榨季
select @ZjName=Name from #Zj where Code=@DescFlexSegments_PubDescSeg1

select @TotalMnyAC=SUM(ISNULL(TotalMnyAC,0)) from PM_POLine where PurchaseOrder=@ID

insert into #POLine select A.ID,A.PurchaseOrder from PM_POLine A where A.PurchaseOrder=@ID
select @RcvMnyAC=SUM(ISNULL(A.TotalMnyAC,0)),@RcvMnyAC_NonTax=SUM(ISNULL(A.TotalNetMnyAC,0)),@RcvMnyAC_Tax=SUM(ISNULL(A.TotalTaxAC,0)) from PM_RcvLine as A right outer join #POLine as B on A.SrcDoc_SrcDoc_EntityID=B.PurchaseOrder and A.SrcDoc_SrcDocLine_EntityID=B.ID

insert into #PM_RcvLine select A.ID,A.Receivement from PM_RcvLine as A right outer join #POLine as B on A.SrcDoc_SrcDoc_EntityID=B.PurchaseOrder and A.SrcDoc_SrcDocLine_EntityID=B.ID

--删除数据
delete from #POLine

select @APOCMoney_TotalMoney=sum(ISNULL(A.APOCMoney_TotalMoney,0)),@APOCMoney_Tax=sum(ISNULL(A.APOCMoney_Tax,0)),@APOCMoney_NonTax=sum(ISNULL(A.APOCMoney_NonTax,0)) from AP_APBillLine as A right outer join #PM_RcvLine as B on A.SrcBillID=B.Receivement and A.SrcBillLineID=B.ID
 
select @d=SUM(ISNULL(A.APOCMoney_TotalMoney,0)) from #TotalMoneyD A where A.DescFlexField_PrivateDescSeg2=@DocNo--贷
select @j=SUM(ISNULL(A.APOCMoney_TotalMoney,0)) from #TotalMoneyj A where A.DescFlexField_PrivateDescSeg2=@DocNo --借

select @dt=SUM(ISNULL(A.APOCMoney_Tax,0)) from #TaxD A where A.DescFlexField_PrivateDescSeg2=@DocNo--贷
select @jt=SUM(ISNULL(A.APOCMoney_Tax,0)) from #TaxJ A where A.DescFlexField_PrivateDescSeg2=@DocNo --借

select @dn=SUM(ISNULL(A.APOCMoney_NonTax,0)) from #NonTaxD A where A.DescFlexField_PrivateDescSeg2=@DocNo--贷
select @jn=SUM(ISNULL(A.APOCMoney_NonTax,0)) from #NonTaxJ A where A.DescFlexField_PrivateDescSeg2=@DocNo --借

set @APOCMoney_TotalMoney=ISNULL(@APOCMoney_TotalMoney,0)-ISNULL(@j,0)+ISNULL(@d,0)
set @APOCMoney_NonTax=ISNULL(@APOCMoney_NonTax,0)-ISNULL(@jn,0)+ISNULL(@dn,0)
set @APOCMoney_Tax=ISNULL(@APOCMoney_Tax,0)-ISNULL(@jt,0)+ISNULL(@dt,0)

--删除数据
delete from #PM_RcvLine

select @CRApplyOCMoney_TotalMoney=SUM(TotalMoney) from  AP_PayDetail where DocNo=@DocNo 

insert into #t (Org,OrgName,DocNo,Supplier_Supplier,SupplierName,CRApplyOCMoney_TotalMoney,TotalMnyAC,RcvMnyAC,RcvMnyAC_NonTax,RcvMnyAC_Tax,
APOCMoney_TotalMoney,APOCMoney_NonTax,APOCMoney_Tax,DescFlexSegments_PubDescSeg1,ZjName,shipmentdate,BusinessDate)
values (@Org,@OrgName,@DocNo,@Supplier_Supplier,@SupplierName,@CRApplyOCMoney_TotalMoney,@TotalMnyAC,@RcvMnyAC,@RcvMnyAC_NonTax,
@RcvMnyAC_Tax,@APOCMoney_TotalMoney,@APOCMoney_NonTax,@APOCMoney_Tax,@DescFlexSegments_PubDescSeg1,@ZjName,@shipmentdate,@BusinessDate)

COMMIT TRANSACTION Tran1
set @p=@p-1

END
drop table #POLine
drop table #PM_RcvLine
drop table #POIDN
drop table #TotalMoneyD
drop table #TotalMoneyJ
drop table #TaxD
drop table #TaxJ
drop table #NonTaxD
drop table #NonTaxJ select * from #t
END