457 lines
22 KiB
Transact-SQL
457 lines
22 KiB
Transact-SQL
/*
|
||
修改人:Ld 修改时间:2026-07-27 12:00:00;
|
||
销售绩效与提成比例设置部署脚本,适用于测试库和正式库;正式库不插入测试合同数据。
|
||
*/
|
||
|
||
-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 正式库同步时补充合同提成类型字段。
|
||
IF COL_LENGTH(N'dbo.PDM_项目名称', N'提成类型') IS NULL
|
||
BEGIN
|
||
ALTER TABLE dbo.PDM_项目名称 ADD 提成类型 nvarchar(50) NULL;
|
||
END;
|
||
GO
|
||
|
||
-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 合同编辑保存提成类型。
|
||
ALTER PROCEDURE [dbo].[PDM_项目名称_编辑数据]
|
||
@项目流水号 int,
|
||
@客户流水号 int=null,
|
||
@付款方式流水号 int=null,
|
||
@交货期限 nvarchar(50)=null,
|
||
@客户要求 nvarchar(200)=null,
|
||
@操作者 int=null,
|
||
@收货人 nvarchar(50)=null,
|
||
@签订日期 nvarchar(50)=null,
|
||
@税率 float=null,
|
||
@合同备注 nvarchar(50)=null,
|
||
@提成类型 nvarchar(50)=null
|
||
AS
|
||
update PDM_项目名称 set 客户流水号=@客户流水号,付款方式流水号=@付款方式流水号,交货期限=@交货期限,操作者=@操作者,客户要求=@客户要求,合同备注=@合同备注,提成类型=@提成类型
|
||
,签订日期=@签订日期,税率=@税率,收货人员=@收货人 where 项目流水号=@项目流水号
|
||
GO
|
||
|
||
-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 合同查询视图带出提成类型。
|
||
ALTER VIEW [dbo].[PDM_项目名称_视图]
|
||
AS
|
||
SELECT CASE WHEN PDM_项目名称.提交日期 IS NULL AND
|
||
PDM_项目名称.是否启用 = 1 THEN '未提交' WHEN PDM_项目名称.是否启用 = 0 THEN '终止执行' WHEN PDM_项目名称.提交日期
|
||
IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND 是否提交 IS NULL
|
||
THEN '未创建' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND 是否提交 = 1 AND
|
||
是否审核 = 0 THEN '未审批' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 1 AND 技术审核 = 0 AND 是否审核 = 1 THEN '未投产' WHEN PDM_项目名称.提交日期 IS NOT NULL AND
|
||
PDM_项目名称.是否启用 = 1 AND 是否提交 = 1 AND 技术审核 = 1 AND
|
||
是否审核 = 1 THEN '未审核' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 2 THEN '已投产' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 3 THEN '生产中' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 4 THEN '装配中' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 5 THEN '待发货' WHEN PDM_项目名称.提交日期 IS NOT NULL AND PDM_项目名称.是否启用 = 1 AND
|
||
是否提交 = 6 THEN '已完成' END AS 状态, dbo.PDM_项目名称.合同编号, dbo.客户关系管理系统_客户名称.客户名称,
|
||
dbo.PDM_项目名称.合同金额, dbo.合同管理_付款方式_基础表.付款方式, CASE WHEN CONVERT(varchar(100),
|
||
dbo.PDM_项目名称.交货日期, 23) = '1900-01-01' THEN NULL ELSE CONVERT(varchar(100),
|
||
dbo.PDM_项目名称.交货日期, 23) END AS 交货日期, dbo.PDM_项目名称.合同备注, dbo.PDM_项目名称.提成类型, dbo.PDM_项目名称.操作者,
|
||
CASE WHEN CONVERT(varchar(100), dbo.PDM_项目名称.签订日期, 23) = '1900-01-01' THEN NULL
|
||
ELSE CONVERT(varchar(100), dbo.PDM_项目名称.签订日期, 23) END AS 签订日期, CONVERT(varchar(100),
|
||
dbo.PDM_项目名称.提交日期, 23) AS 提交日期, dbo.PDM_项目名称.是否生成订单, dbo.PDM_项目名称.项目流水号,
|
||
dbo.PDM_项目名称.操作日期, dbo.PDM_项目名称.客户流水号, dbo.人事档案管理_人员名单.姓名 AS 经手人,
|
||
ISNULL(dbo.合同管理_订单信息_基础表.是否提交, 0) AS 是否提交, dbo.PDM_项目名称.合同类型,
|
||
dbo.PDM_项目名称.客户要求, dbo.客户关系管理系统_客户名称.省份流水号, dbo.基础表_省份表.省份,
|
||
CASE WHEN CONVERT(varchar(7), dbo.PDM_项目名称.签订日期, 120) = '1900-01' THEN NULL
|
||
ELSE CONVERT(varchar(7), dbo.PDM_项目名称.签订日期, 120) END AS 签订日期月, 1 AS 条数,
|
||
CASE WHEN CONVERT(varchar(4), dbo.PDM_项目名称.签订日期, 120) = '1900' THEN NULL ELSE CONVERT(varchar(4),
|
||
dbo.PDM_项目名称.签订日期, 120) END AS 签订日期年, dbo.客户关系管理系统_客户名称.地址,
|
||
dbo.客户关系管理系统_客户名称.电话, dbo.客户关系管理系统_客户名称.联系人,
|
||
dbo.客户关系管理系统_客户名称.传真, dbo.PDM_项目机床_视图.机床流水号,
|
||
ISNULL(dbo.PDM_项目是否存在修改.条数, 0) AS 是否修改, CASE WHEN 交货期限 IS NULL
|
||
THEN '' ELSE '付款后' + 交货期限 + '日' END AS 交货期限, CONVERT(nvarchar(50), dbo.PDM_项目名称.税率 * 100)
|
||
+ N'%' AS 税率, dbo.PDM_项目名称.交货期限 AS 交货, dbo.PDM_项目名称.是否启用,
|
||
CASE WHEN 项目_合同留存信息_视图.项目流水号 IS NOT NULL THEN 1 ELSE 0 END AS 留存信息,
|
||
CASE WHEN 项目_客户提供资料_视图.项目流水号 IS NOT NULL THEN 1 ELSE 0 END AS 客户资料,
|
||
ISNULL(dbo.PDM_项目是否可删_视图.是否接收, 0) AS 是否接收, dbo.PDM_项目名称.收货人员,
|
||
人事档案管理_人员名单_1.姓名 AS 通知人, CONVERT(varchar(10), dbo.PDM_项目名称.通知日期, 23) AS 通知日期,
|
||
dbo.PDM_项目名称.合同协议, dbo.客户关系管理系统_客户名称.收货人, dbo.PDM_项目名称.是否审核,
|
||
dbo.PDM_项目名称.付款方式流水号, dbo.PDM_项目名称.税率 AS 税率小数, dbo.PDM_项目名称.售后原因,
|
||
dbo.PDM_项目名称.解决方案, dbo.合同管理_订单信息_基础表.订单备注, CASE WHEN 合同金额 = 0 OR
|
||
未收款项 = 0 THEN 0 ELSE CONVERT(int, CONVERT(decimal(18, 2), (未收款项 / 合同金额)) * 100) END AS 已收金额,
|
||
dbo.PDM_项目名称.未收款项
|
||
FROM dbo.项目_客户提供资料_视图 RIGHT OUTER JOIN
|
||
dbo.PDM_项目名称 INNER JOIN
|
||
dbo.人事档案管理_人员名单 ON dbo.PDM_项目名称.操作者 = dbo.人事档案管理_人员名单.人员编号 LEFT OUTER JOIN
|
||
dbo.人事档案管理_人员名单 AS 人事档案管理_人员名单_1 ON
|
||
dbo.PDM_项目名称.通知人 = 人事档案管理_人员名单_1.人员编号 LEFT OUTER JOIN
|
||
dbo.PDM_项目是否可删_视图 ON dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目是否可删_视图.项目流水号 ON
|
||
dbo.项目_客户提供资料_视图.项目流水号 = dbo.PDM_项目名称.项目流水号 LEFT OUTER JOIN
|
||
dbo.项目_合同留存信息_视图 ON
|
||
dbo.PDM_项目名称.项目流水号 = dbo.项目_合同留存信息_视图.项目流水号 LEFT OUTER JOIN
|
||
dbo.PDM_项目是否存在修改 ON
|
||
dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目是否存在修改.项目流水号 LEFT OUTER JOIN
|
||
dbo.PDM_项目机床_视图 ON dbo.PDM_项目名称.项目流水号 = dbo.PDM_项目机床_视图.项目流水号 LEFT OUTER JOIN
|
||
dbo.合同管理_订单信息_基础表 ON
|
||
dbo.PDM_项目名称.项目流水号 = dbo.合同管理_订单信息_基础表.项目流水号 LEFT OUTER JOIN
|
||
dbo.合同管理_付款方式_基础表 ON
|
||
dbo.PDM_项目名称.付款方式流水号 = dbo.合同管理_付款方式_基础表.付款方式流水号 LEFT OUTER JOIN
|
||
dbo.基础表_省份表 RIGHT OUTER JOIN
|
||
dbo.客户关系管理系统_客户名称 ON dbo.基础表_省份表.省份流水号 = dbo.客户关系管理系统_客户名称.省份流水号 ON
|
||
dbo.PDM_项目名称.客户流水号 = dbo.客户关系管理系统_客户名称.客户流水号
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_提成比例设置', N'U') IS NULL
|
||
BEGIN
|
||
CREATE TABLE dbo.销售管理_提成比例设置
|
||
(
|
||
提成比例ID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
||
提成类型 nvarchar(50) NOT NULL,
|
||
提成比例 decimal(9,4) NOT NULL CONSTRAINT DF_销售管理_提成比例设置_提成比例 DEFAULT(0),
|
||
是否启用 int NOT NULL CONSTRAINT DF_销售管理_提成比例设置_是否启用 DEFAULT(1),
|
||
备注 nvarchar(500) NULL,
|
||
操作者 int NULL,
|
||
操作日期 datetime NOT NULL CONSTRAINT DF_销售管理_提成比例设置_操作日期 DEFAULT(GETDATE())
|
||
);
|
||
CREATE UNIQUE INDEX UX_销售管理_提成比例设置_提成类型 ON dbo.销售管理_提成比例设置(提成类型);
|
||
END;
|
||
GO
|
||
|
||
MERGE dbo.销售管理_提成比例设置 AS target
|
||
USING
|
||
(
|
||
SELECT N'首单提成(专机)' AS 提成类型 UNION ALL
|
||
SELECT N'首单提成(模块)' UNION ALL
|
||
SELECT N'转介绍提成(专机)' UNION ALL
|
||
SELECT N'转介绍提成(模块)' UNION ALL
|
||
SELECT N'复购提成'
|
||
) AS source
|
||
ON target.提成类型 = source.提成类型
|
||
WHEN NOT MATCHED THEN
|
||
INSERT(提成类型, 提成比例, 是否启用, 备注, 操作日期)
|
||
VALUES(source.提成类型, 0, 1, N'初始化提成类型,请维护百分比', GETDATE());
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_提成比例设置_查询数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.销售管理_提成比例设置_查询数据;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.销售管理_提成比例设置_查询数据
|
||
@提成类型_check int = 0,
|
||
@提成类型 nvarchar(50) = NULL,
|
||
@人员编号 int = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-27 14:35:00; 提成比例设置仅允许人员编号5和273查看。
|
||
IF ISNULL(@人员编号, 0) NOT IN (5, 273)
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'无权查看提成比例设置' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
SELECT 提成比例ID, 提成类型, CAST(提成比例 AS float) AS 提成比例, 是否启用, 备注,
|
||
CONVERT(varchar(19), 操作日期, 120) AS 操作日期
|
||
FROM dbo.销售管理_提成比例设置
|
||
WHERE (@提成类型_check = 0 OR 提成类型 = @提成类型)
|
||
ORDER BY 提成比例ID;
|
||
END;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_提成比例设置_保存数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.销售管理_提成比例设置_保存数据;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.销售管理_提成比例设置_保存数据
|
||
@提成比例ID int = NULL,
|
||
@提成类型 nvarchar(50) = NULL,
|
||
@提成比例 float = NULL,
|
||
@是否启用 int = 1,
|
||
@备注 nvarchar(500) = NULL,
|
||
@操作者 int = NULL,
|
||
@人员编号 int = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-27 14:35:00; 保存时再次校验指定人员编号。
|
||
IF ISNULL(@人员编号, 0) NOT IN (5, 273)
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'无权维护提成比例设置' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
IF ISNULL(LTRIM(RTRIM(@提成类型)), N'') = N''
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'提成类型不能为空' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
IF ISNULL(@提成比例, -1) < 0
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'提成比例不能小于0' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
IF EXISTS(SELECT 1 FROM dbo.销售管理_提成比例设置 WHERE 提成类型 = @提成类型 AND ISNULL(提成比例ID, 0) <> ISNULL(@提成比例ID, 0))
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'提成类型已存在' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
IF EXISTS(SELECT 1 FROM dbo.销售管理_提成比例设置 WHERE 提成比例ID = @提成比例ID)
|
||
BEGIN
|
||
UPDATE dbo.销售管理_提成比例设置
|
||
SET 提成类型 = @提成类型,
|
||
提成比例 = CAST(@提成比例 AS decimal(9,4)),
|
||
是否启用 = ISNULL(@是否启用, 1),
|
||
备注 = @备注,
|
||
操作者 = @操作者,
|
||
操作日期 = GETDATE()
|
||
WHERE 提成比例ID = @提成比例ID;
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
INSERT INTO dbo.销售管理_提成比例设置(提成类型, 提成比例, 是否启用, 备注, 操作者, 操作日期)
|
||
VALUES(@提成类型, CAST(@提成比例 AS decimal(9,4)), ISNULL(@是否启用, 1), @备注, @操作者, GETDATE());
|
||
END;
|
||
|
||
SELECT CAST(1 AS int) AS result, N'保存成功' AS msg;
|
||
END;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_提成比例设置_删除数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.销售管理_提成比例设置_删除数据;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.销售管理_提成比例设置_删除数据
|
||
@提成比例ID int = NULL,
|
||
@操作者 int = NULL,
|
||
@人员编号 int = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-27 12:00:00; 删除采用停用方式保留历史比例记录。
|
||
-- 修改人:Ld 修改时间:2026-07-27 14:35:00; 停用时再次校验指定人员编号。
|
||
IF ISNULL(@人员编号, 0) NOT IN (5, 273)
|
||
BEGIN
|
||
SELECT CAST(0 AS int) AS result, N'无权停用提成比例设置' AS msg;
|
||
RETURN;
|
||
END;
|
||
|
||
UPDATE dbo.销售管理_提成比例设置
|
||
SET 是否启用 = 0, 操作者 = @操作者, 操作日期 = GETDATE()
|
||
WHERE 提成比例ID = @提成比例ID;
|
||
|
||
SELECT CAST(1 AS int) AS result, N'停用成功' AS msg;
|
||
END;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_销售绩效_查询数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.销售管理_销售绩效_查询数据;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.销售管理_销售绩效_查询数据
|
||
@绩效月份 nvarchar(7) = NULL,
|
||
@销售员_check int = 0,
|
||
@销售员 nvarchar(50) = NULL,
|
||
@提成类型_check int = 0,
|
||
@提成类型 nvarchar(50) = NULL,
|
||
@合同编号_check int = 0,
|
||
@合同编号 nvarchar(50) = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-27 12:00:00; 达到90%当月补算此前回款,退款按发生月份扣回绩效。
|
||
;WITH 收款流水 AS
|
||
(
|
||
SELECT
|
||
r.id,
|
||
r.项目流水号,
|
||
CAST(ISNULL(r.金额, 0) AS decimal(18,2)) AS 金额,
|
||
r.时间,
|
||
p.合同编号,
|
||
CAST(ISNULL(p.合同金额, 0) AS decimal(18,2)) AS 合同金额,
|
||
v.客户名称,
|
||
ISNULL(v.经手人, N'') AS 销售员,
|
||
ISNULL(p.提成类型, N'') AS 提成类型,
|
||
CAST(ISNULL(s.提成比例, 0) AS decimal(18,4)) AS 提成比例
|
||
FROM dbo.财务管理_收款记录 r
|
||
INNER JOIN dbo.PDM_项目名称 p ON r.项目流水号 = p.项目流水号
|
||
LEFT JOIN dbo.PDM_项目名称_视图 v ON p.项目流水号 = v.项目流水号
|
||
LEFT JOIN dbo.销售管理_提成比例设置 s ON p.提成类型 = s.提成类型 AND s.是否启用 = 1
|
||
WHERE ISNULL(p.是否启用, 1) = 1
|
||
AND ISNULL(p.合同金额, 0) > 0
|
||
AND ISNULL(p.提成类型, N'') <> N''
|
||
),
|
||
累计流水 AS
|
||
(
|
||
SELECT a.*,
|
||
(
|
||
SELECT ISNULL(SUM(b.金额), 0)
|
||
FROM 收款流水 b
|
||
WHERE b.项目流水号 = a.项目流水号
|
||
AND (b.时间 < a.时间 OR (b.时间 = a.时间 AND b.id <= a.id))
|
||
) AS 累计回款
|
||
FROM 收款流水 a
|
||
),
|
||
达标 AS
|
||
(
|
||
SELECT 项目流水号, MIN(时间) AS 达标时间
|
||
FROM 累计流水
|
||
WHERE 累计回款 >= 合同金额 * 0.9
|
||
GROUP BY 项目流水号
|
||
),
|
||
绩效流水 AS
|
||
(
|
||
SELECT
|
||
l.*,
|
||
d.达标时间,
|
||
CASE
|
||
WHEN l.时间 <= d.达标时间 THEN CONVERT(varchar(7), d.达标时间, 120)
|
||
ELSE CONVERT(varchar(7), l.时间, 120)
|
||
END AS 绩效月份
|
||
FROM 累计流水 l
|
||
INNER JOIN 达标 d ON l.项目流水号 = d.项目流水号
|
||
),
|
||
绩效汇总 AS
|
||
(
|
||
SELECT
|
||
绩效月份,
|
||
项目流水号,
|
||
合同编号,
|
||
客户名称,
|
||
销售员,
|
||
合同金额,
|
||
提成类型,
|
||
提成比例,
|
||
SUM(金额) AS 本月回款金额,
|
||
SUM(金额 * 提成比例 / 100.0) AS 本月绩效金额
|
||
FROM 绩效流水
|
||
GROUP BY 绩效月份, 项目流水号, 合同编号, 客户名称, 销售员, 合同金额, 提成类型, 提成比例
|
||
)
|
||
SELECT
|
||
h.绩效月份,
|
||
h.销售员,
|
||
h.合同编号,
|
||
h.客户名称,
|
||
CAST(h.合同金额 AS float) AS 合同金额,
|
||
CAST((SELECT ISNULL(SUM(r2.金额), 0) FROM dbo.财务管理_收款记录 r2 WHERE r2.项目流水号 = h.项目流水号 AND CONVERT(varchar(7), r2.时间, 120) <= h.绩效月份) AS float) AS 累计回款金额,
|
||
CAST(h.本月回款金额 AS float) AS 本月回款金额,
|
||
CAST(CASE WHEN h.合同金额 = 0 THEN 0 ELSE (SELECT ISNULL(SUM(r2.金额), 0) FROM dbo.财务管理_收款记录 r2 WHERE r2.项目流水号 = h.项目流水号 AND CONVERT(varchar(7), r2.时间, 120) <= h.绩效月份) / h.合同金额 * 100 END AS decimal(18,2)) AS 回款比例,
|
||
h.提成类型,
|
||
CAST(h.提成比例 AS float) AS 提成比例,
|
||
CAST(h.本月绩效金额 AS decimal(18,2)) AS 本月绩效金额,
|
||
h.项目流水号
|
||
FROM 绩效汇总 h
|
||
WHERE (@绩效月份 IS NULL OR @绩效月份 = N'' OR h.绩效月份 = @绩效月份)
|
||
AND (@销售员_check = 0 OR h.销售员 LIKE N'%' + @销售员 + N'%')
|
||
AND (@提成类型_check = 0 OR h.提成类型 = @提成类型)
|
||
AND (@合同编号_check = 0 OR h.合同编号 LIKE N'%' + @合同编号 + N'%')
|
||
ORDER BY h.绩效月份 DESC, h.销售员, h.合同编号;
|
||
END;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.报表_销售管理_销售绩效_查询数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.报表_销售管理_销售绩效_查询数据;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.销售管理_销售绩效_回款明细_查询数据', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.销售管理_销售绩效_回款明细_查询数据;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.销售管理_销售绩效_回款明细_查询数据
|
||
@项目流水号 int = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-28 13:45:00; 销售绩效展开行查看合同回款明细。
|
||
SELECT
|
||
id AS 回款记录ID,
|
||
项目流水号,
|
||
CAST(ISNULL(金额, 0) AS float) AS 回款金额,
|
||
CONVERT(varchar(19), 时间, 120) AS 回款时间,
|
||
备注
|
||
FROM dbo.财务管理_收款记录
|
||
WHERE 项目流水号 = @项目流水号
|
||
ORDER BY 时间 DESC, id DESC;
|
||
END;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.报表_销售管理_销售绩效_查询数据
|
||
@绩效月份 nvarchar(7) = NULL,
|
||
@销售员_check int = 0,
|
||
@销售员 nvarchar(50) = NULL,
|
||
@提成类型_check int = 0,
|
||
@提成类型 nvarchar(50) = NULL,
|
||
@合同编号_check int = 0,
|
||
@合同编号 nvarchar(50) = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
-- 修改人:Ld 修改时间:2026-07-27 12:00:00; 销售绩效导出列宽和数据。
|
||
SELECT N'销售绩效_' + CONVERT(varchar(8), GETDATE(), 112) + N'-' + REPLACE(CONVERT(varchar(8), GETDATE(), 108), ':', '') AS tablename, N'07' AS tabletype;
|
||
SELECT
|
||
120 * 20 AS 绩效月份,
|
||
100 * 20 AS 销售员,
|
||
160 * 20 AS 合同编号,
|
||
220 * 20 AS 客户名称,
|
||
120 * 20 AS 合同金额,
|
||
120 * 20 AS 累计回款金额,
|
||
120 * 20 AS 本月回款金额,
|
||
100 * 20 AS 回款比例,
|
||
160 * 20 AS 提成类型,
|
||
100 * 20 AS 提成比例,
|
||
120 * 20 AS 本月绩效金额;
|
||
|
||
EXEC dbo.销售管理_销售绩效_查询数据
|
||
@绩效月份 = @绩效月份,
|
||
@销售员_check = @销售员_check,
|
||
@销售员 = @销售员,
|
||
@提成类型_check = @提成类型_check,
|
||
@提成类型 = @提成类型,
|
||
@合同编号_check = @合同编号_check,
|
||
@合同编号 = @合同编号;
|
||
END;
|
||
GO
|
||
|
||
-- 修改人:Ld 修改时间:2026-07-29 09:20:00; 正式库模块ID可能已占用,按路径查找或自动分配空闲ID。
|
||
DECLARE @销售绩效模块ID int;
|
||
DECLARE @提成比例模块ID int;
|
||
|
||
SELECT @销售绩效模块ID = id
|
||
FROM dbo.基础表_模块信息
|
||
WHERE path = N'SalesManagement/SalesPerformance'
|
||
OR component = N'/SalesManagement/SalesPerformance'
|
||
OR name = N'SalesPerformance'
|
||
OR title = N'销售绩效';
|
||
|
||
IF @销售绩效模块ID IS NULL
|
||
BEGIN
|
||
SET @销售绩效模块ID = CASE WHEN NOT EXISTS(SELECT 1 FROM dbo.基础表_模块信息 WHERE id = 155) THEN 155 ELSE (SELECT ISNULL(MAX(id), 0) + 1 FROM dbo.基础表_模块信息) END;
|
||
|
||
SET IDENTITY_INSERT dbo.基础表_模块信息 ON;
|
||
INSERT INTO dbo.基础表_模块信息(id, path, component, redirect, name, title, icon, 是否通知, 消息通知来源, 通知条件, dashboardIcon, 是否禁用)
|
||
VALUES(@销售绩效模块ID, N'SalesManagement/SalesPerformance', N'/SalesManagement/SalesPerformance', NULL, N'SalesPerformance', N'销售绩效', N'ContractCapitalManagement', 0, NULL, NULL, NULL, 0);
|
||
SET IDENTITY_INSERT dbo.基础表_模块信息 OFF;
|
||
END;
|
||
|
||
SELECT @提成比例模块ID = id
|
||
FROM dbo.基础表_模块信息
|
||
WHERE path = N'SalesManagement/CommissionRateSetting'
|
||
OR component = N'/SalesManagement/CommissionRateSetting'
|
||
OR name = N'CommissionRateSetting'
|
||
OR title = N'提成比例设置';
|
||
|
||
IF @提成比例模块ID IS NULL
|
||
BEGIN
|
||
SET @提成比例模块ID = CASE WHEN NOT EXISTS(SELECT 1 FROM dbo.基础表_模块信息 WHERE id = 156) THEN 156 ELSE (SELECT ISNULL(MAX(id), 0) + 1 FROM dbo.基础表_模块信息) END;
|
||
|
||
SET IDENTITY_INSERT dbo.基础表_模块信息 ON;
|
||
INSERT INTO dbo.基础表_模块信息(id, path, component, redirect, name, title, icon, 是否通知, 消息通知来源, 通知条件, dashboardIcon, 是否禁用)
|
||
VALUES(@提成比例模块ID, N'SalesManagement/CommissionRateSetting', N'/SalesManagement/CommissionRateSetting', NULL, N'CommissionRateSetting', N'提成比例设置', N'ProductMaintenance', 0, NULL, NULL, NULL, 0);
|
||
SET IDENTITY_INSERT dbo.基础表_模块信息 OFF;
|
||
END;
|
||
|
||
INSERT INTO dbo.基础表_角色模块信息(id, pid, 模块顺序, 角色编号, 是否启用, 角色模块顺序)
|
||
SELECT @销售绩效模块ID, 10, @销售绩效模块ID, v.角色编号, 1, 32
|
||
FROM (VALUES(2),(3),(9),(11)) v(角色编号)
|
||
WHERE NOT EXISTS(SELECT 1 FROM dbo.基础表_角色模块信息 WHERE id = @销售绩效模块ID AND 角色编号 = v.角色编号);
|
||
|
||
INSERT INTO dbo.基础表_角色模块信息(id, pid, 模块顺序, 角色编号, 是否启用, 角色模块顺序)
|
||
SELECT @提成比例模块ID, 10, @提成比例模块ID, 2, 1, 33
|
||
WHERE NOT EXISTS(SELECT 1 FROM dbo.基础表_角色模块信息 WHERE id = @提成比例模块ID AND 角色编号 = 2);
|
||
|
||
SELECT @销售绩效模块ID AS 销售绩效模块ID, @提成比例模块ID AS 提成比例设置模块ID;
|
||
GO
|