139 lines
3.7 KiB
Transact-SQL
139 lines
3.7 KiB
Transact-SQL
-- 检查存储过程是否存在,存在则删除 P202502080013
|
|
IF OBJECT_ID('dbo.[PR_ResetSALORDERPLAN_MBBA_yuyubo]', 'P') IS NOT NULL
|
|
BEGIN
|
|
DROP PROCEDURE dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo;
|
|
PRINT '存储过程 dbo.[PR_ResetSALORDERPLAN_MBBA_yuyubo] 已删除';
|
|
END;
|
|
GO
|
|
|
|
-- 创建新的存储过程
|
|
CREATE PROCEDURE dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo @saleOrderId INT = 0
|
|
AS
|
|
BEGIN
|
|
-- 1. 声明游标
|
|
DECLARE cursor_name CURSOR FOR
|
|
SELECT a.F_AMOUNT,
|
|
b.F_MBBA_DECIMAL_UKY,
|
|
a.FBILLNO,
|
|
a.FSALEORGID,
|
|
a.F_CONTRACTNUMBER,
|
|
a.FID,
|
|
b.FENTRYID AS wfid,
|
|
b.FRECADVANCEAMOUNT,
|
|
a.F_EXPENSES
|
|
FROM dbo.T_SAL_ORDER a WITH (NOLOCK)
|
|
LEFT JOIN dbo.T_SAL_ORDERPLAN b WITH (NOLOCK)
|
|
ON a.FID = b.FID
|
|
INNER JOIN
|
|
(
|
|
SELECT DISTINCT
|
|
[销售单主键ID],
|
|
[整单累计退货金额],
|
|
[整单正数订单总额]
|
|
FROM [ZRP_YingShouMingXi_yuyubo]
|
|
WHERE [整单正数订单总额] > 0
|
|
) cc
|
|
ON [销售单主键ID] = a.FID
|
|
WHERE (
|
|
ISNULL(a.F_AMOUNT, 0) > 0
|
|
AND [整单正数订单总额] - ISNULL(a.F_AMOUNT, 0) - [整单累计退货金额] > 0
|
|
)
|
|
AND
|
|
(
|
|
a.FID = @saleOrderId
|
|
OR @saleOrderId = 0
|
|
)
|
|
AND b.F_MBBA_DECIMAL_UKY < a.F_AMOUNT
|
|
OR a.FID = @saleOrderId
|
|
ORDER BY a.FID,
|
|
wfid;
|
|
|
|
-- 2. 打开游标
|
|
OPEN cursor_name;
|
|
DECLARE @rowId INT = 0,
|
|
@amount DECIMAL(18, 4) = 0;
|
|
-- 3. 循环获取数据
|
|
DECLARE @F_AMOUNT DECIMAL(18, 2),
|
|
@F_MBBA_Decimal_uky DECIMAL(18, 2),
|
|
@FBILLNO NVARCHAR(200),
|
|
@FSALEORGID INT,
|
|
@F_contractnumber NVARCHAR(500),
|
|
@fid INT,
|
|
@wfid INT,
|
|
@FRecAdvanceAmount DECIMAL(18, 2),
|
|
@F_EXPENSES DECIMAL(18, 6);
|
|
FETCH NEXT FROM cursor_name
|
|
INTO @F_AMOUNT,
|
|
@F_MBBA_Decimal_uky,
|
|
@FBILLNO,
|
|
@FSALEORGID,
|
|
@F_contractnumber,
|
|
@fid,
|
|
@wfid,
|
|
@FRecAdvanceAmount,
|
|
@F_EXPENSES;
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
-- 数据处理逻辑(示例输出)
|
|
--PRINT 'Column1: ' + CAST(@var1 AS VARCHAR) + ', Column2: ' + @var2;
|
|
-- 处理收款核销金额
|
|
IF (@rowId != @fid)
|
|
BEGIN
|
|
SELECT @rowId = @fid,
|
|
@amount = @F_AMOUNT - @F_EXPENSES;
|
|
END;
|
|
PRINT @amount;
|
|
IF (@amount >= @FRecAdvanceAmount)
|
|
BEGIN
|
|
UPDATE T_SAL_ORDERPLAN
|
|
SET F_MBBA_DECIMAL_UKY = @FRecAdvanceAmount
|
|
WHERE FENTRYID = @wfid;
|
|
SELECT @amount = @amount - @FRecAdvanceAmount;
|
|
END;
|
|
ELSE
|
|
BEGIN
|
|
IF (@amount >= 0)
|
|
BEGIN
|
|
UPDATE T_SAL_ORDERPLAN
|
|
SET F_MBBA_DECIMAL_UKY = @amount
|
|
WHERE FENTRYID = @wfid;
|
|
SELECT @amount = 0;
|
|
END;
|
|
ELSE
|
|
BEGIN
|
|
UPDATE T_SAL_ORDERPLAN
|
|
SET F_MBBA_DECIMAL_UKY = 0
|
|
WHERE FENTRYID = @wfid;
|
|
SELECT @amount = 0;
|
|
END;
|
|
|
|
END;
|
|
|
|
-- 获取下一条记录
|
|
FETCH NEXT FROM cursor_name
|
|
INTO @F_AMOUNT,
|
|
@F_MBBA_Decimal_uky,
|
|
@FBILLNO,
|
|
@FSALEORGID,
|
|
@F_contractnumber,
|
|
@fid,
|
|
@wfid,
|
|
@FRecAdvanceAmount,
|
|
@F_EXPENSES;
|
|
END;
|
|
|
|
-- 4. 关闭游标
|
|
CLOSE cursor_name;
|
|
|
|
-- 5. 释放游标资源
|
|
DEALLOCATE cursor_name;
|
|
|
|
|
|
END;
|
|
|
|
|
|
--EXEC dbo.PR_ResetSALORDERPLAN_MBBA_yuyubo @saleOrderId = 0 -- int
|
|
|
|
|
|
--UPDATE T_SAL_ORDERPLAN SET F_MBBA_Decimal_uky=0 |