SBO代销供应商请款明细SQL

业务场景:代销业务,供应商以销售结款。
 
前提:同一物料只由一家代销商提供。
 
--第一步:更新首选供应商,如果一个物料在2家购买,参数 T1.cardcode=@supplier无效
--update oitm set cardcode=U0.首选供应商
--from (select 重复次数=count(M0.[CardCode]),M0.[ItemCode],首选供应商=max(M0.[CardCode])
--from (SELECT T0.[CardCode], T0.[ItemCode] FROM OINM T0 WHERE T0.[TransType] =20 GROUP BY T0.[CardCode] , T0.[ItemCode]) M0
--group by M0.[ItemCode] having count(M0.[CardCode])=1) U0 left join OITM
--on OITM.itemcode=U0.[ItemCode]
--where oitm.cardcode is null
--第二步:代销供应商根据销售找到采购
DECLARE @BeginDate DATETIME,@EndDate DATETIME ,@supplier nvarchar(20)
SET @BeginDate =/* FROM OINM T0 WHERE T0.DocDate >= */ '[%0]'
SET @EndDate = /* FROM OINM T1 WHERE T1.DocDate <= */ '[%1]'
SET @supplier = /* FROM OCRD T2 WHERE T2.CARDCODE <= */  '[%2]'
select
E0.过账日期,
E0.类型,
E0.交易单号,
E0.交易类型,
E0.物料编号,
E0.物料描述,
E0.[收货/发货数量],
E0.采购单价,
采购金额=E0.[收货/发货数量]*E0.采购单价,
E0.批次序列号,
E0.仓库代码,
E0.供应商代码,
参考=E0.交易值*1.17
from
(SELECT 
过账日期=T0.[DocDate],
类型=case
when T0.[TransType]=13 then 'IN'--'应收发票' --OINV
when T0.[TransType]=14 then 'CN'--'应收贷项' --ORIN
when T0.[TransType]=15 then 'DN'--'销售交货' --ODLN
when T0.[TransType]=16 then 'RE'--'销售退货' --ORDN
when T0.[TransType]=17 then '销售订单' --ORDR
when T0.[TransType]=18 then 'PU'--'采购发票' --OPCH
when T0.[TransType]=19 then 'PC'--'采购贷项' --ORPC
when T0.[TransType]=20 then 'PD'--'采购收货' --OPDN
when T0.[TransType]=21 then 'PR'--'采购退货' --ORPD
when T0.[TransType]=22 then '采购订单' --OPOR
when T0.[TransType]=59 then 'SI'--'库存收货' --OIGN
when T0.[TransType]=60 then 'SO'--'库存发货' --OIGE
when T0.[TransType]=67 then 'IM'--'物料转储' --OWTR
when T0.[TransType]=162 then '库存重估'--OMRV
--RC收款ST盘点BC期末结转JE财务
end,
交易单号=T0.[CreatedBy] ,
交易类型=case
when T0.[TransType]=13 then '应收发票' --OINV
when T0.[TransType]=14 then '应收贷项' --ORIN
when T0.[TransType]=15 then '销售交货' --ODLN
when T0.[TransType]=16 then '销售退货' --ORDN
when T0.[TransType]=17 then '销售订单' --ORDR
when T0.[TransType]=18 then '采购发票' --OPCH
when T0.[TransType]=19 then '采购贷项' --ORPC
when T0.[TransType]=20 then '采购收货' --OPDN
when T0.[TransType]=21 then '采购退货' --ORPD
when T0.[TransType]=22 then '采购订单' --OPOR
when T0.[TransType]=59 then '库存收货' --OIGN
when T0.[TransType]=60 then '库存发货' --OIGE
when T0.[TransType]=67 then '物料转储' --OWTR
when T0.[TransType]=162 then '库存重估'--OMRV
end,
物料编号=T0.[ItemCode],
物料描述=T0.[Dscription],
[收货/发货数量]=T0.[OutQty]-T0.[InQty],
采购单价=case
when T1.[ManSerNum]='Y' then
 --序列号
  (SELECT top 1 价格=case
  when oSRI.[BaseType]=20 then (select DJ.[PriceAfVAT] from PDN1 DJ where DJ.DocEntry=oSRI.[BaseNum] and DJ.LineNum=oSRI.[BaseLinNum]) 
  when oSRI.[BaseType]=14 then (select DJ.[PriceAfVAT] from RIN1 DJ where DJ.DocEntry=oSRI.[BaseNum] and DJ.LineNum=oSRI.[BaseLinNum])
  when oSRI.[BaseType]=59 then (select DJ.[PriceAfVAT] from IGN1 DJ where DJ.DocEntry=oSRI.[BaseNum] and DJ.LineNum=oSRI.[BaseLinNum]) end
  FROM oSRI  where oSRI.itemcode=T0.itemcode and  oSRI.SysSerial=(SELECT top 1 SRI1.SysSerial FROM SRI1 where  SRI1.BaseType=T0.[TransType] and SRI1.BaseEntry=T0.[BASE_REF] and SRI1.BaseLinNum= T0.[DocLineNum]))
when T1.[ManBtchNum]='Y' then  --批次
  (select DJ.[PriceAfVAT] from PDN1 DJ where
  DJ.DocEntry=(SELECT top 1 D2.BaseNum FROM IBT1 D2 where D2.BatchNum=(SELECT top 1 D1.BatchNum FROM IBT1 D1 where  D1.BaseType=T0.[TransType] and D1.BaseEntry=T0.[BASE_REF] and D1.BaseLinNum= T0.[DocLineNum]) and D2.Itemcode=T0.[ItemCode]  and D2.BaseType=20)
  and DJ.LineNum=(SELECT top 1  D2.BaseLinNum FROM IBT1 D2 where D2.BatchNum=(SELECT top 1 D1.BatchNum FROM IBT1 D1 where  D1.BaseType=T0.[TransType] and D1.BaseEntry=T0.[BASE_REF] and D1.BaseLinNum= T0.[DocLineNum]) and D2.Itemcode=T0.[ItemCode]  and D2.BaseType=20))
end,
交易单价= T0.[CalcPrice],
交易值=[TransValue],
批次序列号=case
when T1.[ManSerNum]='Y' then  (SELECT top 1 S0.[IntrSerial] FROM SRI1 S1 inner join oSRI S0 on S0.SysSerial=S1.SysSerial and S0.itemcode= S1.itemcode where  S1.BaseType=T0.[TransType] and S1.BaseEntry=T0.[BASE_REF] and S1.BaseLinNum= T0.[DocLineNum])
when T1.[ManBtchNum]='Y' then (SELECT top 1 D1.[BatchNum] FROM IBT1 D1 where  D1.BaseType=T0.[TransType] and D1.BaseEntry=T0.[BASE_REF] and D1.BaseLinNum= T0.[DocLineNum]) --批次
end,
仓库代码=T0.[Warehouse],
供应商代码=T1.cardcode
FROM OINM T0  INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
WHERE T0.[InQty]-T0.[OutQty]<>0
and  T0.[DocDate] >=@BeginDate
and  T0.[DocDate]< =@EndDate
and T1.cardcode=@supplier
and (T0.[TransType]=13 or T0.[TransType]=14 or T0.[TransType]=59 or T0.[TransType]=60  or T0.[TransType]=162)
) E0

本文出自 “阚山” 博客,转载请与作者联系!

你可能感兴趣的:(sql,明细,Sbo,代销供应商,请款付款)