feat: update MES tracking and reporting workflows
This commit is contained in:
147
db_backups/add_product_pass_rate_workstation_menu_20260630.sql
Normal file
147
db_backups/add_product_pass_rate_workstation_menu_20260630.sql
Normal file
@@ -0,0 +1,147 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @Title nvarchar(100) = N'产品合格率(工位)';
|
||||
DECLARE @Path nvarchar(300) = N'ProductPassRateWorkstation/index';
|
||||
DECLARE @Component nvarchar(300) = N'/ProductionManagement/ProductPassRateWorkstation/index';
|
||||
DECLARE @Name nvarchar(100) = N'ProductPassRateWorkstation';
|
||||
DECLARE @SourcePath nvarchar(300) = N'ProductionPlanTrack/index';
|
||||
DECLARE @SourceComponent nvarchar(300) = N'/ProductionManagement/ProductionPlanTrack/index';
|
||||
DECLARE @TargetRole int = NULL;
|
||||
|
||||
IF OBJECT_ID(N'dbo.登录基础数据_二级菜单', N'U') IS NULL
|
||||
BEGIN
|
||||
RAISERROR(N'未找到表 dbo.登录基础数据_二级菜单。', 16, 1);
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @IdIsIdentity bit = ISNULL(COLUMNPROPERTY(OBJECT_ID(N'dbo.登录基础数据_二级菜单'), N'id', 'IsIdentity'), 0);
|
||||
|
||||
IF @IdIsIdentity = 1
|
||||
BEGIN
|
||||
;WITH SourceRows AS
|
||||
(
|
||||
SELECT
|
||||
src.[账号代码],
|
||||
COALESCE(prodParent.[id], src.[pid]) AS [pid],
|
||||
src.[icon],
|
||||
src.[AddData],
|
||||
src.[DeleteData],
|
||||
src.[EditData],
|
||||
src.[SearchData]
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS src
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) rp.[id]
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS rp
|
||||
WHERE rp.[账号代码] = src.[账号代码]
|
||||
AND rp.[是否启用] = 1
|
||||
AND rp.[title] = N'生产管理'
|
||||
ORDER BY rp.[id]
|
||||
) AS prodParent
|
||||
WHERE src.[是否启用] = 1
|
||||
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
|
||||
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS existing
|
||||
WHERE existing.[账号代码] = src.[账号代码]
|
||||
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
|
||||
)
|
||||
)
|
||||
INSERT INTO [dbo].[登录基础数据_二级菜单]
|
||||
([pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [是否启用], [AddData], [DeleteData], [EditData], [SearchData])
|
||||
SELECT
|
||||
[pid],
|
||||
@Path,
|
||||
@Component,
|
||||
NULL,
|
||||
@Name,
|
||||
@Title,
|
||||
[icon],
|
||||
[账号代码],
|
||||
1,
|
||||
[AddData],
|
||||
[DeleteData],
|
||||
[EditData],
|
||||
[SearchData]
|
||||
FROM SourceRows;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
;WITH SourceRows AS
|
||||
(
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (ORDER BY src.[账号代码], src.[id]) AS rn,
|
||||
src.[账号代码],
|
||||
COALESCE(prodParent.[id], src.[pid]) AS [pid],
|
||||
src.[icon],
|
||||
src.[AddData],
|
||||
src.[DeleteData],
|
||||
src.[EditData],
|
||||
src.[SearchData]
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS src
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) rp.[id]
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS rp
|
||||
WHERE rp.[账号代码] = src.[账号代码]
|
||||
AND rp.[是否启用] = 1
|
||||
AND rp.[title] = N'生产管理'
|
||||
ORDER BY rp.[id]
|
||||
) AS prodParent
|
||||
WHERE src.[是否启用] = 1
|
||||
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
|
||||
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[登录基础数据_二级菜单] AS existing
|
||||
WHERE existing.[账号代码] = src.[账号代码]
|
||||
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
|
||||
)
|
||||
),
|
||||
BaseId AS
|
||||
(
|
||||
SELECT ISNULL(MAX([id]), 0) AS maxId
|
||||
FROM [dbo].[登录基础数据_二级菜单]
|
||||
)
|
||||
INSERT INTO [dbo].[登录基础数据_二级菜单]
|
||||
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [是否启用], [AddData], [DeleteData], [EditData], [SearchData])
|
||||
SELECT
|
||||
BaseId.maxId + SourceRows.rn,
|
||||
SourceRows.[pid],
|
||||
@Path,
|
||||
@Component,
|
||||
NULL,
|
||||
@Name,
|
||||
@Title,
|
||||
SourceRows.[icon],
|
||||
SourceRows.[账号代码],
|
||||
1,
|
||||
SourceRows.[AddData],
|
||||
SourceRows.[DeleteData],
|
||||
SourceRows.[EditData],
|
||||
SourceRows.[SearchData]
|
||||
FROM SourceRows
|
||||
CROSS JOIN BaseId;
|
||||
END;
|
||||
|
||||
UPDATE [dbo].[登录基础数据_二级菜单]
|
||||
SET
|
||||
[path] = @Path,
|
||||
[componet] = @Component,
|
||||
[name] = @Name,
|
||||
[title] = @Title,
|
||||
[模块代码] = [id],
|
||||
[是否启用] = 1
|
||||
WHERE [title] = @Title OR [componet] = @Component OR [path] = @Path;
|
||||
|
||||
SELECT [id], [pid], [path], [componet], [name], [title], [icon], [账号代码], [是否启用], [SearchData]
|
||||
FROM [dbo].[登录基础数据_二级菜单]
|
||||
WHERE [path] = @Path OR [componet] = @Component OR [title] = @Title
|
||||
ORDER BY [账号代码], [id];
|
||||
|
||||
172
db_backups/create_product_pass_rate_workstation_20260630.sql
Normal file
172
db_backups/create_product_pass_rate_workstation_20260630.sql
Normal file
@@ -0,0 +1,172 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.生产管理_产品合格率工位_查询', N'P') IS NULL
|
||||
BEGIN
|
||||
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_产品合格率工位_查询] AS BEGIN SET NOCOUNT ON; END');
|
||||
END
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[生产管理_产品合格率工位_查询]
|
||||
@生产订单号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(200) = N'',
|
||||
@物料名称 nvarchar(200) = N'',
|
||||
@关闭日期_Start nvarchar(50) = N'',
|
||||
@关闭日期_End nvarchar(50) = N'',
|
||||
@工序 nvarchar(100) = N'',
|
||||
@工位 nvarchar(100) = N'',
|
||||
@合格状态 nvarchar(20) = N'不合格'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @开始日期 date = TRY_CONVERT(date, NULLIF(@关闭日期_Start, N''));
|
||||
DECLARE @结束日期 date = TRY_CONVERT(date, NULLIF(@关闭日期_End, N''));
|
||||
|
||||
IF @开始日期 IS NULL AND @结束日期 IS NULL AND @生产订单号 = N''
|
||||
BEGIN
|
||||
SET @开始日期 = DATEADD(day, -30, CONVERT(date, GETDATE()));
|
||||
SET @结束日期 = CONVERT(date, GETDATE());
|
||||
END;
|
||||
|
||||
CREATE TABLE #已关闭订单
|
||||
(
|
||||
[生产订单号] nvarchar(100) NOT NULL PRIMARY KEY,
|
||||
[关闭日期] datetime NULL,
|
||||
[物料名称] nvarchar(200) NULL,
|
||||
[物料编码] nvarchar(50) NULL,
|
||||
[计划数量] decimal(18, 4) NULL
|
||||
);
|
||||
|
||||
DECLARE @SapSql nvarchar(max) =
|
||||
N'SELECT 生产订单号, 实际结算日期, 产品名称, 产品编码, 产品计划数量, 单据状态 FROM SBO_YL.dbo.UBT_OWOR WHERE 单据状态 IS NOT NULL';
|
||||
|
||||
IF @生产订单号 <> N''
|
||||
SET @SapSql += N' AND 生产订单号 = ''' + REPLACE(@生产订单号, N'''', N'''''') + N'''';
|
||||
|
||||
IF @开始日期 IS NOT NULL
|
||||
SET @SapSql += N' AND 实际结算日期 >= ''' + CONVERT(nvarchar(10), @开始日期, 120) + N'''';
|
||||
|
||||
IF @结束日期 IS NOT NULL
|
||||
SET @SapSql += N' AND 实际结算日期 < ''' + CONVERT(nvarchar(10), DATEADD(day, 1, @结束日期), 120) + N'''';
|
||||
|
||||
DECLARE @OpenQuerySql nvarchar(max) =
|
||||
N'INSERT INTO #已关闭订单
|
||||
([生产订单号], [关闭日期], [物料名称], [物料编码], [计划数量])
|
||||
SELECT CONVERT(nvarchar(100), [生产订单号]) AS [生产订单号],
|
||||
[实际结算日期] AS [关闭日期],
|
||||
[产品名称] AS [物料名称],
|
||||
[产品编码] AS [物料编码],
|
||||
CAST(ISNULL([产品计划数量], 0) AS decimal(18, 4)) AS [计划数量]
|
||||
FROM OPENQUERY([SAP], ''' + REPLACE(@SapSql, N'''', N'''''') + N''')
|
||||
WHERE (@物料编码 = N'''' OR [产品编码] LIKE N''%'' + @物料编码 + N''%'')
|
||||
AND (@物料名称 = N'''' OR [产品名称] LIKE N''%'' + @物料名称 + N''%'')';
|
||||
|
||||
EXEC sp_executesql
|
||||
@OpenQuerySql,
|
||||
N'@物料编码 nvarchar(200), @物料名称 nvarchar(200)',
|
||||
@物料编码 = @物料编码,
|
||||
@物料名称 = @物料名称;
|
||||
|
||||
CREATE TABLE #明细汇总
|
||||
(
|
||||
[生产订单号] nvarchar(100) NOT NULL,
|
||||
[工序号] int NULL,
|
||||
[工序] nvarchar(200) NOT NULL,
|
||||
[工位] nvarchar(200) NOT NULL,
|
||||
[完成数量] decimal(18, 4) NOT NULL,
|
||||
[不良数量] decimal(18, 4) NOT NULL,
|
||||
[合格率] decimal(18, 2) NULL,
|
||||
[检测说明] nvarchar(max) NULL
|
||||
);
|
||||
|
||||
;WITH 明细基础 AS
|
||||
(
|
||||
SELECT
|
||||
o.[生产订单号],
|
||||
COALESCE(t.[订单行号], q.[行号]) AS [工序号],
|
||||
COALESCE(NULLIF(q.[工序名称], N''), NULLIF(t.[工序名称], N''), N'') AS [工序],
|
||||
COALESCE(NULLIF(q.[工位名称], N''), NULLIF(t.[指派对象], N''), N'空白') AS [工位],
|
||||
CAST(ISNULL(q.[检验数量], ISNULL(q.[合格数], 0) + ISNULL(q.[不合格数], 0)) AS decimal(18, 4)) AS [完成数量],
|
||||
CAST(ISNULL(q.[不合格数], 0) AS decimal(18, 4)) AS [不良数量],
|
||||
NULLIF(LTRIM(RTRIM(CONVERT(nvarchar(max), q.[检测说明]))), N'') AS [检测说明]
|
||||
FROM #已关闭订单 AS o
|
||||
INNER JOIN [dbo].[YL_质量检验_质检记录] AS q
|
||||
ON CONVERT(nvarchar(100), q.[计划号]) = o.[生产订单号]
|
||||
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] AS t
|
||||
ON q.[TaskAID] = t.[AID]
|
||||
WHERE q.[质检类型] = N'收检'
|
||||
AND (@工序 = N'' OR COALESCE(NULLIF(q.[工序名称], N''), NULLIF(t.[工序名称], N''), N'') LIKE N'%' + @工序 + N'%')
|
||||
AND (@工位 = N'' OR COALESCE(NULLIF(q.[工位名称], N''), NULLIF(t.[指派对象], N''), N'空白') LIKE N'%' + @工位 + N'%')
|
||||
)
|
||||
INSERT INTO #明细汇总
|
||||
([生产订单号], [工序号], [工序], [工位], [完成数量], [不良数量], [合格率], [检测说明])
|
||||
SELECT
|
||||
[生产订单号],
|
||||
[工序号],
|
||||
[工序],
|
||||
[工位],
|
||||
SUM([完成数量]) AS [完成数量],
|
||||
SUM([不良数量]) AS [不良数量],
|
||||
CAST(
|
||||
CASE
|
||||
WHEN SUM([完成数量]) = 0 THEN NULL
|
||||
ELSE (SUM([完成数量]) - SUM([不良数量])) * 100.0 / SUM([完成数量])
|
||||
END AS decimal(18, 2)
|
||||
) AS [合格率],
|
||||
STRING_AGG(CONVERT(nvarchar(max), [检测说明]), N';') AS [检测说明]
|
||||
FROM 明细基础
|
||||
GROUP BY [生产订单号], [工序号], [工序], [工位];
|
||||
|
||||
;WITH 一级汇总 AS
|
||||
(
|
||||
SELECT
|
||||
[生产订单号],
|
||||
SUM([完成数量]) AS [完成数量],
|
||||
SUM([不良数量]) AS [不良数量],
|
||||
CAST(
|
||||
CASE
|
||||
WHEN SUM([完成数量]) = 0 THEN NULL
|
||||
ELSE (SUM([完成数量]) - SUM([不良数量])) * 100.0 / SUM([完成数量])
|
||||
END AS decimal(18, 2)
|
||||
) AS [合格率]
|
||||
FROM #明细汇总
|
||||
GROUP BY [生产订单号]
|
||||
)
|
||||
SELECT
|
||||
o.[关闭日期],
|
||||
o.[生产订单号],
|
||||
o.[物料名称],
|
||||
o.[物料编码],
|
||||
o.[计划数量],
|
||||
a.[完成数量],
|
||||
a.[不良数量],
|
||||
a.[合格率],
|
||||
(
|
||||
SELECT
|
||||
d.[工序],
|
||||
d.[工序号],
|
||||
d.[工位],
|
||||
d.[完成数量],
|
||||
d.[不良数量],
|
||||
d.[合格率],
|
||||
ISNULL(d.[检测说明], N'') AS [检测说明]
|
||||
FROM #明细汇总 AS d
|
||||
WHERE d.[生产订单号] = o.[生产订单号]
|
||||
ORDER BY d.[工序号], d.[工序], d.[工位]
|
||||
FOR JSON PATH
|
||||
) AS [明细JSON]
|
||||
FROM #已关闭订单 AS o
|
||||
INNER JOIN 一级汇总 AS a
|
||||
ON o.[生产订单号] = a.[生产订单号]
|
||||
WHERE (@合格状态 = N'' OR @合格状态 = N'全部'
|
||||
OR (@合格状态 = N'合格' AND ISNULL(a.[合格率], 0) >= 100)
|
||||
OR (@合格状态 = N'不合格' AND ISNULL(a.[合格率], 0) < 100))
|
||||
ORDER BY o.[关闭日期] DESC, TRY_CONVERT(int, o.[生产订单号]) DESC, o.[生产订单号] DESC;
|
||||
END
|
||||
GO
|
||||
188
db_backups/update_plan_order_close_no_work_hours_20260630.sql
Normal file
188
db_backups/update_plan_order_close_no_work_hours_20260630.sql
Normal file
@@ -0,0 +1,188 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
/*
|
||||
2026-06-30
|
||||
生产订单关闭查询:可关闭订单补充“无工时但满足其他可关闭条件”的特殊情况。
|
||||
|
||||
规则:
|
||||
1. 有工时订单:继续要求 View_生产工时视图 中所有工时记录已校验。
|
||||
2. 无工时订单:必须在 MES_接口_生产计划 中存在,且 View_生产工时视图 中没有任何工时记录。
|
||||
3. 无工时订单不做工时全部校验,但仍必须满足原有可关闭条件:
|
||||
- 单据状态为空;
|
||||
- 终检/收检/计划数量/入库数量满足原过程 HAVING 条件;
|
||||
- 入库数量等于终检合格数。
|
||||
*/
|
||||
ALTER PROCEDURE [dbo].[计划排产_生产订单关闭_查询全部订单]
|
||||
@订单号 nvarchar(100) = N'',
|
||||
@单据状态 nvarchar(100) = N'', -- 可选值:'已关闭'、'未关闭'、'可关闭'
|
||||
@属性 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF (@单据状态 = N'可关闭')
|
||||
BEGIN
|
||||
CREATE TABLE #工时订单
|
||||
(
|
||||
订单号 nvarchar(100) NOT NULL PRIMARY KEY
|
||||
);
|
||||
|
||||
INSERT INTO #工时订单 (订单号)
|
||||
SELECT DISTINCT CONVERT(nvarchar(100), 订单号)
|
||||
FROM dbo.View_生产工时视图
|
||||
WHERE 订单号 IS NOT NULL;
|
||||
|
||||
;WITH 收检数量 AS
|
||||
(
|
||||
SELECT
|
||||
计划号,
|
||||
SUM(ISNULL(合格数, 0)) AS 合格数合计,
|
||||
SUM(ISNULL(不合格数, 0)) AS 不合格数合计
|
||||
FROM dbo.YL_质量检验_质检记录
|
||||
WHERE 质检类型 = N'收检'
|
||||
GROUP BY 计划号
|
||||
),
|
||||
终检数量 AS
|
||||
(
|
||||
SELECT
|
||||
计划号,
|
||||
SUM(ISNULL(合格数, 0)) AS 终检合格数合计,
|
||||
SUM(ISNULL(不合格数, 0)) AS 终检不合格数合计
|
||||
FROM dbo.YL_质量检验_质检记录
|
||||
WHERE 质检类型 = N'终检'
|
||||
GROUP BY 计划号
|
||||
),
|
||||
可关闭订单 AS
|
||||
(
|
||||
SELECT
|
||||
v.订单号 AS 订单编号,
|
||||
MAX(v.产品名称) AS 产品名称,
|
||||
MAX(v.产品编码) AS 产品编码,
|
||||
MAX(v.入库数量) AS 入库数量,
|
||||
MAX(v.订单合同号) AS 合同号,
|
||||
MAX(终检数量.终检不合格数合计) AS 终检不合格数合计,
|
||||
MAX(终检数量.终检合格数合计) AS 终检合格数合计,
|
||||
MAX(v.计划数量) AS 计划数量,
|
||||
MAX(v.确认状态) AS 确认状态,
|
||||
MAX(v.单据状态) AS 单据状态,
|
||||
MAX(收检数量.不合格数合计) AS 不合格数合计,
|
||||
MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) AS 是否全部校验
|
||||
FROM dbo.View_生产工时视图 AS v
|
||||
LEFT JOIN 收检数量 ON v.订单号 = 收检数量.计划号
|
||||
LEFT JOIN 终检数量 ON v.订单号 = 终检数量.计划号
|
||||
WHERE v.单据状态 IS NULL
|
||||
AND (@订单号 = N'' OR v.订单号 = @订单号)
|
||||
AND (
|
||||
@属性 NOT IN (N'机加', N'装配')
|
||||
OR (@属性 = N'机加' AND v.自制件属性 = N'机加件')
|
||||
OR (@属性 = N'装配' AND v.自制件属性 LIKE N'%装配%')
|
||||
)
|
||||
GROUP BY v.订单号
|
||||
HAVING
|
||||
MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) = 1
|
||||
AND (
|
||||
MAX(终检数量.终检合格数合计) + MAX(收检数量.不合格数合计) = MAX(v.计划数量)
|
||||
OR MAX(v.计划数量) = MAX(v.入库数量)
|
||||
OR MAX(收检数量.不合格数合计) = MAX(v.计划数量)
|
||||
)
|
||||
AND MAX(ISNULL(v.入库数量, 0)) = MAX(ISNULL(终检数量.终检合格数合计, 0))
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
CONVERT(nvarchar(100), p.订单编号) AS 订单编号,
|
||||
MAX(p.物料描述) AS 产品名称,
|
||||
MAX(p.物料编号) AS 产品编码,
|
||||
MAX(p.入库数量) AS 入库数量,
|
||||
MAX(p.合同号) AS 合同号,
|
||||
MAX(终检数量.终检不合格数合计) AS 终检不合格数合计,
|
||||
MAX(终检数量.终检合格数合计) AS 终检合格数合计,
|
||||
MAX(p.计划数量) AS 计划数量,
|
||||
MAX(p.确认状态) AS 确认状态,
|
||||
MAX(p.单据状态) AS 单据状态,
|
||||
MAX(收检数量.不合格数合计) AS 不合格数合计,
|
||||
1 AS 是否全部校验
|
||||
FROM dbo.MES_接口_生产计划 AS p
|
||||
LEFT JOIN 收检数量 ON CONVERT(nvarchar(100), p.订单编号) = CONVERT(nvarchar(100), 收检数量.计划号)
|
||||
LEFT JOIN 终检数量 ON CONVERT(nvarchar(100), p.订单编号) = CONVERT(nvarchar(100), 终检数量.计划号)
|
||||
LEFT JOIN #工时订单 AS wh ON wh.订单号 = CONVERT(nvarchar(100), p.订单编号)
|
||||
WHERE p.单据状态 IS NULL
|
||||
AND wh.订单号 IS NULL
|
||||
AND (@订单号 = N'' OR CONVERT(nvarchar(100), p.订单编号) = @订单号)
|
||||
AND (
|
||||
@属性 NOT IN (N'机加', N'装配')
|
||||
OR (@属性 = N'机加' AND p.自制件属性 = N'机加件')
|
||||
OR (@属性 = N'装配' AND p.自制件属性 LIKE N'%装配%')
|
||||
)
|
||||
GROUP BY p.订单编号
|
||||
HAVING
|
||||
(
|
||||
MAX(终检数量.终检合格数合计) + MAX(收检数量.不合格数合计) = MAX(p.计划数量)
|
||||
OR MAX(p.计划数量) = MAX(p.入库数量)
|
||||
OR MAX(收检数量.不合格数合计) = MAX(p.计划数量)
|
||||
)
|
||||
AND MAX(ISNULL(p.入库数量, 0)) = MAX(ISNULL(终检数量.终检合格数合计, 0))
|
||||
)
|
||||
SELECT
|
||||
订单编号,
|
||||
产品名称,
|
||||
产品编码,
|
||||
入库数量,
|
||||
合同号,
|
||||
终检不合格数合计,
|
||||
终检合格数合计,
|
||||
计划数量,
|
||||
确认状态,
|
||||
单据状态,
|
||||
不合格数合计,
|
||||
是否全部校验
|
||||
FROM 可关闭订单
|
||||
ORDER BY 订单编号;
|
||||
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SELECT TOP 100
|
||||
v.订单编号,
|
||||
MAX(v.物料描述) AS 产品名称,
|
||||
MAX(v.物料编号) AS 产品编码,
|
||||
MAX(v.入库数量) AS 入库数量,
|
||||
MAX(v.合同号) AS 合同号,
|
||||
MAX(zj_终检数量.终检不合格数合计) AS 终检不合格数合计,
|
||||
MAX(zj_终检数量.终检合格数合计) AS 终检合格数合计,
|
||||
MAX(v.计划数量) AS 计划数量,
|
||||
MAX(v.确认状态) AS 确认状态,
|
||||
MAX(v.单据状态) AS 单据状态
|
||||
FROM dbo.MES_接口_生产计划 AS v
|
||||
LEFT JOIN
|
||||
(
|
||||
SELECT
|
||||
计划号,
|
||||
SUM(ISNULL(合格数, 0)) AS 终检合格数合计,
|
||||
SUM(ISNULL(不合格数, 0)) AS 终检不合格数合计
|
||||
FROM dbo.YL_质量检验_质检记录
|
||||
WHERE 质检类型 = N'终检'
|
||||
GROUP BY 计划号
|
||||
) AS zj_终检数量 ON v.订单编号 = zj_终检数量.计划号
|
||||
WHERE 1 = 1
|
||||
AND (@订单号 = N'' OR CONVERT(nvarchar(100), v.订单编号) = @订单号)
|
||||
AND (
|
||||
@单据状态 NOT IN (N'SAP未关闭', N'已关闭', N'未关闭')
|
||||
OR (@单据状态 = N'SAP未关闭' AND v.单据状态 = N'已关闭')
|
||||
OR (@单据状态 = N'已关闭' AND (v.单据状态 = N'已关闭' OR v.单据状态 = N'已取消'))
|
||||
OR (@单据状态 = N'未关闭' AND v.单据状态 IS NULL)
|
||||
)
|
||||
AND (
|
||||
@属性 NOT IN (N'机加', N'装配')
|
||||
OR (@属性 = N'机加' AND v.自制件属性 = N'机加件')
|
||||
OR (@属性 = N'装配' AND v.自制件属性 LIKE N'%装配%')
|
||||
)
|
||||
GROUP BY v.订单编号;
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,409 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
|
||||
BEGIN
|
||||
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
|
||||
END
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询]
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@计划号 nvarchar(50) = N'',
|
||||
@发货状态 nvarchar(50) = N'全部',
|
||||
@齐套 nvarchar(50) = N'全部',
|
||||
@检验状态 nvarchar(50) = N'',
|
||||
@发料状态 nvarchar(50) = N'全部',
|
||||
@自制件属性 nvarchar(50) = N'全部'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH SAP缺件源 AS (
|
||||
SELECT
|
||||
s.DocEntry,
|
||||
s.Project COLLATE DATABASE_DEFAULT AS Project,
|
||||
s.[行号],
|
||||
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
|
||||
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
|
||||
ISNULL(s.[属性] COLLATE DATABASE_DEFAULT, N'') AS 属性,
|
||||
ISNULL(s.[未发货数量], 0) AS 未发货数量,
|
||||
ISNULL(s.[库存量], 0) AS 库存数量,
|
||||
ISNULL(s.[在制采购], 0) AS 在制采购,
|
||||
s.[采购预计交货日期],
|
||||
ISNULL(s.[采购未清数量], 0) AS 采购未清数量,
|
||||
ISNULL(s.[到货草稿], 0) AS 到货草稿
|
||||
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
|
||||
WHERE ISNULL(s.[未发货数量], 0) > 0
|
||||
),
|
||||
SAP缺件 AS (
|
||||
SELECT TOP (2000)
|
||||
src.*
|
||||
FROM (
|
||||
SELECT
|
||||
SAP缺件源.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
SAP缺件源.DocEntry,
|
||||
SAP缺件源.Project,
|
||||
SAP缺件源.ItemCode,
|
||||
SAP缺件源.属性
|
||||
ORDER BY
|
||||
SAP缺件源.[未发货数量] DESC,
|
||||
SAP缺件源.[行号]
|
||||
) AS rn
|
||||
FROM SAP缺件源
|
||||
) AS src
|
||||
WHERE src.rn = 1
|
||||
),
|
||||
查询结果 AS (
|
||||
SELECT
|
||||
ISNULL(v.[计划号], N'') AS [计划号],
|
||||
ISNULL(v.[合同号], N'') AS [合同号],
|
||||
v.[订单编号] AS [订单号],
|
||||
v.[物料编号] AS [产品编码],
|
||||
v.[物料描述] AS [产品名称],
|
||||
v.[计划数量订单],
|
||||
v.[入库数量],
|
||||
v.[计划完成] AS [要求完工日期],
|
||||
v.[要求发货日期],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发货状态], 0) = 1 THEN N'已发货'
|
||||
ELSE N'未发货'
|
||||
END AS [发货状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[齐套], 0) = 1 THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [齐套],
|
||||
CASE
|
||||
WHEN ISNULL(v.[拣配状态], 0) = 1 THEN N'已拣配'
|
||||
ELSE N'未拣配'
|
||||
END AS [拣配状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'1' THEN N'发料齐套'
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'2' THEN N'发料缺件'
|
||||
ELSE N'未发料'
|
||||
END AS [发料状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[任务状态], 0) IN (2, 4) OR v.[开工时间] > '1900-01-01' THEN N'已开工'
|
||||
ELSE N'待执行'
|
||||
END AS [装配开工],
|
||||
v.[完成数量],
|
||||
CASE
|
||||
WHEN final_check.[计划号] IS NOT NULL THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [终检],
|
||||
CASE WHEN ISNULL(v.[生产工艺], 0) = 1 THEN N'是' ELSE N'否' END AS [生产工艺],
|
||||
CASE WHEN ISNULL(v.[排产状态], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [排产状态],
|
||||
ISNULL(v.[自制件属性], N'') AS [自制件属性],
|
||||
v.[计划开始时间] AS [预计齐套时间],
|
||||
sap.ItemCode AS [缺件物料编码],
|
||||
sap.U_Name AS [缺件物料名称],
|
||||
sap.[未发货数量] AS [缺件数量],
|
||||
sap.[库存数量] AS [库存数量],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'外购' ELSE sap.[属性] END AS [缺件属性],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[到货草稿], 0)), N'')
|
||||
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[订单编号]), N'')
|
||||
END AS [缺件生产订单号],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(current_step.[当前序], N'') END AS [进度],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN
|
||||
N'未清数量:' + CONVERT(nvarchar(30), sap.[采购未清数量]) +
|
||||
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[到货草稿]) +
|
||||
N' / 质检状态:' + ISNULL(purchase_check.[质检状态], N'未完成')
|
||||
ELSE ISNULL(route.[工艺路线], N'')
|
||||
END AS [工艺路线],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN sap.[采购预计交货日期]
|
||||
ELSE route.[预计完成时间]
|
||||
END AS [预计完成时间],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(route.[工艺路线明细], N'[]') END AS [工艺路线明细],
|
||||
sap.[采购未清数量],
|
||||
sap.[到货草稿],
|
||||
ISNULL(purchase_check.[质检状态], CASE WHEN sap.[属性] = N'' THEN N'未完成' ELSE N'' END) AS [质检状态],
|
||||
sap.DocEntry AS [SAP单据],
|
||||
sap.[行号] AS [SAP行号]
|
||||
FROM SAP缺件 AS sap
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) m.*
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] = sap.DocEntry
|
||||
ORDER BY m.[订单行号]
|
||||
) AS v
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) m.*
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] <> v.[订单编号]
|
||||
AND (
|
||||
(sap.[属性] = N'机加件' AND m.[物料编号] = sap.ItemCode)
|
||||
OR (sap.[属性] LIKE N'%装配%' AND m.[物料编号] = sap.ItemCode AND ISNULL(m.[合同号], N'') = ISNULL(sap.Project, N''))
|
||||
)
|
||||
ORDER BY m.[订单编号] DESC, m.[订单行号]
|
||||
) AS detail_order
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) q.[计划号]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[质检类型] = N'终检'
|
||||
AND q.[计划号] = v.[订单编号]
|
||||
) AS final_check
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
MAX(p.[计划完成时间]) AS [预计完成时间],
|
||||
STUFF((
|
||||
SELECT N'、' + p2.[工序名称] +
|
||||
CASE WHEN ISNULL(p2.[指派对象], N'') = N'' THEN N'' ELSE N'(' + p2.[指派对象] + N')' END
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR XML PATH(N''), TYPE
|
||||
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [工艺路线],
|
||||
(
|
||||
SELECT
|
||||
p2.[订单行号],
|
||||
p2.[工序名称],
|
||||
p2.[指派对象],
|
||||
p2.[计划开始时间],
|
||||
p2.[计划完成时间],
|
||||
ISNULL(p2.[进度], 0) AS [进度],
|
||||
ISNULL(p2.[完成数量], 0) AS [完成数量],
|
||||
ISNULL(p2.[收料数量], 0) AS [收料数量],
|
||||
ISNULL(p2.[加工状态], 0) AS [加工状态],
|
||||
p2.[开工时间],
|
||||
ISNULL(check_qty.[收检合格数], 0) AS [收检合格数],
|
||||
ISNULL(check_qty.[收检不合格数], 0) AS [收检不合格数]
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
SUM(ISNULL(q.[合格数], 0)) AS [收检合格数],
|
||||
SUM(ISNULL(q.[不合格数], 0)) AS [收检不合格数]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[TaskAID] = p2.[TaskAID]
|
||||
AND q.[质检类型] = N'收检'
|
||||
) AS check_qty
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR JSON PATH
|
||||
) AS [工艺路线明细]
|
||||
FROM [dbo].[View_生产订单_MES] AS p
|
||||
WHERE p.[订单编号] = detail_order.[订单编号]
|
||||
AND p.[物料类型] = N'pit_Resource'
|
||||
) AS route
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1)
|
||||
pending.[订单行号],
|
||||
pending.[工序名称],
|
||||
pending.[加工状态],
|
||||
pending.[进度],
|
||||
pending.[完成数量],
|
||||
pending.[计划数量],
|
||||
pending.[开工时间]
|
||||
FROM [dbo].[View_生产订单_MES] AS pending
|
||||
WHERE pending.[订单编号] = detail_order.[订单编号]
|
||||
AND pending.[物料类型] = N'pit_Resource'
|
||||
AND NOT (
|
||||
ISNULL(pending.[进度], 0) >= 100
|
||||
OR (ISNULL(pending.[计划数量], 0) > 0 AND ISNULL(pending.[完成数量], 0) >= ISNULL(pending.[计划数量], 0))
|
||||
)
|
||||
ORDER BY pending.[订单行号]
|
||||
) AS pending
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) prev.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS prev
|
||||
WHERE prev.[订单编号] = detail_order.[订单编号]
|
||||
AND prev.[物料类型] = N'pit_Resource'
|
||||
AND prev.[订单行号] < pending.[订单行号]
|
||||
ORDER BY prev.[订单行号] DESC
|
||||
) AS prev_step
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) last_step.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS last_step
|
||||
WHERE last_step.[订单编号] = detail_order.[订单编号]
|
||||
AND last_step.[物料类型] = N'pit_Resource'
|
||||
ORDER BY last_step.[订单行号] DESC
|
||||
) AS last_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN detail_order.[订单编号] IS NULL THEN N''
|
||||
WHEN pending.[订单行号] IS NULL THEN ISNULL(last_step.[工序名称], N'') + N'毕'
|
||||
WHEN ISNULL(pending.[进度], 0) > 0
|
||||
OR ISNULL(pending.[完成数量], 0) > 0
|
||||
OR ISNULL(pending.[加工状态], 0) IN (2, 3, 4, 5, 6)
|
||||
OR pending.[开工时间] > '1900-01-01'
|
||||
THEN ISNULL(pending.[工序名称], N'') + N'中'
|
||||
WHEN prev_step.[工序名称] IS NULL THEN N''
|
||||
ELSE prev_step.[工序名称] + N'毕待' + ISNULL(pending.[工序名称], N'')
|
||||
END AS [当前序]
|
||||
) AS current_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN sap.[属性] <> N'' THEN N''
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND ISNULL(task.[入库数量], 0) > 0
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND (
|
||||
ISNULL(task.[入库数量], 0) <= 0
|
||||
OR ISNULL(checked_qty.[已检验数量], 0) < ISNULL(task.[入库数量], 0)
|
||||
)
|
||||
) THEN N'已完成'
|
||||
ELSE N'未完成'
|
||||
END AS [质检状态]
|
||||
) AS purchase_check
|
||||
WHERE
|
||||
v.[订单编号] IS NOT NULL
|
||||
AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
|
||||
AND (@计划号 = N'' OR ISNULL(v.[计划号], N'') = @计划号)
|
||||
AND (@合同号 = N'' OR ISNULL(v.[合同号], N'') LIKE N'%' + @合同号 + N'%')
|
||||
AND (@产品编码 = N'' OR ISNULL(v.[物料编号], N'') LIKE N'%' + @产品编码 + N'%')
|
||||
AND (@产品名称 = N'' OR ISNULL(v.[物料描述], N'') LIKE N'%' + @产品名称 + N'%')
|
||||
AND (@工序名称 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS fp
|
||||
WHERE fp.[订单编号] = v.[订单编号]
|
||||
AND fp.[工序名称] = @工序名称
|
||||
))
|
||||
AND (@计划开始 = N'' OR v.[计划开始时间] >= TRY_CONVERT(datetime, @计划开始))
|
||||
AND (@计划完成 = N'' OR v.[计划开始时间] <= TRY_CONVERT(datetime, @计划完成))
|
||||
AND (@排产状态 = N'全部' OR @排产状态 = N'' OR
|
||||
(@排产状态 = N'已完成' AND ISNULL(v.[排产状态], 0) = 1) OR
|
||||
(@排产状态 = N'未完成' AND ISNULL(v.[排产状态], 0) = 0)
|
||||
)
|
||||
AND (@指派对象 = N'全部' OR @指派对象 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS ap
|
||||
WHERE ap.[订单编号] = v.[订单编号]
|
||||
AND ap.[指派对象] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@指派对象, N','))
|
||||
))
|
||||
AND (@发货状态 = N'全部' OR @发货状态 = N'' OR
|
||||
(@发货状态 = N'已发货' AND ISNULL(v.[发货状态], N'0') = N'1') OR
|
||||
(@发货状态 = N'未发货' AND ISNULL(v.[发货状态], N'0') <> N'1')
|
||||
)
|
||||
AND (@齐套 = N'全部' OR @齐套 = N'' OR
|
||||
(@齐套 = N'是' AND ISNULL(v.[齐套], 0) = 1) OR
|
||||
(@齐套 = N'否' AND ISNULL(v.[齐套], 0) <> 1)
|
||||
)
|
||||
AND (@发料状态 = N'全部' OR @发料状态 = N'' OR
|
||||
(@发料状态 = N'发料齐套' AND ISNULL(v.[发料状态], N'0') = N'1') OR
|
||||
(@发料状态 = N'发料缺件' AND ISNULL(v.[发料状态], N'0') = N'2') OR
|
||||
(@发料状态 = N'未发料' AND ISNULL(v.[发料状态], N'0') NOT IN (N'1', N'2'))
|
||||
)
|
||||
AND (@自制件属性 = N'全部' OR @自制件属性 = N'' OR
|
||||
(@自制件属性 = N'机加' AND (sap.[属性] = N'机加件' OR v.[自制件属性] = N'机加件')) OR
|
||||
(@自制件属性 = N'装配' AND (sap.[属性] LIKE N'%装配%' OR v.[自制件属性] LIKE N'%装配%'))
|
||||
)
|
||||
AND (@检验状态 = N'' OR (sap.[属性] = N'' AND ISNULL(purchase_check.[质检状态], N'') = @检验状态))
|
||||
)
|
||||
SELECT TOP (1000)
|
||||
[计划号],
|
||||
[合同号],
|
||||
[订单号],
|
||||
[产品编码],
|
||||
[产品名称],
|
||||
[计划数量订单],
|
||||
[入库数量],
|
||||
[要求完工日期],
|
||||
[要求发货日期],
|
||||
[发货状态],
|
||||
[齐套],
|
||||
[拣配状态],
|
||||
[发料状态],
|
||||
[装配开工],
|
||||
[完成数量],
|
||||
[终检],
|
||||
[生产工艺],
|
||||
[排产状态],
|
||||
[自制件属性],
|
||||
[预计齐套时间],
|
||||
[缺件物料编码],
|
||||
[缺件物料名称],
|
||||
[缺件数量],
|
||||
[库存数量],
|
||||
[缺件属性],
|
||||
[缺件生产订单号],
|
||||
[进度],
|
||||
[工艺路线],
|
||||
[预计完成时间],
|
||||
[工艺路线明细],
|
||||
[采购未清数量],
|
||||
[到货草稿],
|
||||
[质检状态],
|
||||
[SAP单据],
|
||||
[SAP行号]
|
||||
FROM (
|
||||
SELECT
|
||||
查询结果.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
[订单号],
|
||||
CASE
|
||||
WHEN ISNULL([缺件生产订单号], N'') <> N'' THEN [缺件生产订单号]
|
||||
ELSE [缺件物料编码] + N':' + CONVERT(nvarchar(30), [SAP行号])
|
||||
END
|
||||
ORDER BY [缺件数量] DESC, [SAP单据], [SAP行号]
|
||||
) AS rn
|
||||
FROM 查询结果
|
||||
) AS dedup
|
||||
WHERE rn = 1
|
||||
ORDER BY
|
||||
[预计齐套时间],
|
||||
[订单号],
|
||||
[缺件生产订单号],
|
||||
[缺件物料编码];
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,423 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
|
||||
BEGIN
|
||||
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
|
||||
END
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询]
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@计划号 nvarchar(50) = N'',
|
||||
@发货状态 nvarchar(50) = N'全部',
|
||||
@齐套 nvarchar(50) = N'全部',
|
||||
@检验状态 nvarchar(50) = N'',
|
||||
@发料状态 nvarchar(50) = N'全部',
|
||||
@自制件属性 nvarchar(50) = N'全部'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH SAP缺件源 AS (
|
||||
SELECT
|
||||
s.DocEntry,
|
||||
s.Project COLLATE DATABASE_DEFAULT AS Project,
|
||||
s.[行号],
|
||||
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
|
||||
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
|
||||
ISNULL(s.[属性] COLLATE DATABASE_DEFAULT, N'') AS 属性,
|
||||
ISNULL(s.[未发货数量], 0) AS 未发货数量,
|
||||
ISNULL(s.[库存量], 0) AS 库存数量,
|
||||
ISNULL(s.[在制采购], 0) AS 在制采购,
|
||||
ISNULL(s.DocNum, 0) AS DocNum,
|
||||
s.[采购员] COLLATE DATABASE_DEFAULT AS 采购员,
|
||||
s.[采购预计交货日期],
|
||||
ISNULL(s.[采购未清数量], 0) AS 采购未清数量,
|
||||
ISNULL(s.[到货草稿], 0) AS 到货草稿
|
||||
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
|
||||
WHERE ISNULL(s.[未发货数量], 0) > 0
|
||||
),
|
||||
SAP缺件 AS (
|
||||
SELECT TOP (2000)
|
||||
src.*
|
||||
FROM (
|
||||
SELECT
|
||||
SAP缺件源.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
SAP缺件源.DocEntry,
|
||||
SAP缺件源.Project,
|
||||
SAP缺件源.ItemCode,
|
||||
SAP缺件源.属性
|
||||
ORDER BY
|
||||
SAP缺件源.[未发货数量] DESC,
|
||||
SAP缺件源.[行号]
|
||||
) AS rn
|
||||
FROM SAP缺件源
|
||||
) AS src
|
||||
WHERE src.rn = 1
|
||||
),
|
||||
查询结果 AS (
|
||||
SELECT
|
||||
ISNULL(v.[计划号], N'') AS [计划号],
|
||||
ISNULL(v.[合同号], N'') AS [合同号],
|
||||
v.[订单编号] AS [订单号],
|
||||
v.[物料编号] AS [产品编码],
|
||||
v.[物料描述] AS [产品名称],
|
||||
v.[计划数量订单],
|
||||
v.[入库数量],
|
||||
v.[计划完成] AS [要求完工日期],
|
||||
v.[要求发货日期],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发货状态], 0) = 1 THEN N'已发货'
|
||||
ELSE N'未发货'
|
||||
END AS [发货状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[齐套], 0) = 1 THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [齐套],
|
||||
CASE
|
||||
WHEN ISNULL(v.[拣配状态], 0) = 1 THEN N'已拣配'
|
||||
ELSE N'未拣配'
|
||||
END AS [拣配状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'1' THEN N'发料齐套'
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'2' THEN N'发料缺件'
|
||||
ELSE N'未发料'
|
||||
END AS [发料状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[任务状态], 0) IN (2, 4) OR v.[开工时间] > '1900-01-01' THEN N'已开工'
|
||||
ELSE N'待执行'
|
||||
END AS [装配开工],
|
||||
v.[完成数量],
|
||||
CASE
|
||||
WHEN final_check.[计划号] IS NOT NULL THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [终检],
|
||||
CASE WHEN ISNULL(v.[生产工艺], 0) = 1 THEN N'是' ELSE N'否' END AS [生产工艺],
|
||||
CASE WHEN ISNULL(v.[排产状态], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [排产状态],
|
||||
ISNULL(v.[自制件属性], N'') AS [自制件属性],
|
||||
v.[计划开始时间] AS [预计齐套时间],
|
||||
sap.ItemCode AS [缺件物料编码],
|
||||
sap.U_Name AS [缺件物料名称],
|
||||
sap.[未发货数量] AS [缺件数量],
|
||||
sap.[库存数量] AS [库存数量],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'外购' ELSE sap.[属性] END AS [缺件属性],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[在制采购], 0)), N'')
|
||||
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[订单编号]), N'')
|
||||
END AS [缺件生产订单号],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(current_step.[当前序], N'') END AS [进度],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN
|
||||
N'采购员:' + ISNULL(NULLIF(sap.[采购员], N''), N'-') +
|
||||
N' / 未清数量:' + CONVERT(nvarchar(30), sap.[采购未清数量]) +
|
||||
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[到货草稿]) +
|
||||
N' / 质检状态:' + ISNULL(purchase_check.[质检状态], N'未完成')
|
||||
ELSE ISNULL(route.[工艺路线], N'')
|
||||
END AS [工艺路线],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN sap.[采购预计交货日期]
|
||||
ELSE route.[预计完成时间]
|
||||
END AS [预计完成时间],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(route.[工艺路线明细], N'[]') END AS [工艺路线明细],
|
||||
sap.[采购未清数量],
|
||||
sap.[到货草稿],
|
||||
ISNULL(purchase_check.[质检状态], CASE WHEN sap.[属性] = N'' THEN N'未完成' ELSE N'' END) AS [质检状态],
|
||||
sap.DocEntry AS [SAP单据],
|
||||
sap.[行号] AS [SAP行号]
|
||||
FROM SAP缺件 AS sap
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) m.*
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] = sap.DocEntry
|
||||
ORDER BY m.[订单行号]
|
||||
) AS v
|
||||
OUTER APPLY (
|
||||
SELECT m.*
|
||||
FROM (
|
||||
SELECT
|
||||
m.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY m.[订单编号]
|
||||
ORDER BY m.[订单行号]
|
||||
) AS rn
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] <> v.[订单编号]
|
||||
AND (
|
||||
(sap.[属性] = N'机加件' AND (
|
||||
m.[物料编号] = sap.ItemCode
|
||||
OR (sap.DocNum > 0 AND m.[订单编号] = sap.DocNum)
|
||||
))
|
||||
OR (sap.[属性] LIKE N'%装配%' AND m.[物料编号] = sap.ItemCode AND ISNULL(m.[合同号], N'') = ISNULL(sap.Project, N''))
|
||||
)
|
||||
) AS m
|
||||
WHERE m.rn = 1
|
||||
) AS detail_order
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) q.[计划号]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[质检类型] = N'终检'
|
||||
AND q.[计划号] = v.[订单编号]
|
||||
) AS final_check
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
MAX(p.[计划完成时间]) AS [预计完成时间],
|
||||
STUFF((
|
||||
SELECT N'、' + p2.[工序名称] +
|
||||
CASE WHEN ISNULL(p2.[指派对象], N'') = N'' THEN N'' ELSE N'(' + p2.[指派对象] + N')' END
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR XML PATH(N''), TYPE
|
||||
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [工艺路线],
|
||||
(
|
||||
SELECT
|
||||
p2.[订单行号],
|
||||
p2.[工序名称],
|
||||
p2.[指派对象],
|
||||
p2.[计划开始时间],
|
||||
p2.[计划完成时间],
|
||||
ISNULL(p2.[进度], 0) AS [进度],
|
||||
ISNULL(p2.[完成数量], 0) AS [完成数量],
|
||||
ISNULL(p2.[收料数量], 0) AS [收料数量],
|
||||
ISNULL(p2.[加工状态], 0) AS [加工状态],
|
||||
p2.[开工时间],
|
||||
ISNULL(check_qty.[收检合格数], 0) AS [收检合格数],
|
||||
ISNULL(check_qty.[收检不合格数], 0) AS [收检不合格数]
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
SUM(ISNULL(q.[合格数], 0)) AS [收检合格数],
|
||||
SUM(ISNULL(q.[不合格数], 0)) AS [收检不合格数]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[TaskAID] = p2.[TaskAID]
|
||||
AND q.[质检类型] = N'收检'
|
||||
) AS check_qty
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR JSON PATH
|
||||
) AS [工艺路线明细]
|
||||
FROM [dbo].[View_生产订单_MES] AS p
|
||||
WHERE p.[订单编号] = detail_order.[订单编号]
|
||||
AND p.[物料类型] = N'pit_Resource'
|
||||
) AS route
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1)
|
||||
pending.[订单行号],
|
||||
pending.[工序名称],
|
||||
pending.[加工状态],
|
||||
pending.[进度],
|
||||
pending.[完成数量],
|
||||
pending.[计划数量],
|
||||
pending.[开工时间]
|
||||
FROM [dbo].[View_生产订单_MES] AS pending
|
||||
WHERE pending.[订单编号] = detail_order.[订单编号]
|
||||
AND pending.[物料类型] = N'pit_Resource'
|
||||
AND NOT (
|
||||
ISNULL(pending.[进度], 0) >= 100
|
||||
OR (ISNULL(pending.[计划数量], 0) > 0 AND ISNULL(pending.[完成数量], 0) >= ISNULL(pending.[计划数量], 0))
|
||||
)
|
||||
ORDER BY pending.[订单行号]
|
||||
) AS pending
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) prev.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS prev
|
||||
WHERE prev.[订单编号] = detail_order.[订单编号]
|
||||
AND prev.[物料类型] = N'pit_Resource'
|
||||
AND prev.[订单行号] < pending.[订单行号]
|
||||
ORDER BY prev.[订单行号] DESC
|
||||
) AS prev_step
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) last_step.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS last_step
|
||||
WHERE last_step.[订单编号] = detail_order.[订单编号]
|
||||
AND last_step.[物料类型] = N'pit_Resource'
|
||||
ORDER BY last_step.[订单行号] DESC
|
||||
) AS last_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN detail_order.[订单编号] IS NULL THEN N''
|
||||
WHEN pending.[订单行号] IS NULL THEN ISNULL(last_step.[工序名称], N'') + N'毕'
|
||||
WHEN ISNULL(pending.[进度], 0) > 0
|
||||
OR ISNULL(pending.[完成数量], 0) > 0
|
||||
OR ISNULL(pending.[加工状态], 0) IN (2, 3, 4, 5, 6)
|
||||
OR pending.[开工时间] > '1900-01-01'
|
||||
THEN ISNULL(pending.[工序名称], N'') + N'中'
|
||||
WHEN prev_step.[工序名称] IS NULL THEN N''
|
||||
ELSE prev_step.[工序名称] + N'毕待' + ISNULL(pending.[工序名称], N'')
|
||||
END AS [当前序]
|
||||
) AS current_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN sap.[属性] <> N'' THEN N''
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND ISNULL(task.[入库数量], 0) > 0
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND (
|
||||
ISNULL(task.[入库数量], 0) <= 0
|
||||
OR ISNULL(checked_qty.[已检验数量], 0) < ISNULL(task.[入库数量], 0)
|
||||
)
|
||||
) THEN N'已完成'
|
||||
ELSE N'未完成'
|
||||
END AS [质检状态]
|
||||
) AS purchase_check
|
||||
WHERE
|
||||
v.[订单编号] IS NOT NULL
|
||||
AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
|
||||
AND (@计划号 = N'' OR ISNULL(v.[计划号], N'') = @计划号)
|
||||
AND (@合同号 = N'' OR ISNULL(v.[合同号], N'') LIKE N'%' + @合同号 + N'%')
|
||||
AND (@产品编码 = N'' OR ISNULL(v.[物料编号], N'') LIKE N'%' + @产品编码 + N'%')
|
||||
AND (@产品名称 = N'' OR ISNULL(v.[物料描述], N'') LIKE N'%' + @产品名称 + N'%')
|
||||
AND (@工序名称 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS fp
|
||||
WHERE fp.[订单编号] = v.[订单编号]
|
||||
AND fp.[工序名称] = @工序名称
|
||||
))
|
||||
AND (@计划开始 = N'' OR v.[计划开始时间] >= TRY_CONVERT(datetime, @计划开始))
|
||||
AND (@计划完成 = N'' OR v.[计划开始时间] <= TRY_CONVERT(datetime, @计划完成))
|
||||
AND (@排产状态 = N'全部' OR @排产状态 = N'' OR
|
||||
(@排产状态 = N'已完成' AND ISNULL(v.[排产状态], 0) = 1) OR
|
||||
(@排产状态 = N'未完成' AND ISNULL(v.[排产状态], 0) = 0)
|
||||
)
|
||||
AND (@指派对象 = N'全部' OR @指派对象 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS ap
|
||||
WHERE ap.[订单编号] = v.[订单编号]
|
||||
AND ap.[指派对象] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@指派对象, N','))
|
||||
))
|
||||
AND (@发货状态 = N'全部' OR @发货状态 = N'' OR
|
||||
(@发货状态 = N'已发货' AND ISNULL(v.[发货状态], N'0') = N'1') OR
|
||||
(@发货状态 = N'未发货' AND ISNULL(v.[发货状态], N'0') <> N'1')
|
||||
)
|
||||
AND (@齐套 = N'全部' OR @齐套 = N'' OR
|
||||
(@齐套 = N'是' AND ISNULL(v.[齐套], 0) = 1) OR
|
||||
(@齐套 = N'否' AND ISNULL(v.[齐套], 0) <> 1)
|
||||
)
|
||||
AND (@发料状态 = N'全部' OR @发料状态 = N'' OR
|
||||
(@发料状态 = N'发料齐套' AND ISNULL(v.[发料状态], N'0') = N'1') OR
|
||||
(@发料状态 = N'发料缺件' AND ISNULL(v.[发料状态], N'0') = N'2') OR
|
||||
(@发料状态 = N'未发料' AND ISNULL(v.[发料状态], N'0') NOT IN (N'1', N'2'))
|
||||
)
|
||||
AND (@自制件属性 = N'全部' OR @自制件属性 = N'' OR
|
||||
(@自制件属性 = N'机加' AND (sap.[属性] = N'机加件' OR v.[自制件属性] = N'机加件')) OR
|
||||
(@自制件属性 = N'装配' AND (sap.[属性] LIKE N'%装配%' OR v.[自制件属性] LIKE N'%装配%'))
|
||||
)
|
||||
AND (@检验状态 = N'' OR (sap.[属性] = N'' AND ISNULL(purchase_check.[质检状态], N'') = @检验状态))
|
||||
)
|
||||
SELECT TOP (1000)
|
||||
[计划号],
|
||||
[合同号],
|
||||
[订单号],
|
||||
[产品编码],
|
||||
[产品名称],
|
||||
[计划数量订单],
|
||||
[入库数量],
|
||||
[要求完工日期],
|
||||
[要求发货日期],
|
||||
[发货状态],
|
||||
[齐套],
|
||||
[拣配状态],
|
||||
[发料状态],
|
||||
[装配开工],
|
||||
[完成数量],
|
||||
[终检],
|
||||
[生产工艺],
|
||||
[排产状态],
|
||||
[自制件属性],
|
||||
[预计齐套时间],
|
||||
[缺件物料编码],
|
||||
[缺件物料名称],
|
||||
[缺件数量],
|
||||
[库存数量],
|
||||
[缺件属性],
|
||||
[缺件生产订单号],
|
||||
[进度],
|
||||
[工艺路线],
|
||||
[预计完成时间],
|
||||
[工艺路线明细],
|
||||
[采购未清数量],
|
||||
[到货草稿],
|
||||
[质检状态],
|
||||
[SAP单据],
|
||||
[SAP行号]
|
||||
FROM (
|
||||
SELECT
|
||||
查询结果.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
[订单号],
|
||||
CASE
|
||||
WHEN ISNULL([缺件生产订单号], N'') <> N'' THEN [缺件生产订单号]
|
||||
ELSE [缺件物料编码] + N':' + CONVERT(nvarchar(30), [SAP行号])
|
||||
END
|
||||
ORDER BY [缺件数量] DESC, [SAP单据], [SAP行号]
|
||||
) AS rn
|
||||
FROM 查询结果
|
||||
) AS dedup
|
||||
WHERE rn = 1
|
||||
ORDER BY
|
||||
[预计齐套时间],
|
||||
[订单号],
|
||||
[缺件生产订单号],
|
||||
[缺件物料编码];
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,418 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
|
||||
BEGIN
|
||||
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
|
||||
END
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询]
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@计划号 nvarchar(50) = N'',
|
||||
@发货状态 nvarchar(50) = N'全部',
|
||||
@齐套 nvarchar(50) = N'全部',
|
||||
@检验状态 nvarchar(50) = N'',
|
||||
@发料状态 nvarchar(50) = N'全部',
|
||||
@自制件属性 nvarchar(50) = N'全部'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
;WITH SAP缺件源 AS (
|
||||
SELECT
|
||||
s.DocEntry,
|
||||
s.Project COLLATE DATABASE_DEFAULT AS Project,
|
||||
s.[行号],
|
||||
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
|
||||
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
|
||||
ISNULL(s.[属性] COLLATE DATABASE_DEFAULT, N'') AS 属性,
|
||||
ISNULL(s.[未发货数量], 0) AS 未发货数量,
|
||||
ISNULL(s.[库存量], 0) AS 库存数量,
|
||||
ISNULL(s.[在制采购], 0) AS 在制采购,
|
||||
ISNULL(s.DocNum, 0) AS DocNum,
|
||||
s.[采购员] COLLATE DATABASE_DEFAULT AS 采购员,
|
||||
s.[采购预计交货日期],
|
||||
ISNULL(s.[采购未清数量], 0) AS 采购未清数量,
|
||||
ISNULL(s.[到货草稿], 0) AS 到货草稿
|
||||
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
|
||||
WHERE ISNULL(s.[未发货数量], 0) > 0
|
||||
),
|
||||
SAP缺件 AS (
|
||||
SELECT TOP (2000)
|
||||
src.*
|
||||
FROM (
|
||||
SELECT
|
||||
SAP缺件源.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
SAP缺件源.DocEntry,
|
||||
SAP缺件源.Project,
|
||||
SAP缺件源.ItemCode,
|
||||
SAP缺件源.属性
|
||||
ORDER BY
|
||||
SAP缺件源.[未发货数量] DESC,
|
||||
SAP缺件源.[行号]
|
||||
) AS rn
|
||||
FROM SAP缺件源
|
||||
) AS src
|
||||
WHERE src.rn = 1
|
||||
),
|
||||
查询结果 AS (
|
||||
SELECT
|
||||
ISNULL(v.[计划号], N'') AS [计划号],
|
||||
ISNULL(v.[合同号], N'') AS [合同号],
|
||||
v.[订单编号] AS [订单号],
|
||||
v.[物料编号] AS [产品编码],
|
||||
v.[物料描述] AS [产品名称],
|
||||
v.[计划数量订单],
|
||||
v.[入库数量],
|
||||
v.[计划完成] AS [要求完工日期],
|
||||
v.[要求发货日期],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发货状态], 0) = 1 THEN N'已发货'
|
||||
ELSE N'未发货'
|
||||
END AS [发货状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[齐套], 0) = 1 THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [齐套],
|
||||
CASE
|
||||
WHEN ISNULL(v.[拣配状态], 0) = 1 THEN N'已拣配'
|
||||
ELSE N'未拣配'
|
||||
END AS [拣配状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'1' THEN N'发料齐套'
|
||||
WHEN ISNULL(v.[发料状态], N'') = N'2' THEN N'发料缺件'
|
||||
ELSE N'未发料'
|
||||
END AS [发料状态],
|
||||
CASE
|
||||
WHEN ISNULL(v.[任务状态], 0) IN (2, 4) OR v.[开工时间] > '1900-01-01' THEN N'已开工'
|
||||
ELSE N'待执行'
|
||||
END AS [装配开工],
|
||||
v.[完成数量],
|
||||
CASE
|
||||
WHEN final_check.[计划号] IS NOT NULL THEN N'是'
|
||||
ELSE N'否'
|
||||
END AS [终检],
|
||||
CASE WHEN ISNULL(v.[生产工艺], 0) = 1 THEN N'是' ELSE N'否' END AS [生产工艺],
|
||||
CASE WHEN ISNULL(v.[排产状态], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [排产状态],
|
||||
ISNULL(v.[自制件属性], N'') AS [自制件属性],
|
||||
v.[计划开始时间] AS [预计齐套时间],
|
||||
sap.ItemCode AS [缺件物料编码],
|
||||
sap.U_Name AS [缺件物料名称],
|
||||
sap.[未发货数量] AS [缺件数量],
|
||||
sap.[库存数量] AS [库存数量],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'外购' ELSE sap.[属性] END AS [缺件属性],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[在制采购], 0)), N'')
|
||||
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[订单编号]), N'')
|
||||
END AS [缺件生产订单号],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(current_step.[当前序], N'') END AS [进度],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN
|
||||
N'采购员:' + ISNULL(NULLIF(sap.[采购员], N''), N'-') +
|
||||
N' / 未清数量:' + CONVERT(nvarchar(30), sap.[采购未清数量]) +
|
||||
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[到货草稿]) +
|
||||
N' / 质检状态:' + ISNULL(purchase_check.[质检状态], N'未完成')
|
||||
ELSE ISNULL(route.[工艺路线], N'')
|
||||
END AS [工艺路线],
|
||||
CASE
|
||||
WHEN sap.[属性] = N'' THEN sap.[采购预计交货日期]
|
||||
ELSE route.[预计完成时间]
|
||||
END AS [预计完成时间],
|
||||
CASE WHEN sap.[属性] = N'' THEN N'' ELSE ISNULL(route.[工艺路线明细], N'[]') END AS [工艺路线明细],
|
||||
sap.[采购未清数量],
|
||||
sap.[到货草稿],
|
||||
ISNULL(purchase_check.[质检状态], CASE WHEN sap.[属性] = N'' THEN N'未完成' ELSE N'' END) AS [质检状态],
|
||||
sap.DocEntry AS [SAP单据],
|
||||
sap.[行号] AS [SAP行号]
|
||||
FROM SAP缺件 AS sap
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) m.*
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] = sap.DocEntry
|
||||
ORDER BY m.[订单行号]
|
||||
) AS v
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) m.*
|
||||
FROM [dbo].[View_生产订单_MES] AS m
|
||||
WHERE m.[物料类型] = N'pit_Resource'
|
||||
AND ISNULL(m.[排产状态], 0) = 1
|
||||
AND m.[订单编号] <> v.[订单编号]
|
||||
AND (
|
||||
(sap.[属性] = N'机加件' AND (
|
||||
(sap.DocNum > 0 AND m.[订单编号] = sap.DocNum)
|
||||
OR (sap.DocNum <= 0 AND m.[物料编号] = sap.ItemCode)
|
||||
))
|
||||
OR (sap.[属性] LIKE N'%装配%' AND m.[物料编号] = sap.ItemCode AND ISNULL(m.[合同号], N'') = ISNULL(sap.Project, N''))
|
||||
)
|
||||
ORDER BY
|
||||
CASE WHEN sap.DocNum > 0 AND m.[订单编号] = sap.DocNum THEN 0 ELSE 1 END,
|
||||
m.[订单编号] DESC,
|
||||
m.[订单行号]
|
||||
) AS detail_order
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) q.[计划号]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[质检类型] = N'终检'
|
||||
AND q.[计划号] = v.[订单编号]
|
||||
) AS final_check
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
MAX(p.[计划完成时间]) AS [预计完成时间],
|
||||
STUFF((
|
||||
SELECT N'、' + p2.[工序名称] +
|
||||
CASE WHEN ISNULL(p2.[指派对象], N'') = N'' THEN N'' ELSE N'(' + p2.[指派对象] + N')' END
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR XML PATH(N''), TYPE
|
||||
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [工艺路线],
|
||||
(
|
||||
SELECT
|
||||
p2.[订单行号],
|
||||
p2.[工序名称],
|
||||
p2.[指派对象],
|
||||
p2.[计划开始时间],
|
||||
p2.[计划完成时间],
|
||||
ISNULL(p2.[进度], 0) AS [进度],
|
||||
ISNULL(p2.[完成数量], 0) AS [完成数量],
|
||||
ISNULL(p2.[收料数量], 0) AS [收料数量],
|
||||
ISNULL(p2.[加工状态], 0) AS [加工状态],
|
||||
p2.[开工时间],
|
||||
ISNULL(check_qty.[收检合格数], 0) AS [收检合格数],
|
||||
ISNULL(check_qty.[收检不合格数], 0) AS [收检不合格数]
|
||||
FROM [dbo].[View_生产订单_MES] AS p2
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
SUM(ISNULL(q.[合格数], 0)) AS [收检合格数],
|
||||
SUM(ISNULL(q.[不合格数], 0)) AS [收检不合格数]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[TaskAID] = p2.[TaskAID]
|
||||
AND q.[质检类型] = N'收检'
|
||||
) AS check_qty
|
||||
WHERE p2.[订单编号] = detail_order.[订单编号]
|
||||
AND p2.[物料类型] = N'pit_Resource'
|
||||
ORDER BY p2.[订单行号]
|
||||
FOR JSON PATH
|
||||
) AS [工艺路线明细]
|
||||
FROM [dbo].[View_生产订单_MES] AS p
|
||||
WHERE p.[订单编号] = detail_order.[订单编号]
|
||||
AND p.[物料类型] = N'pit_Resource'
|
||||
) AS route
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1)
|
||||
pending.[订单行号],
|
||||
pending.[工序名称],
|
||||
pending.[加工状态],
|
||||
pending.[进度],
|
||||
pending.[完成数量],
|
||||
pending.[计划数量],
|
||||
pending.[开工时间]
|
||||
FROM [dbo].[View_生产订单_MES] AS pending
|
||||
WHERE pending.[订单编号] = detail_order.[订单编号]
|
||||
AND pending.[物料类型] = N'pit_Resource'
|
||||
AND NOT (
|
||||
ISNULL(pending.[进度], 0) >= 100
|
||||
OR (ISNULL(pending.[计划数量], 0) > 0 AND ISNULL(pending.[完成数量], 0) >= ISNULL(pending.[计划数量], 0))
|
||||
)
|
||||
ORDER BY pending.[订单行号]
|
||||
) AS pending
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) prev.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS prev
|
||||
WHERE prev.[订单编号] = detail_order.[订单编号]
|
||||
AND prev.[物料类型] = N'pit_Resource'
|
||||
AND prev.[订单行号] < pending.[订单行号]
|
||||
ORDER BY prev.[订单行号] DESC
|
||||
) AS prev_step
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) last_step.[工序名称]
|
||||
FROM [dbo].[View_生产订单_MES] AS last_step
|
||||
WHERE last_step.[订单编号] = detail_order.[订单编号]
|
||||
AND last_step.[物料类型] = N'pit_Resource'
|
||||
ORDER BY last_step.[订单行号] DESC
|
||||
) AS last_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN detail_order.[订单编号] IS NULL THEN N''
|
||||
WHEN pending.[订单行号] IS NULL THEN ISNULL(last_step.[工序名称], N'') + N'毕'
|
||||
WHEN ISNULL(pending.[进度], 0) > 0
|
||||
OR ISNULL(pending.[完成数量], 0) > 0
|
||||
OR ISNULL(pending.[加工状态], 0) IN (2, 3, 4, 5, 6)
|
||||
OR pending.[开工时间] > '1900-01-01'
|
||||
THEN ISNULL(pending.[工序名称], N'') + N'中'
|
||||
WHEN prev_step.[工序名称] IS NULL THEN N''
|
||||
ELSE prev_step.[工序名称] + N'毕待' + ISNULL(pending.[工序名称], N'')
|
||||
END AS [当前序]
|
||||
) AS current_step
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN sap.[属性] <> N'' THEN N''
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND ISNULL(task.[入库数量], 0) > 0
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[质量检验_质检任务_SAP] AS task
|
||||
OUTER APPLY (
|
||||
SELECT SUM(ISNULL(q.[检验数量], 0)) AS [已检验数量]
|
||||
FROM [dbo].[YL_质量检验_质检记录] AS q
|
||||
WHERE q.[检测类型编号] = 5
|
||||
AND q.[计划号] = task.[订单编号]
|
||||
AND q.[行号] = task.[行号]
|
||||
AND q.[订单类型] = task.[订单类型]
|
||||
) AS checked_qty
|
||||
WHERE sap.[到货草稿] > 0
|
||||
AND task.[订单类型] = N'20'
|
||||
AND task.[订单编号] = sap.[到货草稿]
|
||||
AND (
|
||||
ISNULL(task.[入库数量], 0) <= 0
|
||||
OR ISNULL(checked_qty.[已检验数量], 0) < ISNULL(task.[入库数量], 0)
|
||||
)
|
||||
) THEN N'已完成'
|
||||
ELSE N'未完成'
|
||||
END AS [质检状态]
|
||||
) AS purchase_check
|
||||
WHERE
|
||||
v.[订单编号] IS NOT NULL
|
||||
AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
|
||||
AND (@计划号 = N'' OR ISNULL(v.[计划号], N'') = @计划号)
|
||||
AND (@合同号 = N'' OR ISNULL(v.[合同号], N'') LIKE N'%' + @合同号 + N'%')
|
||||
AND (@产品编码 = N'' OR ISNULL(v.[物料编号], N'') LIKE N'%' + @产品编码 + N'%')
|
||||
AND (@产品名称 = N'' OR ISNULL(v.[物料描述], N'') LIKE N'%' + @产品名称 + N'%')
|
||||
AND (@工序名称 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS fp
|
||||
WHERE fp.[订单编号] = v.[订单编号]
|
||||
AND fp.[工序名称] = @工序名称
|
||||
))
|
||||
AND (@计划开始 = N'' OR v.[计划开始时间] >= TRY_CONVERT(datetime, @计划开始))
|
||||
AND (@计划完成 = N'' OR v.[计划开始时间] <= TRY_CONVERT(datetime, @计划完成))
|
||||
AND (@排产状态 = N'全部' OR @排产状态 = N'' OR
|
||||
(@排产状态 = N'已完成' AND ISNULL(v.[排产状态], 0) = 1) OR
|
||||
(@排产状态 = N'未完成' AND ISNULL(v.[排产状态], 0) = 0)
|
||||
)
|
||||
AND (@指派对象 = N'全部' OR @指派对象 = N'' OR EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[View_生产订单_MES] AS ap
|
||||
WHERE ap.[订单编号] = v.[订单编号]
|
||||
AND ap.[指派对象] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@指派对象, N','))
|
||||
))
|
||||
AND (@发货状态 = N'全部' OR @发货状态 = N'' OR
|
||||
(@发货状态 = N'已发货' AND ISNULL(v.[发货状态], N'0') = N'1') OR
|
||||
(@发货状态 = N'未发货' AND ISNULL(v.[发货状态], N'0') <> N'1')
|
||||
)
|
||||
AND (@齐套 = N'全部' OR @齐套 = N'' OR
|
||||
(@齐套 = N'是' AND ISNULL(v.[齐套], 0) = 1) OR
|
||||
(@齐套 = N'否' AND ISNULL(v.[齐套], 0) <> 1)
|
||||
)
|
||||
AND (@发料状态 = N'全部' OR @发料状态 = N'' OR
|
||||
(@发料状态 = N'发料齐套' AND ISNULL(v.[发料状态], N'0') = N'1') OR
|
||||
(@发料状态 = N'发料缺件' AND ISNULL(v.[发料状态], N'0') = N'2') OR
|
||||
(@发料状态 = N'未发料' AND ISNULL(v.[发料状态], N'0') NOT IN (N'1', N'2'))
|
||||
)
|
||||
AND (@自制件属性 = N'全部' OR @自制件属性 = N'' OR
|
||||
(@自制件属性 = N'机加' AND (sap.[属性] = N'机加件' OR v.[自制件属性] = N'机加件')) OR
|
||||
(@自制件属性 = N'装配' AND (sap.[属性] LIKE N'%装配%' OR v.[自制件属性] LIKE N'%装配%'))
|
||||
)
|
||||
AND (@检验状态 = N'' OR (sap.[属性] = N'' AND ISNULL(purchase_check.[质检状态], N'') = @检验状态))
|
||||
)
|
||||
SELECT TOP (1000)
|
||||
[计划号],
|
||||
[合同号],
|
||||
[订单号],
|
||||
[产品编码],
|
||||
[产品名称],
|
||||
[计划数量订单],
|
||||
[入库数量],
|
||||
[要求完工日期],
|
||||
[要求发货日期],
|
||||
[发货状态],
|
||||
[齐套],
|
||||
[拣配状态],
|
||||
[发料状态],
|
||||
[装配开工],
|
||||
[完成数量],
|
||||
[终检],
|
||||
[生产工艺],
|
||||
[排产状态],
|
||||
[自制件属性],
|
||||
[预计齐套时间],
|
||||
[缺件物料编码],
|
||||
[缺件物料名称],
|
||||
[缺件数量],
|
||||
[库存数量],
|
||||
[缺件属性],
|
||||
[缺件生产订单号],
|
||||
[进度],
|
||||
[工艺路线],
|
||||
[预计完成时间],
|
||||
[工艺路线明细],
|
||||
[采购未清数量],
|
||||
[到货草稿],
|
||||
[质检状态],
|
||||
[SAP单据],
|
||||
[SAP行号]
|
||||
FROM (
|
||||
SELECT
|
||||
查询结果.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY
|
||||
[订单号],
|
||||
CASE
|
||||
WHEN ISNULL([缺件生产订单号], N'') <> N'' THEN [缺件生产订单号]
|
||||
ELSE [缺件物料编码] + N':' + CONVERT(nvarchar(30), [SAP行号])
|
||||
END
|
||||
ORDER BY [缺件数量] DESC, [SAP单据], [SAP行号]
|
||||
) AS rn
|
||||
FROM 查询结果
|
||||
) AS dedup
|
||||
WHERE rn = 1
|
||||
ORDER BY
|
||||
[预计齐套时间],
|
||||
[订单号],
|
||||
[缺件生产订单号],
|
||||
[缺件物料编码];
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user