一. 背景:
对于生产结束时间的定义,仅仅从生产层面可能认为生产结束,最后一个产品下线报工确认就是生产结束,但是从整个供应链甚至整个公司来考虑,虽然产品在车间生产完了,但是物品还在车间而不是在仓库,其实统筹全局或者对于仓库来说,你车间产品没入到仓库来,我咋知道你有没有生产完,是不是生产完了还要返工回去等。
二. 摘要:
生产订单前台是有几个日期字段的,基本开始/结束日期表示计划开始结束日期,已确认的开始/结束日期表示订单第一次报工和最后一次报工的日期,但是订单的收货日期貌似没有在前台显示。
如果没有明显的表(像AUFK/AFKO/AFPO)存放这个第一次收货的时间,那可以发散思维,:做收货的时候是不是会有物料凭证,能不能取物料凭证的日期,从AUFM或者MSEG根据订单号来找101移动凭证发生的日期?然而收货会有反向冲销动作,而且可能部分收货也是101移动类型,那具体该取哪个时间好像有点乱了?再想一想前台生产订单的状态,部分收货会多出一个PDLV,再冲销又没有了,或者全部收货PDLV消失但是出来了DLV状态,而且这些状态在前台是有记录时间的,既然前台有时间后台就有表可以查了,如下图:
PS:如果报工自动收货入库,那可以认为报工即是开始收货
三. 取生产订单第一次收货时间的两种方法
3.1 方法一:后台_取JCDS~UDATE(用对象号OBJNR和状态STAT)
其中对象号OBJNR从AUFK取,实际就是OR+生产订单号;状态取TJ02T表ZH语言为ZH,TXT04为PDLV和DLV对应的ISTAT,取到PDLV对应I0074,DLV对应I0012
具体逻辑:
①如果生产订单的状态有DLV(AUFK~OBJNR=JEST~OBJNR JEST~STAT=TJ02T~STAT,其中JEST~INACT为空),则关联JCDS的OBJNR/STAT取MAX(JCDS~UDATE),
②如果生产订单的状态有PDLV,则取MAX(JCDS~UDATE),关联JCDS的OBJNR/STAT;
③如果DLV和PDLV两者都没有则该字段为空
3.2 方法二:前台_CO03,抬头→状态更改,找DLV和PDLV的时间。
大致思路:对于DLV状态的订单,看DLV状态的最大日期,对于PDLV状态的订单,看PDLV状态的最大日期
为什么取最大日期?假设如图,DLV有三行,日期最小的第一行为第一次收货产生的,日期第二小的一行是冲销产生的(操作字段为未激活,实际就是JCDS表的状态为未激活,此时前台DLV状态消失了)。另外,像部分收货情况,如果订单为5,第一次交货1,此时会产生一行为PDLV状态,第二次又交货1,原来PDLV那行数据日期不会变,也不会新增一行,除非全部冲销完。