chore: save local MES snapshot

This commit is contained in:
2026-06-25 15:49:15 +08:00
parent 4f6a16fb2e
commit f6dce5daa8
102 changed files with 45101 additions and 218 deletions

View File

@@ -0,0 +1,188 @@
USE [YL_MESDB]
GO
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '项目工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*20 AS 合同号, 256*20 AS 订单号, 256*30 AS 产品名称, 256*40 AS 产品编码, 256*15 AS 工序名称, 256*12 AS 操作人,
256*12 AS 指派对象, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*15 AS 计划开始, 256*15 AS 计划完成, 256*12 AS '工时(h)'
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品名称, 0 AS 产品编码, 0 AS 工序名称, 0 AS 操作人,
0 AS 指派对象, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 计划开始, 0 AS 计划完成, 0 AS '工时(h)'
SELECT
v.订单合同号 AS 合同号,
v.订单号,
v.产品名称,
v.产品编码,
v.工序名称,
v.操作人,
ISNULL(v.工位名称, '') AS 指派对象,
CASE WHEN v.计划数量 IS NULL THEN '' WHEN v.计划数量 = FLOOR(v.计划数量) THEN CAST(CAST(v.计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
CASE WHEN v.完成数量 IS NULL THEN '' WHEN v.完成数量 = FLOOR(v.完成数量) THEN CAST(CAST(v.完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN CAST(v.操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划开始,
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划完成,
CAST(CAST(v.加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
ORDER BY v.订单合同号, v.产品编码, v.工序名称, v.操作人, v.订单号
END
GO
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
ISNULL(工位名称, '') AS 指派对象,
CASE WHEN 操作类别 IN ('报工', '辅助结束', '加班', '异常', '开始加工') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
ORDER BY 操作人, 开始时间
END
GO
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '任务工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码, 256*25 AS 产品名称, 256*15 AS 工序名称,
256*12 AS 操作人, 256*12 AS 指派对象, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码, 0 AS 产品名称, 0 AS 工序名称,
0 AS 操作人, 0 AS 指派对象, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
SELECT
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
ISNULL(操作人, '') AS 操作人,
ISNULL(工位名称, '') AS 指派对象,
CASE WHEN 计划数量 IS NULL THEN '' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
CASE WHEN 完成数量 IS NULL THEN '' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
ORDER BY 订单合同号, 订单号, 产品编码, 工序名称, 开始时间
END
GO
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT '设备工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
ISNULL(工位名称, '') AS 指派对象,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 报工日期 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 报工日期 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
ORDER BY 工位名称, 开始时间
END
GO

View File

@@ -0,0 +1,492 @@
USE [YL_MESDB]
GO
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 订单工时汇总 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.产品名称,
MAX(v.计划数量) AS 计划数量,
MAX(v.完成数量) AS 完成数量,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
GROUP BY v.订单合同号, v.产品编码, v.产品名称
),
工序工时明细 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.工序名称,
v.操作人,
MAX(v.工位名称) AS 指派对象,
v.订单号,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成
FROM View_生产工时视图 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.操作人, v.订单号
)
SELECT
1 AS [Level],
合同号 AS contractNo,
产品名称 AS materialDesc,
产品编码 AS materialCode,
'' AS processName,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(计划开始, '') AS planStart,
ISNULL(计划完成, '') AS planEnd,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
'' AS 订单号
FROM 订单工时汇总
UNION ALL
SELECT
2 AS [Level],
d.合同号 AS contractNo,
'' AS materialDesc,
d.产品编码 AS materialCode,
d.工序名称 AS processName,
d.操作人 AS operator,
ISNULL(d.指派对象, '') AS 指派对象,
'' AS qty,
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
d.计划开始 AS planStart,
d.计划完成 AS planEnd,
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
d.订单号 AS 订单号
FROM 工序工时明细 d
ORDER BY contractNo, materialCode, [Level], processName
END
GO
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(CASE
WHEN 操作类别 = '异常' THEN -总时长
ELSE 总时长
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(CASE
WHEN 操作类别 = '异常' THEN -总时长
ELSE 总时长
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工位名称 AS 指派对象,
CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CASE
WHEN 操作类别 = '异常' THEN -总时长
ELSE 总时长
END / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
异常说明,
工序说明,
操作类别
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) != -1
)
SELECT
1 AS [Level],
操作人 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END
GO
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 任务汇总 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
操作类别,
MAX(计划数量) AS 计划数量,
MAX(完成数量) AS 完成数量,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(总时长) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称, 操作类别
),
报工明细 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
工序名称,
操作人,
工位名称 AS 指派对象,
操作类别,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
)
SELECT
1 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 任务汇总
UNION ALL
SELECT
2 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
'' AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(操作人, '') AS operator,
ISNULL(指派对象, '') AS 指派对象,
'' AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 报工明细
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
END
GO
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人汇总 AS (
SELECT
工位名称,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称
),
日期汇总 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工位名称 AS 指派对象,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
)
SELECT
1 AS [Level],
工位名称 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END
GO

View File

@@ -0,0 +1,186 @@
USE [YL_MESDB]
GO
ALTER PROCEDURE [dbo].[生产管理_生产计划跟踪]
@订单号 int = 0,
@物料类型 nvarchar(50) = '',
@合同号 nvarchar(50) = '',
@产品编码 nvarchar(50) = '',
@产品名称 nvarchar(50) = '',
@工序名称 nvarchar(50) = '',
@要求完工日期1 nvarchar(50) = '',
@要求完工日期2 nvarchar(50) = '',
@计划开始1 nvarchar(50) = '',
@计划开始2 nvarchar(50) = '',
@计划完成1 nvarchar(50) = '',
@计划完成2 nvarchar(50) = '',
@排产状态 nvarchar(50) = '全部',
@指派对象 nvarchar(50) = '全部',
@自制件属性 nvarchar(50) = '全部',
@计划号 nvarchar(50) = '',
@加急状态 nvarchar(50) = '',
@单据状态 nvarchar(50) = ''
AS
BEGIN
DECLARE @selectStr NVARCHAR(MAX)
DECLARE @selectStrWhere NVARCHAR(4000) = ' WHERE [物料类型] = ''pit_Resource'' '
SET @selectStr = N'
SELECT top 500
v.计划号,
加急总数,
拣配状态,
自制件属性,
入库数量,
外协分组,
case
when isnull(任务状态,0)=4 then ''已完成''
when isnull(任务状态,0)=2 then ''已开工''
when isnull(任务状态,0)=0 then ''待执行''
when isnull(任务状态,0)=1 then ''可执行''
else ''''
end as [任务状态],
case
when isnull(加工状态,0)=2 then ''辅助开始''
when isnull(加工状态,0)=3 then ''辅助结束''
when isnull(加工状态,0)=4 then ''开始加工''
when isnull(加工状态,0)=5 then ''暂停''
when isnull(加工状态,0)=6 then ''报工''
else ''''
end as [加工状态],
[计划数量订单],
ISNULL(开工时间, 0) AS 开工时间,
ISNULL(进度, 0) AS 进度,
v.[TaskAID],
[合同号],
v.[订单编号] AS 订单号,
[订单行号],
[订单拆分内码] AS 拆分内码,
[物料编号] AS 产品编码,
[物料描述] AS 产品名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([计划数量] AS VARCHAR(30)))) AS 计划数量,
ISNULL(gy.标准工时, 0) AS 标准工时,
[计划完成] AS 要求完工日期,
[工序名称],
完成数量,
收料数量,
CASE
WHEN [加急状态] = 1 THEN ''加急''
ELSE ''''
END AS 加急状态,
加急数量,
性质,
ISNULL(总工时, 0) AS 总工时,
[占用情况],
[排产状态],
[工序计划数量],
指派对象编号,
指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,
计划开始时间,
计划完成时间,
最晚开始时间,
[派工状态],
[外协通知],
[优先级],
[未完成说明],
[派工特殊说明],
[最后编辑人],
[最后编辑时间],
[二次派工],
CASE
WHEN zj_终检.计划号 IS NOT NULL THEN ''是''
ELSE ''否''
END AS 终检,
ISNULL(zj_收检.合格数合计, 0) AS 收检合格数,
ISNULL(zj_收检.不合格数合计, 0) AS 收检不合格数,
ISNULL(zj_收检.合格数合计, 0) + ISNULL(zj_收检.不合格数合计, 0) AS 收检总数,
ISNULL(jl.开始时间, 0) AS 开始时间,
ISNULL(jl.结束时间, 0) AS 结束时间,
ISNULL(jl.外协结束时间, 0) AS 外协结束时间,
STUFF((
SELECT '','' + d2.工序名称
FROM [dbo].[View_生产订单_MES] d2
WHERE d2.订单编号 = v.订单编号 order by d2.订单行号
FOR XML PATH('''')
), 1, 1, '''') AS 工艺路线
FROM [dbo].[View_生产订单全部(包括已关闭)] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj_终检 ON v.[订单编号] = zj_终检.计划号
LEFT JOIN (
SELECT
TaskAID,
SUM(ISNULL(合格数, 0)) AS 合格数合计,
SUM(ISNULL(不合格数, 0)) AS 不合格数合计
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''收检''
GROUP BY TaskAID
) zj_收检 ON v.[TaskAID] = zj_收检.TaskAID
LEFT JOIN (
SELECT
TaskAID,
min(ISNULL(开始时间, 0)) AS 开始时间,
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(开始时间, 0) ELSE NULL END) AS 外协结束时间,
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(结束时间, 0) ELSE NULL END) AS 结束时间
FROM [dbo].[YL_加工中心_操作记录表]
GROUP BY TaskAID
) jl ON v.[TaskAID] = jl.TaskAID
LEFT JOIN (
SELECT
订单编号,
工艺顺序,
MAX(ISNULL(标准工时, 0)) AS 标准工时
FROM dbo.[车间生产管理工艺_零件生产工艺_工艺库]
GROUP BY 订单编号, 工艺顺序
) gy ON v.[订单编号] = gy.[订单编号] AND v.[订单行号] = gy.[工艺顺序]'
IF (@订单号 > 0)
SET @selectStrWhere = @selectStrWhere + ' AND v.[订单编号] = ' + CONVERT(VARCHAR(10), @订单号)
IF (@计划号 > 0)
SET @selectStrWhere = @selectStrWhere + ' AND v.[计划号] = '''+@计划号+''''
IF (@合同号 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [合同号] LIKE ''%' + @合同号 + '%'''
IF (@产品编码 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [物料编号] LIKE ''%' + @产品编码 + '%'''
IF (@产品名称 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [物料描述] LIKE ''%' + @产品名称 + '%'''
IF (@工序名称 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [工序名称] = ''' + @工序名称 + ''''
IF (@要求完工日期1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] >= ''' + @要求完工日期1 + ''''
IF (@要求完工日期2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] <= ''' + @要求完工日期2 + ''''
IF (@计划开始1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] >= ''' + @计划开始1 + ''''
IF (@计划开始2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] <= ''' + @计划开始2 + ''''
IF (@计划完成1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] >= ''' + @计划完成1 + ''''
IF (@计划完成2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] <= ''' + @计划完成2 + ''''
IF (@排产状态 = '未完成')
SET @selectStrWhere = @selectStrWhere + ' AND ISNULL([排产状态], 0) = 0'
ELSE IF (@排产状态 = '已完成')
SET @selectStrWhere = @selectStrWhere + ' AND [排产状态] = 1'
IF (@自制件属性 = '机加')
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] = ''机加件'''
ELSE IF (@自制件属性 = '装配')
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] LIKE ''%装配'''
IF (@加急状态 = '加急')
SET @selectStrWhere = @selectStrWhere + ' AND [加急状态] = 1'
IF (@单据状态 = '正常')
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is null'
ELSE IF (@单据状态 = '关闭')
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is not null'
IF (@指派对象 <> '全部')
SET @selectStrWhere = @selectStrWhere + ' AND [指派对象] IN (SELECT value FROM STRING_SPLIT(''' + @指派对象 + ''', '',''))'
SET @selectStrWhere = @selectStrWhere + ' ORDER BY v.[计划完成] ASC, v.[订单编号] ASC'
SET @selectStr = @selectStr + @selectStrWhere
PRINT @selectStr
EXEC sp_executesql @selectStr
END
GO

View File

@@ -0,0 +1,81 @@
ALTER PROCEDURE [dbo].[质量管理_质检明细_查询]
@质检类型 nvarchar(4000) = '10',
@开始日期 datetime = NULL,
@结束日期 datetime = NULL,
@订单号 nvarchar(4000) = '0',
@合同号 nvarchar(4000) = '0',
@零件编码 nvarchar(4000) = '0',
@零件名称 nvarchar(4000) = '0',
@PageCurrent int = 1,
@PageSize int = 20,
@PageCount int OUTPUT,
@ItemCount int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tbname sysname = ' [dbo].[View_质检明细] '
DECLARE @fieldkey sysname = 'QT_AID'
DECLARE @where nvarchar(4000)
DECLARE @fieldshow nvarchar(1000)
DECLARE @fieldOrder nvarchar(1000) = ' 检测时间 DESC, QT_AID DESC '
SET @where = ' (1=1) '
IF @质检类型 = '10'
SET @where = @where + ' AND (1=1) '
ELSE IF @质检类型 = '0'
SET @where = @where + ' AND 质检类型 = ''收检'' '
ELSE IF @质检类型 = '1'
SET @where = @where + ' AND 质检类型 = ''终检'' '
ELSE IF @质检类型 = '2'
SET @where = @where + ' AND 质检类型 = ''来料检验'' '
ELSE IF @质检类型 = '3'
SET @where = @where + ' AND 质检类型 = ''退库检验'' '
IF @订单号 <> '0'
SET @where = @where + ' AND 计划号 LIKE ''%' + @订单号 + '%'' '
--IF @合同号 <> '0'
-- SET @where = @where + ' AND 内部合同号 LIKE ''%' + @合同号 + '%'' '
IF @零件编码 <> '0'
SET @where = @where + ' AND 零件编码 LIKE ''%' + @零件编码 + '%'' '
IF @零件名称 <> '0'
SET @where = @where + ' AND 零件名称 LIKE ''%' + @零件名称 + '%'' '
IF @开始日期 IS NOT NULL
SET @where = @where + ' AND 检测时间 >= ''' + CONVERT(nvarchar(30), @开始日期, 120) + ''' '
IF @结束日期 IS NOT NULL
SET @where = @where + ' AND 检测时间 <= ''' + CONVERT(nvarchar(30), @结束日期, 120) + ''' '
SET @fieldshow = '
[QT_AID]
,[质检类型]
,[零件编码]
,[零件名称]
,[内部合同号]
,[计划号]
,[工序名称]
,[检验数量]
,[合格数]
,[不合格数]
,[检测人]
,[检测时间]
,[检测说明]
,[工位名称]
,[订单类型]'
EXEC [dbo].[sp_xt_pagesplit]
@tbname,
@fieldkey,
@where,
@fieldshow,
@fieldOrder,
@PageCurrent,
@PageSize,
@PageCount OUTPUT,
@ItemCount OUTPUT
END

View File

@@ -0,0 +1,426 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @开始日期 = CONVERT(DATE, '19000101', 112) SET @开始日期 = NULL;
IF @结束日期 = CONVERT(DATE, '19000101', 112) SET @结束日期 = NULL;
;WITH 操作人汇总 AS (
SELECT
工位名称,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图全部
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称
),
日期汇总 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM View_生产工时视图全部
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
CAST(计划数量 AS DECIMAL(19,6)) AS 计划数量,
工序名称,
工位名称 AS 指派对象,
CASE
WHEN 操作描述 LIKE N'%白班%' THEN N'白班'
WHEN 操作描述 LIKE N'%夜班%' THEN N'夜班'
ELSE N''
END AS 班次,
操作类别 AS 报工类型,
CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图全部
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
)
SELECT
1 AS [Level],
工位名称 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS processName,
'' AS 班次,
'' AS 报工类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS processName,
'' AS 班次,
'' AS 报工类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
计划数量 AS 计划数量,
ISNULL(工序名称, '') AS processName,
ISNULL(班次, '') AS 班次,
ISNULL(报工类型, '') AS 报工类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END
GO
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @开始日期 = CONVERT(DATE, '19000101', 112) SET @开始日期 = NULL;
IF @结束日期 = CONVERT(DATE, '19000101', 112) SET @结束日期 = NULL;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM View_生产工时视图全部 v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
订单工时汇总 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.产品名称,
MAX(v.计划数量) AS 计划数量,
MAX(v.完成数量) AS 完成数量,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
MIN(CONVERT(VARCHAR(10), v.开始时间, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.结束时间, 120)) AS 计划完成,
CAST(SUM(v.有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础 v
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR v.工时类型 = @工时类型)
GROUP BY v.订单合同号, v.产品编码, v.产品名称
),
工序工时明细 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.工序名称,
MAX(v.工序说明) AS 工序说明,
v.工时类型,
v.操作人,
MAX(v.工位名称) AS 指派对象,
v.订单号,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(v.有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
MIN(CONVERT(VARCHAR(10), v.开始时间, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.结束时间, 120)) AS 计划完成,
MAX(v.计划数量) AS 计划数量
FROM 工时基础 v
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR v.工时类型 = @工时类型)
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.工时类型, v.操作人, v.订单号
)
SELECT
1 AS [Level],
合同号 AS contractNo,
产品名称 AS materialDesc,
产品编码 AS materialCode,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS processName,
'' AS 工序说明,
'' AS 工时类型,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(计划开始, '') AS planStart,
ISNULL(计划完成, '') AS planEnd,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
'' AS 订单号
FROM 订单工时汇总
UNION ALL
SELECT
2 AS [Level],
d.合同号 AS contractNo,
'' AS materialDesc,
d.产品编码 AS materialCode,
d.计划数量 AS 计划数量,
d.工序名称 AS processName,
ISNULL(d.工序说明, '') AS 工序说明,
d.工时类型 AS 工时类型,
d.操作人 AS operator,
ISNULL(d.指派对象, '') AS 指派对象,
'' AS qty,
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
d.计划开始 AS planStart,
d.计划完成 AS planEnd,
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
d.订单号 AS 订单号
FROM 工序工时明细 d
ORDER BY contractNo, materialCode, [Level], processName, 工时类型
END
GO
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @开始日期 = CONVERT(DATE, '19000101', 112) SET @开始日期 = NULL;
IF @结束日期 = CONVERT(DATE, '19000101', 112) SET @结束日期 = NULL;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM View_生产工时视图全部 v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
任务汇总 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
MAX(工序说明) AS 工序说明,
工时类型,
操作类别,
MAX(计划数量) AS 计划数量,
MAX(完成数量) AS 完成数量,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称, 工时类型, 操作类别
),
报工明细 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
工序名称,
工序说明,
操作人,
工位名称 AS 指派对象,
工时类型,
计划数量,
操作类别,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
)
SELECT
1 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(工序说明, '') AS 工序说明,
CAST(计划数量 AS DECIMAL(19,6)) AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 任务汇总
UNION ALL
SELECT
2 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
'' AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(工序说明, '') AS 工序说明,
CAST(计划数量 AS DECIMAL(19,6)) AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(操作人, '') AS operator,
ISNULL(指派对象, '') AS 指派对象,
'' AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 报工明细
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
END
GO

View File

@@ -0,0 +1,328 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '异常' THEN -ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM [dbo].[View_生产工时视图] v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工时类型,
计划数量,
工位名称 AS 指派对象,
CASE
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值
ELSE 0
END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
异常说明,
工序说明,
操作类别
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
AND ISNULL(阶段标识, 0) != -1
)
SELECT
1 AS [Level],
操作人 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS 工时类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
计划数量 AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END
GO
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM View_生产工时视图 v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
任务汇总 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工时类型,
操作类别,
MAX(计划数量) AS 计划数量,
MAX(完成数量) AS 完成数量,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称, 工时类型, 操作类别
),
报工明细 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
工序名称,
操作人,
工位名称 AS 指派对象,
工时类型,
计划数量,
操作类别,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(有效工时秒 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM 工时基础
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR 工时类型 = @工时类型)
)
SELECT
1 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
CAST(计划数量 AS DECIMAL(19,6)) AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 任务汇总
UNION ALL
SELECT
2 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
'' AS productName,
ISNULL(工序名称, '') AS processName,
CAST(计划数量 AS DECIMAL(19,6)) AS 计划数量,
ISNULL(工时类型, '') AS 工时类型,
ISNULL(操作人, '') AS operator,
ISNULL(指派对象, '') AS 指派对象,
'' AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 报工明细
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
END
GO

View File

@@ -0,0 +1,152 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人汇总 AS (
SELECT
工位名称,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称
),
日期汇总 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
工位名称 AS 指派对象,
CASE
WHEN 操作描述 LIKE N'%白班%' THEN N'白班'
WHEN 操作描述 LIKE N'%夜班%' THEN N'夜班'
ELSE N''
END AS 班次,
操作类别 AS 报工类型,
CASE WHEN 操作类别 IN (N'报工', N'辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
AND ISNULL(阶段标识, 0) = -1
)
SELECT
1 AS [Level],
工位名称 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 班次,
'' AS 报工类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS 班次,
'' AS 报工类型,
'' AS 指派对象,
'' AS startTime,
'' AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(班次, '') AS 班次,
ISNULL(报工类型, '') AS 报工类型,
ISNULL(指派对象, '') AS 指派对象,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END
GO

View File

@@ -0,0 +1,132 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@工时类型 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 人员班组 AS (
SELECT
LTRIM(RTRIM(Personnel_Name)) AS Personnel_Name,
MAX(NULLIF(LTRIM(RTRIM(班组)), '')) AS 班组
FROM [YL_MESDB].[dbo].[登录基础数据_人员信息]
WHERE Personnel_Name IS NOT NULL
GROUP BY LTRIM(RTRIM(Personnel_Name))
),
工时基础 AS (
SELECT
v.*,
ISNULL(p.班组, '未分类') AS 工时类型,
CASE
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.加工工时, 0) > 0 THEN ISNULL(v.加工工时, 0)
WHEN v.操作类别 IN ('报工', '辅助结束') AND ISNULL(v.总时长, 0) > 0 AND ISNULL(v.加工工时, 0) = 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 LIKE '%加班%' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
WHEN v.操作类别 = '开始加工' AND ISNULL(v.总时长, 0) > 0 THEN ISNULL(v.总时长, 0)
ELSE 0
END AS 有效工时秒
FROM View_生产工时视图 v
LEFT JOIN 人员班组 p ON LTRIM(RTRIM(v.操作人)) = p.Personnel_Name
),
订单工时汇总 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.产品名称,
MAX(v.计划数量) AS 计划数量,
MAX(v.完成数量) AS 完成数量,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
CAST(SUM(v.有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM 工时基础 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR v.工时类型 = @工时类型)
GROUP BY v.订单合同号, v.产品编码, v.产品名称
),
工序工时明细 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.工序名称,
v.工时类型,
v.操作人,
MAX(v.工位名称) AS 指派对象,
v.订单号,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(v.有效工时秒) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
MAX(v.计划数量) AS 计划数量
FROM 工时基础 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
AND (@工时类型 IS NULL OR @工时类型 = '' OR v.工时类型 = @工时类型)
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.工时类型, v.操作人, v.订单号
)
SELECT
1 AS [Level],
合同号 AS contractNo,
产品名称 AS materialDesc,
产品编码 AS materialCode,
CAST(NULL AS DECIMAL(19,6)) AS 计划数量,
'' AS processName,
'' AS 工时类型,
'' AS operator,
'' AS 指派对象,
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(计划开始, '') AS planStart,
ISNULL(计划完成, '') AS planEnd,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
'' AS 订单号
FROM 订单工时汇总
UNION ALL
SELECT
2 AS [Level],
d.合同号 AS contractNo,
'' AS materialDesc,
d.产品编码 AS materialCode,
d.计划数量 AS 计划数量,
d.工序名称 AS processName,
d.工时类型 AS 工时类型,
d.操作人 AS operator,
ISNULL(d.指派对象, '') AS 指派对象,
'' AS qty,
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
d.计划开始 AS planStart,
d.计划完成 AS planEnd,
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
d.订单号 AS 订单号
FROM 工序工时明细 d
ORDER BY contractNo, materialCode, [Level], processName, 工时类型
END
GO

View File

@@ -0,0 +1,94 @@
CREATE PROCEDURE [dbo].[sp_xt_pagesplit]
@tbname sysname,
@fieldkey sysname,
@where nvarchar(1000),
@fieldshow nvarchar(max),
@fieldOrder nvarchar(1000),
@PageCurrent int=1,
@PageSize int=30,
@PageCount int OUTPUT,
@ItemCount int output
AS
BEGIN
SET NOCOUNT ON
-- 参数检查
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
-- 处理排序
DECLARE @OrderBy nvarchar(1000)
IF ISNULL(@FieldOrder,N'')=N''
SET @OrderBy = N''
ELSE
SET @OrderBy = N'ORDER BY ' + LTRIM(@FieldOrder)
-- 处理条件 - 重要:去掉WHERE关键字,只保留条件内容
DECLARE @WhereCondition nvarchar(1000)
IF ISNULL(@Where,N'')=N''
SET @WhereCondition = N''
ELSE
SET @WhereCondition = @Where -- 只保存条件内容,不加WHERE
-- 清理字段名
SET @fieldkey = LTRIM(RTRIM(@fieldkey))
DECLARE @quotedKey NVARCHAR(128) = QUOTENAME(@fieldkey)
-- 计算总记录数
DECLARE @sql nvarchar(MAX)
IF @WhereCondition = N''
SET @sql = N'SELECT @ItemCount = COUNT(*) FROM ' + @tbname
ELSE
SET @sql = N'SELECT @ItemCount = COUNT(*) FROM ' + @tbname + N' WHERE ' + @WhereCondition
EXEC sp_executesql @sql, N'@ItemCount int OUTPUT', @ItemCount OUTPUT
-- 计算总页数
SET @PageCount = CEILING((@ItemCount + 0.0) / @PageSize)
IF @PageCount = 0 SET @PageCount = 1
-- 返回当前页数据
DECLARE @TopRows INT = (@PageCurrent - 1) * @PageSize
IF @PageCurrent = 1
BEGIN
-- 第一页
IF @WhereCondition = N''
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N' ' + @OrderBy
ELSE
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N' WHERE ' + @WhereCondition + N' ' + @OrderBy
END
ELSE
BEGIN
-- 其他页
IF @WhereCondition = N''
BEGIN
-- 无条件的情况
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N'
WHERE ' + @quotedKey + N' NOT IN (
SELECT TOP ' + CONVERT(NVARCHAR, @TopRows) + N' ' + @quotedKey + N'
FROM ' + @tbname + N' ' + @OrderBy + N'
) ' + @OrderBy
END
ELSE
BEGIN
-- 有条件的情况
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N'
WHERE ' + @quotedKey + N' NOT IN (
SELECT TOP ' + CONVERT(NVARCHAR, @TopRows) + N' ' + @quotedKey + N'
FROM ' + @tbname + N' WHERE ' + @WhereCondition + N' ' + @OrderBy + N'
) AND ' + @WhereCondition + N' ' + @OrderBy
END
END
-- 调试用,可以注释掉
-- PRINT @sql
-- 执行
EXEC(@sql)
END

View File

@@ -0,0 +1,94 @@
CREATE PROCEDURE [dbo].[工时统计_任务工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 任务汇总 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
操作类别,
MAX(计划数量) AS 计划数量,
MAX(完成数量) AS 完成数量,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(总时长) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称,操作类别
),
报工明细 AS (
SELECT
订单合同号 AS 合同号,
订单号,
产品编码,
工序名称,
操作人,
操作类别,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
)
SELECT
1 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
'' AS operator,
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 任务汇总
UNION ALL
SELECT
2 AS [Level],
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
'' AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(操作人, '') AS operator,
'' AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours,
操作类别
FROM 报工明细
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
END

View File

@@ -0,0 +1,49 @@
CREATE PROCEDURE [dbo].[工时统计_任务工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 导出文件名和类型
SELECT '任务工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
-- 字段宽度
SELECT 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码, 256*25 AS 产品名称, 256*15 AS 工序名称,
256*12 AS 操作人, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
-- 是否计算列
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码, 0 AS 产品名称, 0 AS 工序名称,
0 AS 操作人, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
-- 导出数据:每行都填满完整信息
SELECT
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
ISNULL(操作人, '') AS 操作人,
CASE WHEN 计划数量 IS NULL THEN '' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
CASE WHEN 完成数量 IS NULL THEN '' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
ORDER BY 订单合同号, 订单号, 产品编码, 工序名称, 开始时间
END

View File

@@ -0,0 +1,164 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人汇总 AS (
SELECT
操作人,
COUNT(*) AS 报工次数,
SUM(CASE
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常工时记为负数
ELSE 0
END) AS 报工数量,
CAST(SUM(CASE
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
ELSE 总时长
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) != -1
GROUP BY 操作人
),
日期汇总 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常工时记为负数
ELSE 0
END) AS 报工数量,
CAST(SUM(CASE
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
ELSE 总时长
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) != -1
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
CASE
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常数量记为负数
ELSE 0
END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CASE
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
ELSE 总时长
END / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
异常说明,
工序说明,
操作类别
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) != -1
)
SELECT
1 AS [Level],
操作人 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS startTime,
'' AS endTime,
'' AS 异常说明,
'' AS 工序说明,
'' AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
操作人 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
ISNULL(异常说明, '') AS 异常说明,
ISNULL(工序说明, '') AS 工序说明,
ISNULL(操作类别, '') AS 操作类别,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END

View File

@@ -0,0 +1,50 @@
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 导出文件名和类型
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
-- 字段宽度
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
-- 是否计算列
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
-- 导出数据:每行都填满完整信息
SELECT
操作人,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
CASE WHEN 操作类别 IN ('报工', '辅助结束','加班','异常','开始加工') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM [dbo].[View_生产工时视图]
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) != -1
ORDER BY 操作人, 开始时间
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[工时统计_设备工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人汇总 AS (
SELECT
工位名称,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) = -1
GROUP BY 工位名称
),
日期汇总 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
COUNT(*) AS 报工次数,
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) = -1
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
),
报工明细 AS (
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
订单合同号 AS 合同号,
订单号,
产品编码,
产品名称,
工序名称,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND 操作人 IS NOT NULL AND 操作人 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) = -1
)
SELECT
1 AS [Level],
工位名称 AS operator,
'' AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS startTime,
'' AS endTime,
CAST(总工时小时 AS VARCHAR(20)) AS workHours
FROM 操作人汇总
UNION ALL
SELECT
2 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
'' AS contractNo,
'' AS orderNo,
'' AS productCode,
'' AS productName,
'' AS processName,
'' AS startTime,
'' AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 日期汇总
UNION ALL
SELECT
3 AS [Level],
工位名称 AS operator,
工作日期 AS dateLabel,
'' AS reportCount,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(合同号, '') AS contractNo,
ISNULL(订单号, '') AS orderNo,
ISNULL(产品编码, '') AS productCode,
ISNULL(产品名称, '') AS productName,
ISNULL(工序名称, '') AS processName,
ISNULL(开始时间, '') AS startTime,
ISNULL(结束时间, '') AS endTime,
CAST(工时小时 AS VARCHAR(20)) AS workHours
FROM 报工明细
ORDER BY operator, dateLabel, [Level]
END

View File

@@ -0,0 +1,50 @@
CREATE PROCEDURE [dbo].[工时统计_设备工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 导出文件名和类型
SELECT '设备工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
-- 字段宽度
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
256*25 AS 产品名称, 256*15 AS 工序名称, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
-- 是否计算列
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
0 AS 产品名称, 0 AS 工序名称, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
-- 导出数据:每行都填满完整信息
SELECT
工位名称,
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
ISNULL(订单合同号, '') AS 合同号,
ISNULL(订单号, '') AS 订单号,
ISNULL(产品编码, '') AS 产品编码,
ISNULL(产品名称, '') AS 产品名称,
ISNULL(工序名称, '') AS 工序名称,
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 报工日期 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 报工日期 <= @结束日期)
AND 工位名称 IS NOT NULL AND 工位名称 != ''
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
and isNull(阶段标识,0) = -1
ORDER BY 工位名称, 开始时间
END

View File

@@ -0,0 +1,90 @@
CREATE PROCEDURE [dbo].[工时统计_项目工时_查询]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
;WITH 订单工时汇总 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.产品名称,
MAX(v.计划数量) AS 计划数量,
MAX(v.完成数量) AS 完成数量,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
FROM View_生产工时视图 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
GROUP BY v.订单合同号, v.产品编码, v.产品名称
),
工序工时明细 AS (
SELECT
v.订单合同号 AS 合同号,
v.产品编码,
v.工序名称,
v.操作人,
v.订单号,
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成
FROM View_生产工时视图 v
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.操作人,v.订单号
)
SELECT
1 AS [Level],
合同号 AS contractNo,
产品名称 AS materialDesc,
产品编码 AS materialCode,
'' AS processName,
'' AS operator,
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
ISNULL(计划开始, '') AS planStart,
ISNULL(计划完成, '') AS planEnd,
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
'' AS 订单号
FROM 订单工时汇总
UNION ALL
SELECT
2 AS [Level],
d.合同号 AS contractNo,
'' AS materialDesc,
d.产品编码 AS materialCode,
d.工序名称 AS processName,
d.操作人 AS operator,
'' AS qty,
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
d.计划开始 AS planStart,
d.计划完成 AS planEnd,
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
d.订单号 AS 订单号
FROM 工序工时明细 d
ORDER BY contractNo, materialCode, [Level], processName
END

View File

@@ -0,0 +1,48 @@
CREATE PROCEDURE [dbo].[工时统计_项目工时_查询_导出]
@合同号 NVARCHAR(50) = NULL,
@操作人 NVARCHAR(50) = NULL,
@产品编码 NVARCHAR(100) = NULL,
@工序名称 NVARCHAR(50) = NULL,
@订单号 NVARCHAR(50) = NULL,
@开始日期 DATE = NULL,
@结束日期 DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 导出文件名和类型
SELECT '项目工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
-- 字段宽度
SELECT 256*20 AS 合同号, 256*20 AS 订单号,256*30 AS 产品名称, 256*40 AS 产品编码, 256*15 AS 工序名称, 256*12 AS 操作人,
256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*15 AS 计划开始, 256*15 AS 计划完成, 256*12 AS '工时(h)'
-- 是否计算列
SELECT 0 AS 合同号, 0 AS 订单号,0 AS 产品名称, 0 AS 产品编码, 0 AS 工序名称, 0 AS 操作人,
0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 计划开始, 0 AS 计划完成, 0 AS '工时(h)'
-- 导出数据:每行都填满完整信息
SELECT
v.订单合同号 AS 合同号,
v.订单号,
v.产品名称,
v.产品编码,
v.工序名称,
v.操作人,
CASE WHEN v.计划数量 IS NULL THEN '' WHEN v.计划数量 = FLOOR(v.计划数量) THEN CAST(CAST(v.计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
CASE WHEN v.完成数量 IS NULL THEN '' WHEN v.完成数量 = FLOOR(v.完成数量) THEN CAST(CAST(v.完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN CAST(v.操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划开始,
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划完成,
CAST(CAST(v.加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
FROM View_生产工时视图 v
WHERE(@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
ORDER BY v.订单合同号, v.产品编码, v.工序名称, v.操作人,v.订单号
END

View File

@@ -0,0 +1,196 @@
CREATE PROCEDURE [dbo].[生产管理_生产计划跟踪]
@订单号 int = 0,
@物料类型 nvarchar(50) = '', --自制件、装配件
@合同号 nvarchar(50) = '',
@产品编码 nvarchar(50) = '',
@产品名称 nvarchar(50) = '',
@工序名称 nvarchar(50) = '',
@要求完工日期1 nvarchar(50) = '',
@要求完工日期2 nvarchar(50) = '',
@计划开始1 nvarchar(50) = '',
@计划开始2 nvarchar(50) = '',
@计划完成1 nvarchar(50) = '',
@计划完成2 nvarchar(50) = '',
@排产状态 nvarchar(50) = '全部', --全部,已完成、未完成
@指派对象 nvarchar(50) = '全部',
@自制件属性 nvarchar(50) = '全部',
@计划号 nvarchar(50) = '',
@加急状态 nvarchar(50) = '',
@单据状态 nvarchar(50) = ''
AS
BEGIN
DECLARE @selectStr NVARCHAR(MAX)
DECLARE @selectStrWhere NVARCHAR(4000) = ' WHERE [物料类型] = ''pit_Resource'' '
SET @selectStr = N'
SELECT top 500
v.计划号,
加急总数,
拣配状态,
自制件属性,
入库数量,
外协分组,
case
when isnull(任务状态,0)=4 then ''已完成''
when isnull(任务状态,0)=2 then ''已开工''
when isnull(任务状态,0)=0 then ''待执行''
when isnull(任务状态,0)=1 then ''可执行''
else ''''
end as [任务状态],
case
when isnull(加工状态,0)=2 then ''辅助开始''
when isnull(加工状态,0)=3 then ''辅助结束''
when isnull(加工状态,0)=4 then ''开始加工''
when isnull(加工状态,0)=5 then ''暂停''
when isnull(加工状态,0)=6 then ''报工''
else ''''
end as [加工状态],
[计划数量订单],
ISNULL(开工时间, 0) AS 开工时间,
ISNULL(进度, 0) AS 进度,
v.[TaskAID],
[合同号],
v.[订单编号] AS 订单号,
[订单行号],
[订单拆分内码] AS 拆分内码,
[物料编号] AS 产品编码,
[物料描述] AS 产品名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] AS 要求完工日期,
[工序名称],
完成数量,
收料数量,
CASE
WHEN [加急状态] = 1 THEN ''加急''
ELSE ''''
END AS 加急状态,
加急数量,
性质,
ISNULL(总工时, 0) AS 总工时,
[占用情况],
[排产状态],
[工序计划数量],
指派对象编号,
指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,
计划开始时间,
计划完成时间,
最晚开始时间,
[派工状态],
[外协通知],
[优先级],
[未完成说明],
[派工特殊说明],
[最后编辑人],
[最后编辑时间],
[二次派工],
CASE
WHEN zj_终检.计划号 IS NOT NULL THEN ''是''
ELSE ''否''
END AS 终检,
-- 新增收检相关字段
ISNULL(zj_收检.合格数合计, 0) AS 收检合格数,
ISNULL(zj_收检.不合格数合计, 0) AS 收检不合格数,
ISNULL(zj_收检.合格数合计, 0) + ISNULL(zj_收检.不合格数合计, 0) AS 收检总数,
ISNULL(jl.开始时间, 0) AS 开始时间,
ISNULL(jl.结束时间, 0) AS 结束时间,
ISNULL(jl.外协结束时间, 0) AS 外协结束时间,
STUFF((
SELECT '','' + d2.工序名称
FROM [dbo].[View_生产订单_MES] d2
WHERE d2.订单编号 = v.订单编号 order by d2.订单行号
FOR XML PATH('''')
), 1, 1, '''') AS 工艺路线
FROM [dbo].[View_生产订单全部(包括已关闭)] v
-- 终检判断
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj_终检 ON v.[订单编号] = zj_终检.计划号
-- 收检数量统计
LEFT JOIN (
SELECT
TaskAID,
SUM(ISNULL(合格数, 0)) AS 合格数合计,
SUM(ISNULL(不合格数, 0)) AS 不合格数合计
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''收检''
GROUP BY TaskAID
) zj_收检 ON v.[TaskAID] = zj_收检.TaskAID
LEFT JOIN (
SELECT
TaskAID,
min(ISNULL(开始时间, 0)) AS 开始时间,
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(开始时间, 0) ELSE NULL END) AS 外协结束时间,
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(结束时间, 0) ELSE NULL END) AS 结束时间
FROM [dbo].[YL_加工中心_操作记录表]
GROUP BY TaskAID
) jl ON v.[TaskAID] = jl.TaskAID'
-- 添加筛选条件
IF (@订单号 > 0)
SET @selectStrWhere = @selectStrWhere + ' AND [订单编号] = ' + CONVERT(VARCHAR(10), @订单号)
IF (@计划号 > 0)
SET @selectStrWhere = @selectStrWhere + ' AND v.[计划号] = '''+@计划号+''''
IF (@合同号 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [合同号] LIKE ''%' + @合同号 + '%'''
IF (@产品编码 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [物料编号] LIKE ''%' + @产品编码 + '%'''
IF (@产品名称 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [物料描述] LIKE ''%' + @产品名称 + '%'''
IF (@工序名称 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [工序名称] = ''' + @工序名称 + ''''
IF (@要求完工日期1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] >= ''' + @要求完工日期1 + ''''
IF (@要求完工日期2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] <= ''' + @要求完工日期2 + ''''
IF (@计划开始1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] >= ''' + @计划开始1 + ''''
IF (@计划开始2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] <= ''' + @计划开始2 + ''''
IF (@计划完成1 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] >= ''' + @计划完成1 + ''''
IF (@计划完成2 <> '')
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] <= ''' + @计划完成2 + ''''
IF (@排产状态 = '未完成')
SET @selectStrWhere = @selectStrWhere + ' AND ISNULL([排产状态], 0) = 0'
ELSE IF (@排产状态 = '已完成')
SET @selectStrWhere = @selectStrWhere + ' AND [排产状态] = 1'
IF (@自制件属性 = '机加')
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] = ''机加件'''
ELSE IF (@自制件属性 = '装配')
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] LIKE ''%装配'''
IF (@加急状态 = '加急')
SET @selectStrWhere = @selectStrWhere + ' AND [加急状态] = 1'
IF (@单据状态 = '正常')
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is null'
ELSE IF (@单据状态 = '关闭')
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is not null'
IF (@指派对象 <> '全部')
SET @selectStrWhere = @selectStrWhere + ' AND [指派对象] IN (SELECT value FROM STRING_SPLIT(''' + @指派对象 + ''', '',''))'
-- 添加排序
SET @selectStrWhere = @selectStrWhere + ' ORDER BY [计划完成] ASC, [订单编号] ASC'
-- 合并SQL
SET @selectStr = @selectStr + @selectStrWhere
-- 打印SQL(调试用)
PRINT @selectStr
-- 执行查询
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,94 @@
-- 质量管理_质检明细_查询
CREATE PROCEDURE [dbo].[质量管理_质检明细_查询]
@质检类型 nvarchar(4000) = '10', -- 修改为字符串类型,因为传入的是字符串
@开始日期 datetime = NULL,
@结束日期 datetime = NULL,
@订单号 nvarchar(4000) = '0', -- 修改为字符串类型,避免类型转换问题
@合同号 nvarchar(4000) = '0',
@零件编码 nvarchar(4000) = '0',
@零件名称 nvarchar(4000) = '0',
@PageCurrent int = 1, -- 要显示的页码
@PageSize int = 20, -- 每页的大小(记录数)
@PageCount int OUTPUT, -- 总页数
@ItemCount int OUTPUT -- 数据总数
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tbname sysname = ' [dbo].[View_质检明细] ' -- 要分页显示的表名
DECLARE @fieldkey sysname = ' ' -- 用于定位记录的主键(惟一键)字段
DECLARE @where nvarchar(4000) -- 查询条件
DECLARE @fieldshow nvarchar(1000) -- 要显示的字段列表
DECLARE @fieldOrder nvarchar(1000) = ' 检测时间 DESC ' -- 排序字段
-- 构建查询条件(使用参数化方式,避免SQL注入)
SET @where = ' (1=1) '
-- 质检类型过滤
IF @质检类型 = '10' -- 全部
SET @where = @where + ' AND (1=1) '
ELSE IF @质检类型 = '0'
SET @where = @where + ' AND 质检类型 = ''收检'' '
ELSE IF @质检类型 = '1'
SET @where = @where + ' AND 质检类型 = ''终检'' '
ELSE IF @质检类型 = '2'
SET @where = @where + ' AND 质检类型 = ''来料检验'' '
ELSE IF @质检类型 = '3'
SET @where = @where + ' AND 质检类型 = ''退库检验'' '
-- 订单号过滤条件(修正:使用LIKE时加引号)
IF @订单号 <> '0'
SET @where = @where + ' AND 计划号 LIKE ''%' + @订单号 + '%'' '
-- 合同号过滤条件
--IF @合同号 <> '0'
-- SET @where = @where + ' AND 内部合同号 LIKE ''%' + @合同号 + '%'' '
-- 零件编码过滤条件
IF @零件编码 <> '0'
SET @where = @where + ' AND 零件编码 LIKE ''%' + @零件编码 + '%'' '
-- 零件名称过滤条件
IF @零件名称 <> '0'
SET @where = @where + ' AND 零件名称 LIKE ''%' + @零件名称 + '%'' '
-- 日期范围过滤(如果提供了日期参数)
IF @开始日期 IS NOT NULL
SET @where = @where + ' AND 检测时间 >= ''' + CONVERT(nvarchar(30), @开始日期, 120) + ''' '
IF @结束日期 IS NOT NULL
SET @where = @where + ' AND 检测时间 <= ''' + CONVERT(nvarchar(30), @结束日期, 120) + ''' '
SET @fieldshow = '
[QT_AID]
,[质检类型]
,[零件编码]
,[零件名称]
,[内部合同号]
,[计划号]
,[工序名称]
,[检验数量]
,[合格数]
,[不合格数]
,[检测人]
,[检测时间]
,[检测说明]
,[工位名称]
,[订单类型]'
-- 调试用(可以注释掉)
PRINT @where
-- 执行分页存储过程
EXEC [dbo].[sp_xt_pagesplit]
@tbname,
@fieldkey,
@where,
@fieldshow,
@fieldOrder,
@PageCurrent,
@PageSize,
@PageCount OUTPUT,
@ItemCount OUTPUT
END