生产报工工时计算规则

范围:加工中心、装配中心报工产生的工时,以及工时校验计算出的 SAP 上传分钟
版本:2026-07-28 | 依据:线上 YL_MESDB 当前过程定义与当前页面代码的只读核验

1. 先区分四类数字

核心结论:报工数量、设备实际工时、人员总时长、校验上传分钟是四个不同口径。页面上都可能显示为“工时”或“数量”,但不能互相代入计算。
数值来源和计算单位用途
报工数量用户录入 partCount,累计写入任务 完成数量件/业务单位判断任务完成,和秒、分钟没有换算关系。
总时长结束时间 - 开始时间人员时间、校验比例和上传计算的基础。
实际工时总时长 - 暂停总时长加工中心设备实际运转工时。
UploadMinutes由校验过程按工时类型、班次和当日比例系数换算。分钟SAP 资源消耗单据的 Quantity
输入开始/结束时间
暂停记录
人员、班次、加班类型
原始计算总时长、实际工时
人员工时、加班工时
校验计算比例系数
UploadMinutes(分钟)

2. 加工中心:设备工时怎么算

过程 MES_ProductTask_WorkingStart产生“开始加工”记录;报工或辅助结束最终经 MES_ProductCenter_OptRecord_Save闭合一个工作周期。该过程使用同一 TaskAID + 工位名称的开始、暂停、结束记录计算。

周期总时长(秒) = DATEDIFF(SECOND, 周期开始时间, 本次结束时间) 暂停总时长(秒) = Σ DATEDIFF(SECOND, 每次暂停开始时间, 对应恢复/结束时间) 设备实际工时(秒) = 周期总时长 - 暂停总时长
动作计算影响写入/更新字段
开始加工记录周期起点,不立即形成完整工时。开始时间,结束时间为空。
暂停开始记录先按开始到暂停的差值闭合;暂停本身等待后续恢复或结束来确定暂停时长。暂停时间、暂停时长、关联记录。
报工/辅助结束找到周期开始,汇总周期内已闭合暂停,计算总时长和设备实际工时。结束时间、总时长、暂停总时长、实际工时。
关键差异:设备工时使用“扣暂停后的实际工时”;下节的人员工时使用“开始到结束的总时长”,不扣暂停。两者不必相等,这是当前过程实现的既有口径。

3. 装配中心:普通工时和加班工时怎么算

MES_人员工时记录_开始写入当前用户的未结束“开始加工”记录。MES_人员工时记录_结束找到同 TaskAID + 操作人最近的未结束记录,以数据库当前时间为结束时间:

总工时(秒) = DATEDIFF(SECOND, 开始时间, 结束时间)
日期和选择普通工作时间(秒)加班时间(秒)规则
工作日,未选择加班总工时0整段作为普通报工时间。
工作日,选择加班,且跨过白班结束点白班结束时间 - 开始时间结束时间 - 白班结束时间白班结束时间从 班次表中“白班”取得,缺失时默认 16:30
工作日,选择加班,开始已在白班结束后0总工时整段作为工作日加班。
休息日/法定休息日,选择加班0总工时整段按“休息日加班”或“法定休息日加班”生成加班人员记录。
休息日/法定休息日,未选择加班过程变量先取总工时0随后原开始记录的 工时、总时长会被置为 0,同时写入“休息日工作/法定休息日工作”报工记录。
需注意的现状:休息日未选择加班时,结束过程内部先计算普通工作时间,但随后又将原操作记录的 工时总时长置零,报工记录保留该工作时间。这会造成操作记录表与报工记录表的工时口径不同,追溯时必须同时检查两张表。

4. 加工中心:人员工时怎么算

加工中心在非休息日、非法定休息日的报工/辅助结束周期,调用 计算人员工时。过程将工位绑定人员与有效班次组合,计算每名人员在可用班次内的时间重叠。

班次重叠秒数 = max(0, min(结束时间, 班次结束) - max(开始时间, 班次开始)) 人员计算工时(秒) = 班次重叠秒数
  • 仅保留已绑定到对应班次且重叠秒数大于 0 的人员-班次组合。
  • 指定实际干活人员有班次绑定时,只保留其绑定班次;没有班次绑定时,保留重叠最长的班次。若所有班次均无重叠,过程会给该指定人员 1 秒最小值。
  • 当前实际公式不再除以绑定设备数。旧的 重叠秒数 / 绑定设备数逻辑在过程里已注释,现行代码直接使用重叠秒数。
  • 每个满足条件的人员-班次组合都会向 YL_加工中心_操作记录表插入一条人员工时分摊记录,字段 总时长写入该人员的计算工时秒数。

5. 工时校验:上传分钟怎么算

5.1 先判定是否参与计算

