ERP(以金蝶云星空7.5为例)中,我们启用了工序管理的话,一般是依据实际情况在“工作中心”的“活动类型”中选择“机器”或“人员”。如截图所示:

微信图片2.png

工作中心,在工艺路线中引用,然后又被引用到工序计划里。最后在做工序汇报后,“工作中心”的“活动类型”为“机器”的作业,将自动生成机器工时的实际工时归集,“工作中心”的“活动类型”为“人员”的作业,将自动生成人员工时的实际工时归集,分别如下面的截图所示:(下面第一个截图中出现的“工序说明”是我自己二开加进去的。)

微信图片3.png

微信图片4.png

现在问题来了,我们有一类工作中心是人员和机器合做、紧密结合的,譬如“覆膜”,就是要人和覆膜机不停地合作,也就是说这一类工作中心的“活动类型”设为“机器”或者“人员”都不完全对,在做工序汇报后,它的实际工时归集应该是:人员工时+机器工时(人员工时+机器工时),在ERP里是无法实现的,基于这个逻辑,我首先将这类工作中心的“活动类型”设置为“机器”,然后在数据库里做了个作业定时刷新。逻辑是

1.update人员工时=机器工时
2.update实际总工时=人员工时+机器工时
脚本如下:

    --更新XX车间的人员实做工时=机器实做工时
--select e.fbillno,D.F_TSNW_TEXT_YJQSZGS,D.F_TSNW_Text_QXXBLH,D.FMACWORKTIME,d.FCOSTCENTERID
UPDATE D SET 
----D.F_TSNW_TEXT_GXSM=C.FOPERDESCRIPTION,
----D.F_TSNW_Integer_WGSL=F.FFINISHQTY,
--D.F_TSNW_TEXT_YJQSZGS=g.acttime/60,
--D.F_TSNW_Text_QXXBLH=G.QXXBLH,
--D.FMACWORKTIME=G.ecfpjgsj
D.FHRWORKTIME=D.FMACWORKTIME --人员实做工时=机器实做工时
from T_SFC_OPTRPT A   
JOIN  T_SFC_OPTRPTENTRY B ON A.FID=B.FID
JOIN  T_SFC_OPTRPTENTRY_L C ON B.FENTRYID=C.FENTRYID AND C.FLOCALEID=2052 
join T_CB_WORKHOURSENTRY D ON D.FSRCBILLNO=A.FBILLNO AND D.FSEQ=B.FSEQ-- AND D.FMACWORKTIME<>0 
JOIN T_CB_WORKHOURS E ON D.FID=E.FID
join T_SFC_OPTRPTENTRY_A F ON F.FENTRYID=B.FENTRYID
where d.FCOSTCENTERID='272058' and DATEDIFF(month,D.FDATE,GETDATE())=1 --XX车间、上个月

--更新实际总工时
UPDATE D SET 
D.FTOTALTIME=D.FHRPREPARETIME+D.FHRWORKTIME+D.FMACPREPARETIME+D.FMACWORKTIME
from T_CB_WORKHOURSENTRY D
JOIN T_CB_WORKHOURS E ON D.FID=E.FID
--where e.FBILLNO='GSGJ00077217'
WHERE  DATEDIFF(month,D.FDATE,GETDATE())=1 
--取上月

运行后,效果如下图,实现了我们的逻辑。

微信图片5.png