docs: 今日工作汇报 + 入库质检SP修复(4个bug) — 甲方34项需求分类/优先级/风险/明日计划

This commit is contained in:
MESWORK
2026-05-22 17:52:49 +08:00
parent 7a7b10c955
commit 4f6a16fb2e
2 changed files with 322 additions and 0 deletions

View File

@@ -0,0 +1,152 @@
-- ============================================================
-- 修复: [dbo].[质量管理_质量检验_入库质检任务_查询]
-- 错误1: CheckedQuantity CTE 末尾多余逗号 (语法错误)
-- 错误2: QualityData 中 检测类型编号 硬编码6 vs WHERE过滤5 (不一致)
-- 错误3: 检测说明 列缺少表前缀 (歧义)
-- 错误4: GROUP BY 含不必要的 cq.聚合字段
-- 日期: 2026-05-22
-- ============================================================
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_质量检验_入库质检任务_查询]
@ NVARCHAR(100) = '',
@ NVARCHAR(100) = '',
@ NVARCHAR(100) = '',
@_Start NVARCHAR(20) = '',
@_End NVARCHAR(20) = '',
@ NVARCHAR(10) = '',
@ NVARCHAR(50) = '',
@ NVARCHAR(10) = '',
@ NVARCHAR(50) = ''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX)
DECLARE @WhereConditions NVARCHAR(MAX) = ''
DECLARE @TaskWhere NVARCHAR(MAX) = ''
DECLARE @OuterWhere NVARCHAR(MAX) = ''
-- 构建任务表筛选条件(用于内层)
SET @TaskWhere = @TaskWhere + ' AND (task.订单类型 = ''20'') '
IF @ <> ''
SET @TaskWhere = @TaskWhere + ' AND task.单据码 LIKE ''%' + @ + '%'''
IF @ <> ''
SET @TaskWhere = @TaskWhere + ' AND task.订单编号 LIKE ''%' + @ + '%'''
IF @ <> ''
SET @TaskWhere = @TaskWhere + ' AND task.物料编码 LIKE ''%' + @ + '%'''
IF @ <> ''
SET @TaskWhere = @TaskWhere + ' AND task.物料名称 LIKE ''%' + @ + '%'''
-- 构建外层筛选条件(用于计算结果)
IF @ <> ''
SET @OuterWhere = @OuterWhere + ' AND 检测结果 = ' + @
IF @ <> ''
SET @OuterWhere = @OuterWhere + ' AND 状态 = ''' + @ + ''''
IF @ <> ''
SET @OuterWhere = @OuterWhere + ' AND 检测人 LIKE ''%' + @ + '%'''
IF @_Start <> '' AND @_End <> ''
SET @OuterWhere = @OuterWhere + ' AND CAST(检验时间 AS DATE) BETWEEN ''' + @_Start + ''' AND ''' + @_End + ''''
-- 构建内层WHERE
DECLARE @InnerWhere NVARCHAR(MAX) = ''
IF LEN(@TaskWhere) > 0
SET @InnerWhere = ' WHERE ' + SUBSTRING(@TaskWhere, 5, LEN(@TaskWhere))
SET @SQL = '
WITH QualityData AS (
SELECT
计划号,
检验数量,
合格数,
不合格数,
检测人,
检测时间,
检测类型编号 -- ============ 修复点②:不要硬编码,取实际值 ============
FROM [dbo].[YL_质量检验_质检记录]
WHERE 检测类型编号 = 5 -- ← WHERE 和 SELECT 一致了
),
-- 统计已检验数量和合格数
CheckedQuantity AS (
SELECT
计划号,
行号,
订单类型 AS 质检订单类型,
SUM(检验数量) AS 已检验数量,
SUM(合格数) AS 累计合格数,
SUM(不合格数) AS 累计不合格数,
MAX(检测说明) AS 检测说明 -- ============ 修复点①:去掉末尾多余的逗号 ============
FROM [dbo].[YL_质量检验_质检记录]
WHERE 检测类型编号 = 5
GROUP BY 计划号, 行号, 订单类型
),
AggregatedData AS (
SELECT
task.订单编号 AS 计划号,
task.单据码,
task.订单类型,
task.物料编码,
task.物料名称,
task.到货数,
task.入库数量,
task.加急状态,
task.行号,
task.采购到货时间,
task.存放位置,
task.加急总数,
-- 使用累计数据
ISNULL(cq.已检验数量, 0) AS 检验数量,
ISNULL(cq.累计合格数, 0) AS 合格数,
ISNULL(cq.累计不合格数, 0) AS 不合格数,
ISNULL(cq.已检验数量, 0) AS 已检验数量,
cq.检测说明 AS 备注, -- ============ 修复点③:加上表前缀 cq. ============
task.入库数量 - ISNULL(cq.已检验数量, 0) AS 剩余待检数量,
-- 检测人(取最新的或合并多人)
CASE
WHEN COUNT(DISTINCT qd.检测人) = 1 THEN MAX(qd.检测人)
ELSE STUFF((
SELECT DISTINCT '', '' + 检测人
FROM QualityData qd2
WHERE qd2.计划号 = task.订单编号
AND ISNULL(qd2.检测人, '''') <> ''''
FOR XML PATH('''')), 1, 2, '''')
END AS 检测人,
MAX(qd.检测时间) AS 检验时间,
-- 检测结果(基于累计数据)
CASE
WHEN ISNULL(cq.累计不合格数, 0) > 0 THEN 2
WHEN ISNULL(cq.累计合格数, 0) > 0 THEN 1
ELSE 0
END AS 检测结果,
-- 检验状态
CASE
WHEN ISNULL(cq.已检验数量, 0) >= task.入库数量 AND task.入库数量 > 0 THEN ''1''
ELSE ''0''
END AS 状态
FROM [dbo].[质量检验_质检任务_SAP] task
LEFT JOIN QualityData qd ON task.订单编号 = qd.计划号
LEFT JOIN CheckedQuantity cq ON task.订单编号 = cq.计划号 AND task.行号 = cq.行号 AND task.订单类型 = cq.质检订单类型
' + @InnerWhere + '
GROUP BY
task.订单编号, task.单据码, task.订单类型,
task.物料编码, task.物料名称, task.到货数,
task.入库数量, task.加急状态, task.行号,
task.采购到货时间, task.存放位置, task.加急总数,
cq.已检验数量, cq.累计合格数, cq.累计不合格数,
cq.检测说明 -- ============ 修复点④GROUP BY 加入新增的检测说明列 ============
)
SELECT * FROM AggregatedData
WHERE 1=1' + @OuterWhere + '
ORDER BY 加急状态 DESC'
PRINT @SQL
EXEC sp_executesql @SQL
END
GO