条件实际行为
校验列表开始时间 < 当天 00:00:00,当天开始的记录不进入该最终校验列表。
单条上传分钟计算总时长 < 300 秒,返回 UploadMinutes=0、工时类型“跳过SAP”。过程注释/提示写“总时长为0”,但实际判断阈值是 300 秒。
批量校验的加班类别加班、休息日加班、法定休息日加班、休息日工作、法定休息日工作usp_BatchValidateWorkTime直接按总时长转分钟,不进入单条上传分钟过程。

5.2 当日比例系数

正常记录需要先调用 usp_CalculateDailyRatio。统计范围是同一操作人、同一开始日期的 View_生产工时视图记录,且满足以下条件:

  • 总时长大于 300 秒;
  • 阶段标识不等于 -1;
  • 订单号不等于 3886;
  • 操作类别不是“加班、休息日工作、法定休息日工作”。
当日总分钟 = Σ 合格记录的总时长(秒) / 60 比例系数 Ratio = (标准工时(小时) × 60) / 当日总分钟 当日总分钟 ≤ 0 或标准工时 ≤ 0 时:Ratio = 1

标准工时优先取 当日班次最小标准工时,该值不大于 0 时再取该记录的 班次标准工时;两者都不可用时视图默认值为 8。

5.3 班次内外拆分

usp_CalculateUploadMinutes优先按操作人,再按工位名称读取班次;找不到时默认白班 07:45-16:30。跨天班次由 usp_CalculateShiftTime逐日切段计算。

班次内分钟 = 班次内秒数 / 60 班次外分钟 = 班次外秒数 / 60 基础分钟 BaseMinutes = 总时长 / 60

5.4 单条计算过程的最终公式

操作类别usp_CalculateUploadMinutes 的公式
报工、开始加工、辅助结束、辅助开始及其他普通类别UploadMinutes = BaseMinutes × Ratio
工作日加班UploadMinutes = BaseMinutes,不乘比例系数。
休息日加班、法定休息日加班UploadMinutes = 班次内分钟 × Ratio + 班次外分钟
批量入口优先级:当前工时校验页面使用 usp_BatchValidateWorkTime。它先识别所有加班/休息日类别并直接设定 UploadMinutes = 总时长 / 60。因此,上表中的“休息日加班按班次内外拆分”是单条 usp_CalculateUploadMinutes的能力;在当前批量校验页面路径中,会被批量过程的直接换算规则覆盖。

6. 计算示例

示例一:加工中心设备工时
开始 08:00,暂停 10:00-10:20,结束/报工 12:00。
总时长 = 4 × 3600 = 14,400 秒
暂停总时长 = 20 × 60 = 1,200 秒
设备实际工时 = 14,400 - 1,200 = 13,200 秒 = 220 分钟
示例二:加工中心人员工时
同一周期为 08:00-12:00,某绑定人员的有效班次为 07:45-16:30。
班次重叠 = 12:00 - 08:00 = 14,400 秒
该人员计算工时 = 14,400 秒
即使该人员绑定多台设备,现行代码也不再除以设备数。
示例三:装配工作日跨白班结束点
开始 15:30,结束 18:00,选择加班,白班结束 16:30。
普通工作时间 = 16:30 - 15:30 = 3,600 秒
加班时间 = 18:00 - 16:30 = 5,400 秒
示例四:正常工时上传分钟
某人员当日有效总时长为 600 分钟,标准工时为 8 小时,当前一条普通报工总时长为 120 分钟。
Ratio = (8 × 60) / 600 = 0.8
UploadMinutes = 120 × 0.8 = 96 分钟
示例五:当前批量校验中的加班
一条“工作日加班”原始记录总时长为 5,400 秒。
UploadMinutes = 5,400 / 60 = 90 分钟
当前批量过程直接采用此结果,不再应用当日比例系数。

7. 计算速查与校验结束条件

要确认什么先看哪个字段/对象计算或判断
设备实际运行多久原操作记录:开始时间、结束时间、暂停总时长实际工时 = 总时长 - 暂停总时长
装配人员正常/加班多久装配开始记录、班次表、是否加班/休息日参数按白班结束点或休息日规则切分。
加工人员分到多久工位人员绑定、班次人员绑定、起止时间人员工时 = 班次重叠秒数
SAP 会上传几分钟总时长、操作类别、标准工时、同人同日记录普通记录乘 Ratio;当前批量加班直接 总时长/60
是否已完成工时校验生产管理_工时校验_校验工时表存在 报工记录id = 原始操作记录.AID 的副本即已校验。
不要混用字段:实际工时适合看设备扣暂停后的运行时间;总时长是人员与上传分钟计算基础;UploadMinutes是经过规则换算后的 SAP 数量。若需核算差异,应在同一条原始记录 AID 上同时比对这三个值,而不是用报工数量推算工时。