Piolot_Order_TH/SQL/GZTH_XMYSBSave项目预算概算利润表存储过程.sql
2025-09-16 14:53:46 +08:00

332 lines
34 KiB
Transact-SQL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.


/****** Object: StoredProcedure [dbo].[GZTH_XMYSBSave] Script Date: 2025/9/8 19:42:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GZTH_XMYSBSave]
@FID VARCHAR(50) -- 假设FID是VARCHAR类型根据实际情况调整
AS
BEGIN
--更新标准成本字段
DECLARE @BZCB DECIMAL(23,10)
SELECT @BZCB = SUM(ISNULL(B.FQTY,0) * ISNULL(F_SETTLEMENTP,0))
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100031 B ON A.FID = B.FID
INNEr JOIN T_BD_MATERIAL C ON B.FMATERIALID = C.FMATERIALID
WHERE C.FNUMBER LIKE 'H%' AND A.FID = @FID
UPDATE A
SET A.F_VRYF__BZCB_1xj = ROUND(ISNULL(@BZCB,0),2)
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
PRINT '更新定制成本字段'
--更新定制成本字段
UPDATE A
SET A.F_VRYF__DZCB_zc5 =
CASE
WHEN ISNUMERIC(F_DZCBText) = 1 AND F_DZCBText != '' THEN CONVERT(DECIMAL(23, 10), F_DZCBText)
ELSE 0.000
END
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID;
UPDATE A
SET A.F_VRYF__DZCB_zc5 = B.F_VRYF_AMOUNT_XK9
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
where B.F_VRYF_Amount_xk9 <> 0 AND A.FID = @FID AND B.F_VRYF_Assistant_qtr = '68469e34078377'
--更新投标费用
UPDATE A
SET A.F_VRYF_Amount_uky = ISNULL(B.F_VRYF_Amount_xk9,0)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_Assistant_qtr = C.FENTRYID
WHERE C.FENTRYID = '68497392031a07' AND A.FID = @FID
--更新技术支持费
UPDATE A
SET A.F_VRYF_Amount_dvn = ISNULL(B.F_VRYF_Amount_xk9,0)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_Assistant_qtr = C.FENTRYID
WHERE C.FENTRYID = '68494cf80311f8' AND A.FID = @FID
--更新项目管理费字段
UPDATE A
SET A.F_XMGLF = ISNULL(B.F_VRYF_Amount_xk9,0)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_Assistant_qtr = C.FENTRYID
WHERE C.FENTRYID = '682e8396bd709f' AND A.FID =@FID
--更新施工安装费
UPDATE A
SET A.F_SGAZF =ISNULL(B.F_VRYF_Amount_xk9,0)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_Assistant_qtr = C.FENTRYID
WHERE C.FENTRYID = '682e83afbd70b6' AND A.FID = @FID
--更新外包费
UPDATE A
SET A.F_VRYF_Amount_re5 = B.F_VRYF_Amount_xk9
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
WHERE A.FID = @FID AND B.F_VRYF_Assistant_qtr = '682e83e4bd70cb'
--更新施工成本
UPDATE A
SET A.F_SGCB = A.F_VRYF_Amount_re5 + A.F_SGAZF
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID ;
--更新施工成本
UPDATE A
SET A.F_SGCB =0
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID AND A.F_SGCB =''
--更新产品成本
UPDATE A
SET A.F_CPCB = ROUND(A.F_VRYF__BZCB_1xj + F_VRYF__DZCB_zc5 , 2)
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
--更新技术调试人工字段
--对实施人天和设计人天进行赋值
update A
SET A.F_SSRT = B.F_VRYF_Qty_yrr
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_ASSISTANT_QTR = C.FENTRYID
where C.FENTRYID = '682e83f5bd70ce' AND A.FID = @FID AND (F_VRYF_CheckBox_qtr = 1)
update A
SET A.F_SJRT = B.F_VRYF_Qty_yrr
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
INNER JOIN T_BAS_ASSISTANTDATAENTRY_L C ON B.F_VRYF_ASSISTANT_QTR = C.FENTRYID
where C.FENTRYID = '68469e29078375' AND A.FID = @FID AND (F_VRYF_CheckBox_qtr = 1)
--更新明细的实施人天和设计人天的单价和金额
UPDATE B
SET B.F_VRYF_Qty_yrr = CAST(ISNULL(A.F_SSRT, '0.00') AS float)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
WHERE B.F_VRYF_Assistant_qtr = '682e83f5bd70ce'AND A.FID = @FID
UPDATE B
SET B.F_VRYF_Qty_yrr = CAST(ISNULL(A.F_SJRT, '0.00') AS float)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100038 B ON A.FID = B.FID
WHERE B.F_VRYF_Assistant_qtr = '68469e29078375'AND A.FID = @FID
--实施人天
update VRYF_t_Cust_Entry100038
SET F_VRYF_Price_zc5 = 800
where F_VRYF_Assistant_qtr = '682e83f5bd70ce'AND FID = @FID AND F_VRYF_Price_zc5 = 0
--设计人天
update VRYF_t_Cust_Entry100038
SET F_VRYF_Price_zc5 = 800
where F_VRYF_Assistant_qtr = '68469e29078375'AND FID = @FID AND F_VRYF_Price_zc5 = 0
--实施人天金额
update VRYF_t_Cust_Entry100038
SET F_VRYF_Amount_xk9 = F_VRYF_Qty_yrr * F_VRYF_Price_zc5
where F_VRYF_Assistant_qtr = '682e83f5bd70ce'AND FID = @FID
--设计人天金额
update VRYF_t_Cust_Entry100038
SET F_VRYF_Amount_xk9 = F_VRYF_Qty_yrr * F_VRYF_Price_zc5
where F_VRYF_Assistant_qtr = '68469e29078375'AND FID = @FID
--对技术调试人工进行赋值
--取实施人天单价
DECLARE @SSRTDJ DECIMAL(23,10)
SELECT @SSRTDJ=F_VRYF_Price_zc5
FROM VRYF_t_Cust_Entry100038
WHERE FID = @FID
AND F_VRYF_Assistant_qtr = '682e83f5bd70ce'
--取设计人天单价
DECLARE @SJRTDJ DECIMAL(23,10)
SELECT @SJRTDJ = F_VRYF_Price_zc5
FROM VRYF_t_Cust_Entry100038
WHERE FID = @FID
AND F_VRYF_Assistant_qtr = '68469e29078375'
UPDATE A
SET A.F_JSTSRG = CAST(ISNULL(A.F_SSRT, '0.00') AS float) * @SSRTDJ + CAST(ISNULL(A.F_SJRT, '0.00') AS float) * @SJRTDJ
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
--更新工程成本
UPDATE A
SET A.F_GCCB = F_JSTSRG+F_XMGLF+F_SGAZF+F_VRYF_Amount_re5
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
--更新第三方成本
DECLARE @DSFCB DECIMAL(23,10)
SELECT @DSFCB = SUM(ISNULL(B.FQTY,0) * ISNULL(F_SETTLEMENTP,0) )
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100031 B ON A.FID = B.FID
INNEr JOIN T_BD_MATERIAL C ON B.FMATERIALID = C.FMATERIALID
WHERE C.FNUMBER NOT LIKE 'H%' AND A.FID = @FID
UPDATE A
SET A.F_VRYF__DSFCB_h1g = ISNULL(@DSFCB,0)
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
--更新项目成本
Update A
SET A.F_XMCB = ROUND(A.F_CPCB + A.F_GCCB + A.F_VRYF__DSFCB_h1g,2)
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
-- 更新增值税+附加税费
DECLARE @BHSJE DECIMAL(23,10)
SELECT @BHSJE = ISNULL(SUM(FAmount * (F_VRYF_Decimal_gy7/100)), 0)
FROM VRYF_t_Cust_Entry100031
WHERE FID = @FID
DECLARE @SGCB DECIMAL(23,10)
-- 施工安装费税率
DECLARE @SGSL DECIMAL(23,10)
SELECT
@SGSL = CASE WHEN A.F_VRYF_Decimal_qtr = 0.6 OR A.F_VRYF_Decimal_qtr = 0 THEN 0.06
ELSE ISNULL(A.F_VRYF_Decimal_qtr/100, 0) END
FROM
VRYF_t_Cust_Entry100038 A
WHERE A.FID = @FID
AND A.F_VRYF_Assistant_qtr = '682e8396bd709f'
-- 外包费税率
DECLARE @WBSL DECIMAL(23,10)
SELECT
@WBSL = CASE WHEN A.F_VRYF_Decimal_qtr = 0.6 OR A.F_VRYF_Decimal_qtr = 0 THEN 0.06
ELSE ISNULL(A.F_VRYF_Decimal_qtr/100, 0) END
FROM
VRYF_t_Cust_Entry100038 A
WHERE A.FID = @FID
AND A.F_VRYF_Assistant_qtr = '682e83e4bd70cb'
-- 确保分母不为零
IF @BHSJE IS NOT NULL AND @BHSJE <> 0
BEGIN
UPDATE A
SET A.F_VRYF_Amount_ne1 = ISNULL(ROUND(
(@BHSJE - ISNULL(A.F_VRYF__BZCB_1xj, 0) / 1.13 * 0.13 - ISNULL(A.F_VRYF__DSFCB_h1g, 0) / 1.13 * 0.13 - ISNULL(F_VRYF_Amount_re5, 0) / (1+@WBSL) * @WBSL - ISNULL(F_SGAZF, 0) / (1+@SGSL) * @SGSL) * 1.12,
2
),0)
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100031 B ON A.FID = B.FID
WHERE A.FID = @FID;
END
ELSE
BEGIN
UPDATE A
SET A.F_VRYF_Amount_ne1 = 0
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID;
END
-- 更新项目毛利
UPDATE A
SET A.F_VRYF_Amount_ca9 = ROUND(ISNULL(A.F_VRYF__HTJE_imu, 0) - ISNULL(A.F_XMCB, 0) - ISNULL(A.F_VRYF_Amount_ne1, 0), 2)
FROM VRYF_t_Cust100017 A
WHERE A.FID = @FID
-- 更新毛利率
UPDATE VRYF_t_Cust100017
SET F_MLL = CASE WHEN F_VRYF__HTJE_imu <> 0 THEN CAST(CAST((ISNULL(F_VRYF_Amount_ca9, 0) / ISNULL(F_VRYF__HTJE_imu, 1)) * 100 AS DECIMAL(23,2)) AS VARCHAR) + '%' ELSE '0%' END
WHERE FID = @FID
-- 更新项目预算利润
UPDATE VRYF_t_Cust100017
SET F_VRYF_Amount_fg2 = ROUND(ISNULL(F_VRYF_Amount_ca9, 0) - ISNULL(F_VRYF_Amount_dvn, 0) - ISNULL(F_VRYF_Amount_uky, 0) - ISNULL(F_VRYF_Amount_w5c, 0), 2)
WHERE FID = @FID
-- 更新利润率
UPDATE VRYF_t_Cust100017
SET F_LRL = CASE WHEN F_VRYF__HTJE_imu <> 0 THEN CAST(CAST((ISNULL(F_VRYF_Amount_fg2, 0) / ISNULL(F_VRYF__HTJE_imu, 1)) * 100 AS DECIMAL(23,2)) AS VARCHAR) + '%' ELSE '0%' END
WHERE FID = @FID
-- 更新总结算金额
-- 更新成本价金额字段
UPDATE VRYF_t_Cust_Entry100031
SET F_CBJJE = CAST(ISNULL(FQty, 0) * ISNULL(F_SettlementP, 0) * CASE ISNULL(F_useyears, 0) WHEN 0 THEN 1 ELSE F_useyears END AS DECIMAL(23, 2))
WHERE FID = @FID
PRINT '更新总结算价金额'
-- 更新总结算价金额
UPDATE VRYF_t_Cust_Entry100031
SET F_JSJJE = CAST(ISNULL(FQTY, 0) * ISNULL(F_JSJ, 0) * CASE ISNULL(F_useyears, 0) WHEN 0 THEN 1 ELSE F_useyears END AS DECIMAL(23, 2))
WHERE FID = @FID;
PRINT '更新总结算价金额2'
DECLARE @JSJJE DECIMAL(23,10)
SELECT @JSJJE = ISNULL(SUM(FQTY * F_JSJ * CASE ISNULL(F_useyears, 0) WHEN 0 THEN 1 ELSE F_useyears END ), 0) FROM VRYF_t_Cust_Entry100031 WHERE FID = @FID;
PRINT '明细结算金额总和'
-- 明细结算金额总和+技术调试人工+项目管理费+(施工安装费+外包费)+定制成本
UPDATE VRYF_t_Cust100017
SET F_ZJSJE = ROUND( ISNULL(@JSJJE,0) + ISNULL(F_JSTSRG,0)+ ISNULL(F_XMGLF,0) + ISNULL( CONVERT(DECIMAL(23,2), F_SGCB),0) + ISNULL(F_VRYF__DZCB_zc5, 0), 2)
WHERE FID = @FID
-- 确保分母不为零
--IF @JSJJE IS NOT NULL AND @JSJJE <> 0
--BEGIN
-- UPDATE VRYF_t_Cust100017
-- SET F_ZJSJE = ROUND(@JSJJE + ISNULL(F_GCCB, 0) + ISNULL(F_VRYF__DZCB_zc5, 0), 2)
-- WHERE FID = @FID
--END
--ELSE
--BEGIN
-- UPDATE VRYF_t_Cust100017
-- SET F_ZJSJE = 0
-- WHERE FID = @FID
--END
PRINT '更新结算利润'
-- 更新结算利润
UPDATE VRYF_t_Cust100017
SET F_JSLR = ROUND(ISNULL(F_VRYF__HTJE_imu, 0) - ISNULL(F_ZJSJE, 0), 2)
WHERE FID = @FID
-- 更新付款方式,当付款方式不为空时
DECLARE @FKFS varchar(MAX)
SELECT DISTINCT
E.FNAME + '-' + ISNULL(CONCAT(CAST(d.FRecAdvanceRate AS DECIMAL(23, 2)), '%'), '') AS FRecAdvanceRat
INTO #TEMP1
FROM VRYF_t_Cust100017 A
INNER JOIN VRYF_t_Cust_Entry100031 B ON A.FID = B.FID
INNER JOIN vryf_t_cust_entry100031_lk c ON b.fentryid = c.fentryid
INNER JOIN t_sal_orderplan d ON d.FID = c.FSBillId
INNER JOIN T_BD_RECCONDITION_L E ON D.F_RecConditionId = E.FID
WHERE A.FID = @FID
SELECT @FKFS = STRING_AGG(FRecAdvanceRat, ',') FROM #TEMP1
UPDATE VRYF_t_Cust100017
SET F_FKFS = ISNULL(@FKFS, '')
WHERE FID = @FID
AND ISNULL(F_FKFS, '') = ''
-- 更新执行过保存字段
UPDATE VRYF_t_Cust100017
SET F_VRYF_CheckBox_qtr = 1
WHERE FID = @FID AND F_VRYF_CheckBox_qtr <> 1
END;