/****** 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 --更新定制成本字段 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_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) AS DECIMAL(23, 2)) WHERE FID = @FID -- 更新总结算价金额 UPDATE VRYF_t_Cust_Entry100031 SET F_JSJJE = CAST(ISNULL(FQTY, 0) * ISNULL(F_JSJ, 0) AS DECIMAL(23, 2)) WHERE FID = @FID DECLARE @JSJJE DECIMAL(23,10) SELECT @JSJJE = ISNULL(SUM(FQTY * F_JSJ), 0) FROM VRYF_t_Cust_Entry100031 WHERE FID = @FID; -- 明细结算金额总和+技术调试人工+项目管理费+(施工安装费+外包费)*1.1+定制成本 UPDATE VRYF_t_Cust100017 SET F_ZJSJE = ROUND( ISNULL(@JSJJE,0) + ISNULL(F_JSTSRG,0)+ ISNULL(F_XMGLF,0) + ISNULL(F_SGCB,0)*1.1+ 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 -- 更新结算利润 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;