Files
JY1.0/sql/工时统计_导出null修复_20260717.sql

102 lines
3.5 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 修复员工工时统计导出 null统一导出元数据列名并修正导出文件名前缀修改人:Ld 修改时间:2026-07-17 07:53:49;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL,
@排序名称 INT = NULL,
@排序方式 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 后端导出处理器未支持 tabletype=18使用通用导出类型 15 防止返回 NULL修改人:Ld 修改时间:2026-07-17 07:58:30;
SELECT N'员工工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT
256 * 15 AS 工序,
256 * 10 AS 工序顺序,
256 * 30 AS 零件名称,
256 * 30 AS 零件图号,
256 * 20 AS 物料编码,
256 * 10 AS 加工数,
256 * 12 AS 计价方式,
256 * 10 AS 单价,
256 * 12 AS 总价,
256 * 15 AS 加工工时M,
256 * 10 AS 暂停时长,
256 * 30 AS 开始加工时间,
256 * 30 AS 完成时间,
256 * 10 AS 操作者,
256 * 25 AS 设备,
246 * 25 AS 订单编号,
246 * 25 AS 产品名称;
SELECT
0 AS 工序,
1 AS 工序顺序,
0 AS 零件名称,
0 AS 零件图号,
0 AS 物料编码,
1 AS 加工数,
0 AS 计价方式,
1 AS 单价,
1 AS 总价,
1 AS 加工工时M,
1 AS 暂停时长,
0 AS 开始加工时间,
0 AS 完成时间,
0 AS 操作者,
0 AS 设备,
0 AS 订单编号,
0 AS 产品名称;
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT
工序,
工序顺序,
零件名称,
图号 AS 零件图号,
物料编码,
完成数 AS 加工数,
计价方式,
单价,
总价,
加工时长 AS 加工工时M,
暂停时间 AS 暂停时长,
开始加工 AS 开始加工时间,
结束加工 AS 完成时间,
操作者,
工位号 AS 设备,
订单编号,
产品名称
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO