Piolot_RepotForm_PeiHao/非C#代码文件/收款单核销流水存储过程.sql
2025-08-06 21:45:33 +08:00

280 lines
11 KiB
Transact-SQL

-- 检查存储过程是否存在,存在则删除 P202502080013
IF OBJECT_ID('dbo.[PR_YingShouSBU_yuyubo]', 'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.PR_YingShouSBU_yuyubo;
PRINT '存储过程 dbo.[PR_YingShouSBU_yuyubo] 已删除';
END
GO
-- 创建新的存储过程
CREATE PROCEDURE dbo.PR_YingShouSBU_yuyubo @BeginDATE DATETIME='2024-01-01'
AS
BEGIN
DELETE [ZZZ_HeXiaoBook] WHERE [ShouKuanFDate]>=@BeginDATE
DECLARE @FDATE DATETIME,@FBILLNO NVARCHAR(200),@ShouKuanFID INT,@FSALEORGID INT ,@F_contractnumber NVARCHAR(2000),@fid2 INT,@fid3 INT,@amount DECIMAL(18,2),@hexiao DECIMAL(18,2)
,@remark NVARCHAR(200);
-- 1. 声明游标
DECLARE cursor_name2 CURSOR FOR
SELECT FDATE,FBILLNO,FID,FSALEORGID,F_contractnumber,FREMARK FROM T_AR_RECEIVEBILL
WHERE FDOCUMENTSTATUS='C' AND FDATE>=@BeginDATE
ORDER BY FDATE
OPEN cursor_name2;
FETCH NEXT FROM cursor_name2
INTO @FDATE,
@FBILLNO,
@ShouKuanFID,
@FSALEORGID,
@F_contractnumber,@remark
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @hexiao=0;
---销售的自动核销记录单--
SELECT @fid2=0,@fid3=0;
SELECT @fid2=FID FROM dbo.T_AutoWrireRecordEntry2 WHERE FBILLNO3=@FBILLNO
IF(@fid2>0)
begin
SELECT @FDATE=ISNULL(F_YeWuDate,FCREATEDATE),@fid3=FID FROM T_AutoWrireRecord
WHERE FID=@fid2 AND FDOCUMENTSTATUS='C'
IF(@fid3>0)
BEGIN
SELECT @hexiao=1;
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT a.fid,a.FBILLNO,a.F_CONTRACTNUMBER,@ShouKuanFID,@FBILLNO,@FDATE
,(CASE WHEN b.FALLAMOUNT22<c.FALLAMOUNT33 THEN b.FALLAMOUNT22 ELSE c.FALLAMOUNT33 END)
,@FSALEORGID,'销售的自动核销记录单',@fid2,dd.FExchangeRate,FSettleCurrId,FLocalCurrId,0
,head.F_NOTE
FROM T_SAL_ORDER a
LEFT JOIN T_AutoWrireRecordEntry b ON a.FBILLNO=b.FBILLNO2
LEFT JOIN T_AutoWrireRecordEntry2 c ON b.FID=c.FID
LEFT JOIN T_SAL_ORDERFIN dd ON a.FID=dd.FID
LEFT JOIN T_AutoWrireRecord head ON b.FID=head.FID
WHERE b.FID=@fid2 AND c.FBILLNO3=@FBILLNO )
END
end
------发货通知单的核销记录单--------------
SELECT @fid2=0,@fid3=0,@F_contractnumber='',@amount=0;
SELECT @fid2=FID FROM dbo.VRYF_t_Cust_Entry100025 WHERE FBILLNO3=@FBILLNO
SELECT @FDATE=ISNULL(F_YeWuDate,FCREATEDATE),@fid3=FID FROM VRYF_t_Cust100015
WHERE FID=@fid2 AND FDOCUMENTSTATUS='C'
IF(@fid3>0)
BEGIN
SELECT @F_contractnumber=FCONTRACTNUMBER,@amount=FALLAMOUNT22 FROM VRYF_t_Cust_Entry100024 a WHERE a.FID=@fid2
SELECT @hexiao=@amount;
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT a.fid,a.FBILLNO,a.F_CONTRACTNUMBER,@ShouKuanFID,@FBILLNO,@FDATE,@amount,@FSALEORGID,'发货通知单的核销记录单',@fid2, dd.FExchangeRate,FSettleCurrId,FLOCALCURRID,0
,@remark FROM T_SAL_ORDER a
LEFT JOIN T_SAL_ORDERFIN dd ON a.FID=dd.FID
WHERE a.FSALEORGID=[FSaleOrgId] and a.F_CONTRACTNUMBER=@F_contractnumber)
END
-----应收核销记录表---------
SELECT @fid2=0,@fid3=0,@F_contractnumber='',@amount=0;
SELECT d.FDATE,FBILLFORMID, FVERIFYSEQ,FSOURCETYPE,FCURWRITTENOFFAMOUNTFOR,FCURWRITTENOFFAMOUNT,FSRCBILLNO,b.FEXCHANGERATE,FCURTAXMATCHAMOUNT,FCURNOTAXMATCHAMOUNT ,FSRCBILLID
INTO #temp2
FROM T_AR_RECMacthLog a
LEFT JOIN dbo.T_AR_RECMACTHLOGENTRY b ON a.FID=b.FID
LEFT JOIN T_BAS_BILLTYPE c ON b.FSOURCETYPE=c.FBILLTYPEID
LEFT JOIN t_AR_RECEIVEBILL d ON d.FBILLNO=b.FSRCBILLNO
WHERE FVERIFYSEQ IN (SELECT FVERIFYSEQ FROM T_AR_RECMacthLog a
LEFT JOIN dbo.T_AR_RECMACTHLOGENTRY b ON a.FID=b.FID WHERE b.FSRCBILLNO=@FBILLNO AND b.FSOURCETYPE='36cf265bd8c3452194ed9c83ec5e73d2')
--SELECT * FROM #temp2
--SELECT @amount= SUM(FCURWRITTENOFFAMOUNT) FROM #temp2 WHERE FBILLFORMID !='AR_RECEIVEBILL'
SELECT @fid2=FSRCBILLID,@fid3=FVERIFYSEQ FROM #temp2 WHERE FBILLFORMID ='AR_receivable'
--SELECT @F_contractnumber= F_PAPERPRO FROM T_AR_receivable WHERE fid=@fid2
--PRINT '合同号:'+@F_contractnumber;
IF(@fid2>0)
BEGIN
SELECT @hexiao=1;
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT a.fid,a.FBILLNO,a.F_CONTRACTNUMBER,@ShouKuanFID,@FBILLNO,@FDATE,FALLAMOUNTFOR_D,@FSALEORGID,'应收核销记录表',@fid3
,dd.FEXCHANGERATE,FSettleCurrId,FLOCALCURRID,0 ,@remark
FROM T_SAL_ORDER a
LEFT JOIN T_SAL_ORDERFIN dd ON a.FID=dd.FID
LEFT JOIN
(SELECT c.FSALEORGID,ak.F_PAPER ,c.FID,SUM(ak.FALLAMOUNTFOR) FALLAMOUNTFOR_D FROM T_AR_receivable c
LEFT JOIN T_AR_RECEIVABLEENTRY ak ON c.FID=ak.FID
GROUP BY c.FSALEORGID,ak.F_PAPER ,c.FID
) c
ON c.F_PAPER=a.F_CONTRACTNUMBER AND c.FSALEORGID=a.FSALEORGID
LEFT JOIN #temp2 d ON d.FSRCBILLID=c.fid AND d.FBILLFORMID ='AR_receivable'
WHERE a.FSALEORGID=@FSALEORGID AND d.FBILLFORMID='AR_receivable')
END
ELSE
BEGIN
SELECT @fid2=FSRCBILLID,@fid3=FVERIFYSEQ,@hexiao=FCURWRITTENOFFAMOUNTFOR FROM #temp2 WHERE FSRCBILLNO=@FBILLNO AND FBILLFORMID='AR_RECEIVEBILL'
IF(@fid2>0)
BEGIN
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT 0,'','',@ShouKuanFID,@FBILLNO,@FDATE,@hexiao,@FSALEORGID,'特殊核销只有收款单',@fid3
,d.FEXCHANGERATE,FCURRENCYID,FMAINBOOKCURID,0 ,@remark
FROM T_AR_RECEIVEBILL d
WHERE d.FBILLNO=@FBILLNO)
END
end
DROP TABLE #temp2
--------------收款单来源明细--------
IF(@hexiao=0)
begin
SELECT @fid2=a.FID FROM T_AR_RECEIVEBILL a LEFT JOIN T_AR_RECEIVEBILLSRCENTRY b ON a.FID=b.FID
WHERE a.fid=@ShouKuanFID
IF(@fid2>0)
BEGIN
SELECT @hexiao=1;
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT aa.fid,aa.FBILLNO,aa.F_CONTRACTNUMBER,@ShouKuanFID,@FBILLNO,@FDATE,b.FREALRECAMOUNT,@FSALEORGID,'收款单来源明细',@fid2
,dd.FEXCHANGERATE,FSettleCurrId,FLOCALCURRID,0 ,@remark
FROM T_AR_RECEIVEBILL a LEFT JOIN T_AR_RECEIVEBILLSRCENTRY b ON a.FID=b.FID
LEFT JOIN dbo.T_SAL_ORDER aa ON b.FSRCBILLID=aa.FID
LEFT JOIN T_SAL_ORDERFIN dd ON aa.FID=dd.FID
WHERE a.fid=@ShouKuanFID AND b.FREALRECAMOUNT <>0 )
END
end
--------历史核销记录单--------------
IF(@FSALEORGID=100302)
begin
SELECT @hexiao=1;
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
( SELECT a.fid,a.FBILLNO,a.F_CONTRACTNUMBER,@ShouKuanFID,@FBILLNO,@FDATE,F_shareAmount,@FSALEORGID,'历史核销记录单',c.FEntryID ,dd.FEXCHANGERATE,FSettleCurrId,FLOCALCURRID,0 ,@remark
FROM T_SAL_ORDER a
LEFT JOIN VRYF_t_Cust_Entry100021 c ON a.F_CONTRACTNUMBER=c.F_ORDERNO
LEFT JOIN T_SAL_ORDERFIN dd ON a.FID=dd.FID
WHERE a.FSALEORGID=@FSALEORGID AND c.F_Receiptnumber=@FBILLNO )
END
-- 获取下一条记录
FETCH NEXT FROM cursor_name2
INTO @FDATE,
@FBILLNO,
@ShouKuanFID,
@FSALEORGID,
@F_contractnumber
,@remark;
END
-- 4. 关闭游标
CLOSE cursor_name2;
-- 5. 释放游标资源
DEALLOCATE cursor_name2;
--SELECT a.XiaoShouFid,a.XiaoShouBillNo,[XiaoShouHeTong],a.ShouKuanFDate,b.预计到期时间,b.到期时间 FROM [ZZZ_HeXiaoBook] a
--LEFT JOIN (SELECT b.销售单主键ID,MAX(b.预计到期时间) AS 预计到期时间 ,max (b.到期时间) AS 到期时间 FROM [ZRP_YingShouMingXi_yuyubo] b GROUP BY 销售单主键ID) b
--ON a.XiaoShouFid=b.销售单主键ID
--ORDER BY a.XiaoShouFid
UPDATE [ZZZ_HeXiaoBook] SET ZhangLing= ISNULL( ROUND( DATEDIFF(DAY,[到期时间],[ZZZ_HeXiaoBook].ShouKuanFDate) / 30,0) ,0 )
FROM (SELECT a.XiaoShouFid,a.XiaoShouBillNo,[XiaoShouHeTong],a.ShouKuanFDate,b.预计到期时间,b.到期时间 FROM [ZZZ_HeXiaoBook] a
LEFT JOIN (SELECT b.销售单主键ID,MAX(b.预计到期时间) AS 预计到期时间 ,max (b.到期时间) AS 到期时间 FROM [ZRP_YingShouMingXi_yuyubo] b GROUP BY 销售单主键ID) b
ON a.XiaoShouFid=b.销售单主键ID) b
WHERE [ZZZ_HeXiaoBook].XiaoShouFid=b.XiaoShouFid
--------以下是特殊核销----------
SELECT FVERIFYDATE,FBILLFORMID, FVERIFYSEQ,FSOURCETYPE,FCURWRITTENOFFAMOUNTFOR,FCURWRITTENOFFAMOUNT,FSRCBILLNO,b.FEXCHANGERATE,FCURTAXMATCHAMOUNT,FCURNOTAXMATCHAMOUNT ,FSRCBILLID,a.FMATCHMETHODID
INTO #temp222
FROM T_AR_RECMacthLog a
LEFT JOIN dbo.T_AR_RECMACTHLOGENTRY b ON a.FID=b.FID
LEFT JOIN T_BAS_BILLTYPE c ON b.FSOURCETYPE=c.FBILLTYPEID
WHERE a.FMATCHMETHODID=30
AND a.FVERIFYSEQ NOT IN
(SELECT DISTINCT FVERIFYSEQ from T_AR_RECMacthLog oo LEFT JOIN T_AR_RECMACTHLOGENTRY ll ON oo.FID=ll.FID
LEFT JOIN T_BAS_BILLTYPE c ON ll.FSOURCETYPE=c.FBILLTYPEID
WHERE FBILLFORMID='AR_RECEIVEBILL'
)
ORDER BY a.FVERIFYSEQ
INSERT INTO [dbo].[ZZZ_HeXiaoBook]
([XiaoShouFid]
,[XiaoShouBillNo]
,[XiaoShouHeTong]
,[ShouKuanFid]
,[ShouKuanBillNo]
,[ShouKuanFDate]
,[BenCiHeXiao]
,[FSaleOrgId],Note,NoteFid,FExchangeRate,FSettleCurrId,FLOCALCURRID,[ShouKuanType],Remark)
(
SELECT a.fid,a.FBILLNO,a.F_CONTRACTNUMBER,d.FVERIFYSEQ,d.FSRCBILLNO,FVERIFYDATE,FCURWRITTENOFFAMOUNTFOR,a.FSALEORGID,'特殊核销没有收款单',FVERIFYSEQ
,dd.FEXCHANGERATE,FSettleCurrId,FLOCALCURRID,0 ,''
FROM T_SAL_ORDER a
LEFT JOIN T_SAL_ORDERFIN dd ON a.FID=dd.FID
INNER JOIN
(SELECT c.FSALEORGID,ak.F_PAPER ,c.FID,SUM(ak.FALLAMOUNTFOR) FALLAMOUNTFOR_D FROM T_AR_receivable c
LEFT JOIN T_AR_RECEIVABLEENTRY ak ON c.FID=ak.FID
GROUP BY c.FSALEORGID,ak.F_PAPER ,c.FID
) c
ON c.F_PAPER=a.F_CONTRACTNUMBER AND c.FSALEORGID=a.FSALEORGID
INNER JOIN #temp222 d ON d.FSRCBILLID=c.fid AND d.FBILLFORMID ='AR_receivable'
WHERE d.FBILLFORMID='AR_receivable' AND a.FDOCUMENTSTATUS='C'
--AND d.FVERIFYSEQ=109376
ORDER BY d.FVERIFYSEQ
)
--SELECT * FROM #temp222
--WHERE FVERIFYSEQ=109376
DROP TABLE #temp222
SELECT FVERIFYDATE,FBILLFORMID, FVERIFYSEQ,FSOURCETYPE,FCURWRITTENOFFAMOUNTFOR,FCURWRITTENOFFAMOUNT,FSRCBILLNO,b.FEXCHANGERATE,FCURTAXMATCHAMOUNT,FCURNOTAXMATCHAMOUNT ,FSRCBILLID,a.FMATCHMETHODID
FROM T_AR_RECMacthLog a
LEFT JOIN dbo.T_AR_RECMACTHLOGENTRY b ON a.FID=b.FID
LEFT JOIN T_BAS_BILLTYPE c ON b.FSOURCETYPE=c.FBILLTYPEID
WHERE a.FVERIFYSEQ =100135
END