生产计划排程设计方法
2023-12-18 10:18作者:admin
生产计划的排程安排常见的有两种,一种是集权式安排,一种是分权式安排。哪种好?哪种不好?没有绝对,根据实际的业务需要,找到最适合自己工厂的模式。我们从定义、优缺点、工作内容(输入输出)几个方向来讨论,讨论完后,再决定;
01 定义
集权式安排:生产计划人员把相应的生产任务排到具体的每个点。颗粒度到具体到设备、具体到机台;生产的管理人员只需要按计划做执行了;
分权式安排:生产计划人员把排程排到各车间对应的管理人员,由对应的管理人员再进行二次分解,根据相关的图纸、工艺安排在每台机器、设备上面;
02 优点
集权式安排:因集权式安排已经到具体的机台设备,所以这样的模式下,对于订单的各工序控制点都能够控制到,生产是一个执行部门。集权式下的安排可以多部门协调,而不是站在某一个独立的车间来看,而是看整体效率;
集权式安排下会对在手订单和预测订单一起进行产能负荷协调,根据价值流分析,做出符合公司经营的最佳生产平衡点;
分权式安排:分权式的安排只到生产管理的班组,由班组进行排程,对排程人员的要求相对低,不需要生产计划具备专业的工艺知识,只需要以拉动式倒排即可;
03 缺点
集权式安排:因集权式安排的精度相当高,所以对生产计划排程人员需要能力相对比较高:
如果以上不熟悉的话,排程出来的生产计划,生产相关的管理人员是无法执行的;
分权式安排:分权式安排是由生产管理人员进行排程,由于每个工序都是班组长或车间主任决定,各组长、各车间彼此之间缺乏必要的协调。各制程对应的工序很有可能是,上工序做了下工序不需要的半成品,下工序需要的,上工序又没有;
车间的班组长的计算机水平以及ERP逻辑水平相对比较弱弱,在具体到机台设备的排程中的排程负荷量预计只有1天到3天,超过3天以上的全工序零件的整合平衡计划是排程不出来的;
04 工作内容
集权式安排: 根据订单需求排程出对应的全制程工序计划;
输出报表:
上面排程组装计划的约束条件需要综合考虑各制程的约束,特别是瓶颈资源;
对应组装的零件假定有注塑件、五金件、印刷件、缝制件;对应的输出报表需要与成品计划一致;以注塑件为例:
输入报表:
上面需要输出报表需要对应各职能部门提供相关报表,计划才能输出对应的排程表,举例说明:
分权式安排: 分权式安排只需要按交期倒排到具体的时间,然后转各对应的装配车间、注塑车间、CNC车间,由车间分解,一般情况下,车间分解都是具体的1到2天的排程,每天的的工作内容就是处理急单。;
05 总结
最后用一张表来看下,由你们决定什么模式;
目前的我了解的企业大部分是分权式的,这样的模式的特点是排程人员为跟单,生产人员是计划,因为生产人员的强项是在生产,所以计划一般不是很强,造成异常多,库存高,工序之间经常发生,我要你没有,我不要的你生产一大堆……。
我建议,最后还是向集权式计划推进,相关部门把基础数据完善与健全;
关于生产计划排程经验总结:
生产计划中对订单进行排程是一个非常基础的工作之一,也可以说生产计划每天都在和排程打交道,对于排程来说,可以在信息化软件直接排程,也可以通过Excel报表进行排程。
排程的方法又分为一维排程,二维排程,关于一维排程好还是二维排程好,无需争论,只需要适合自己所在的行业,所在的特点就可以了。大部分软件都支持一维排程与二维排程的转换。


实际工作中,就算在软件在进行排程,排程好后,有时候也需要对排程进行导出,在报表中进行二次编辑加工,加上好多中小工厂,没有上APS(自动排程系统),所以今天分享我对于排程的设计思路;
01 行业模式:
排程的设计过程中对于行业与生产计划特点有很大关系,本案例中的生产模式为离散型。
什么是离散型生产模式?
离散制造的产品往往由多个零件经过一系列并不连续的工序的加工最终装配而成。离散制造的产品相对较为复杂,包含多个零部件,一般具有相对较为固定的产品结构,原材料清单和零部件配套关系。
02 岗位说明:
排程的设计过程中还需求结合当前岗位的职能来设计,当前岗位为主计划,也就是成品计划,负责最终的成品,包含S&OP计划的部分职能;
1、根据业务下达的销售需求,负责工厂月度产能规划与订单统筹,组织工厂各部门进行订单评审及输出保障方案,确保排产、发布,确保工厂有序生产。
2、负责工厂、研发、计划物流端信息统筹拉通,确保新品顺利生产。
3、编制月度生产计划,协调各部门资源,确保生产任务按时开展,保障产品如期交付。
4、根据产品部的产品退市计划,落实物料库存情况,制定物料消耗计划,确保退市产品物料清理。
相关职责:
1.供应策略制定-分析销售渠道、需求特征、产品特征和供应能力,制定产品供应策略并参与供应链计划系统设计
2.制定月度S&OP计划-根据历史销售数据,产品上市、退市、切换计划,对标年度目标主导制定年度生产计划、中长期资源规划;负责月度S&OP计划运作,主导拉通供需评审拟定供需协调方案,召开S&OP会议,发布可执行S&OP计划、供应计划;
3.产品生命周期管理-参与IPMT评审计划,分析供应全流程主动识别新品上市的风险,做好产品供应生命周期管理,保障新产品上市过程中的供应资源准备,减少、消除老产品退市过程中的损失;
4.分析与数据建模、分析产品、销售维度的动销状态,监控订单交付履行过程,通过分析与建模优化交付管理过程,协助部门进行业务优化与变革,提高集成计划数据使用应用性与规范性
03 整体架构:
排程的设计先思考整体架构,需要实现什么功能?,从下图5个方法来设计


01 信息更新方便
PMC在工作中需要更新的信息比较多,基本上都是围绕着资源来管理的,这些资源对应的信息如何快速更新到排程表,是这个模块重点考虑的事情。以下的资源信息将整合到排程表中作为约束条件之一;
02 开始设计
明确目标和方向,开始动手,打开一个Excel工作簿,按F12,另存为指定的文件夹,同时命名为:生产排程表1.0; 在第1面Sheet页面,对此页重命名为:01 订单池;
订单池 页面说明:
定义:以ERP系统中未结案的生产任务为基准建立
更新频率:每天
导出全部未结案的生产任务明细表,如下图所示:

注意上图中标记框框处,这里是有问题的地方,这也是大部分ERP的的导出初始问题;

所以导出来的数据最好是打开后,直接复制数值过来,再用公式转换一下就可以了;
我们在订单排程表中,新建一个页面:命名为:02 复制生产订单,再把导出的数据复制→粘贴数值到这个表上,这样就把问题1解决,直接转成高版本了,因为订单排程表就是*.xlsx;

文本型日期问题的解决思路:用日期函数转换

对于问题2:我们这个页面的边上把原数据的标题复制到边上,然后在下方录入公式:就解决了问题2,下拉填充实现动态引用,
,
对于问题3:文本型数值,只需要对其减负运算就可以变成数值,录入--D2,向右填充→向下填充

最后一步,选中全部数据,按下Ctrl+T 转换成超级表

并对标题进行颜色填充和窗口冻结

完成这一步后,把填充颜色为黄色的数据复制到订单排程表的表1
选中数据→Ctrl+C→切换到表1的01订单池A1→选择性粘贴→粘贴列宽→粘贴数值→粘贴格式→选中数据→Ctrl+T→转成超级表→设置格式

完成后如上图所示;
这个设计思路的大纲如下,古哥希望能够慢慢的更新,争取能逻辑以及Excel技术一次性讲明白,为了不跑题,还是把设计大纲置顶;

订单池已经通过生产任务未结案明细中的任务创建好了,接下来就是要更新了,我们昨天的日期是昨日的生产任务未结案明细,今天如果再导出未结案明细就是今天的生产任务,为了好理解,我们定义今天为T天,其中T为Today的首字母; 昨天为T-1天;
更新的原则如下:
接下来,回到报表中,我们把T天的未结案工单复制到“02 复制生产订单”,这里注意,一定是粘贴数值,因为是超级表的原因,只要粘贴数值可以自动更新格式的;

注意上方标记处,这是新增加的,我们写一个匹配公式
=XLOOKUP([@制令单号3],表1[[#全部],[制令单号3]],表1[[#全部],[未完工量7]],"新增加")
函数释义:


我们只需要复制公式区中数值就可以了

粘贴到表1就可以自动填充公式
接下更新表1中结案数量以及完工数量;
录入公式:
=XLOOKUP([@制令单号3],表2[[#全部],[制令单号]],表2[[#全部],[已缴库量]],"已结案")

我们把已结案的生产任务复制到一个新建一张表3,命名为 03 已结案,同时把表1的已结案订单复制到这里后,再把表1的已经结案的删除

复制的最快速方法:
下拉填充公式得到下图,这样就完成订单池的新增加,更新入库数量了。

更新完成后的数量,表1与表2的数量应该是完全一致的。也就是T的未结案工单的订单数量,缴库数量都是和T-1天的一致;
当然有同学会问,为什么要这样复杂的更新,不能更新用这张表做订单池吗?这个问题问得好,如果直接用这张表的话,原来在表1更新的一些订单备注信息就无法一一对应了,相当于每次都覆盖式更新;
更新完后,我筛选未完工为0的订单还有很多,为什么不直接转到结案处呢?

这里就是涉及到结案与完工的定义了
开始设计第二个模块,就是如何设计排程表可以数据快速分析;

根据前文,我们已经把工单明细表转成订单池的设计完成。每天只需要把未结案的生产任务更新到订单池中就可以了,有了订单就可以排程了吗?什么都考虑的情况下,是可以的。但是排程不是简单的按某一个单一的约束条件来排程的,排程前我们需要准备一些数据,方便我们快速在排程中做出决策;
01 订单交期:
每个工单都会对应一个需求,占比最大的是销售订单需求,除了销售订单的需求,也有一些其它的需求而产生的工单,如返工,样品,等,就成品级的工单的话,一般都是销售需求单号和工单的需求号一一对应的;需要注意的就是一个订单需求号可以对应多工单,工单号就是唯一的号;这个订单交期是业务也是客户的第一交期;对应的KIP绩效就是客户订单准时交付率;这个指标根据内销和行业平均值,一般90%-95%;
02 评审交期:
对于客户的日期,是需要经过评审回复交期的,如果能够满足,订单交期就是评审交期;不能满足就是需要经过主计划排程后评估后得出的交期,这就是评审的交期,对应的KIP绩效指标就是订单一次评审准时交付率:这个指标需要和订单周期指标对应起来,不然评审只需要把客户的交期评审的宽放放进去,很容易做到100%;所以需要加上订单周期指标,订单周期指标根据公司的战略来定,从20天到40天不等;原则上订单一次评审的准时交付率需要95%到100%之间,同时订单周期指标小于30天;
03 资料确认;
对于家电行业来说,印刷品相关的一些配置订单的资料确认的及时非常重要,这个也需要加到订单池中,对应KPI绩效就是资料提供的准时率,这个指标需要主计划统计收集业务部门的配置资料是否按时提供;常见的家电配置资料有:
04 工单信息;
工单的状态、工单领料情况、工单的齐套情况,可以说工单的信息对于主计划来说非常重要,所以在排程中要特别注意工单管理,特别是工单的“资源”情况,相关对应的KPI绩效有:
05 其它信息
排程中如果ERP的一些信息不方便分析,主计划需要思考自己创建一些科目来分析,如按产品一级分类、二级分类,按产品的性能的一级分类、二级分类,分类的越详细,对排程的决策越有用;
如:产品大类小家电:一级分类:电饭煲、二级分类:按外观有:方煲、圆煲;按功能有:电子式;机械式;按客户分:内销、外销;按功率分:大功率、小功率;按销售渠道分:线上、线下;等等;
06 开始设计
铺垫了这样多,我们开始设计,01到03的大部分信息都是在销售订单里面,所以我们需要导出销售订单明细表,这里导出的表还是兼容模式,我们还是把它转成高版本的格式,同时转成超级表,命名为:“04 销售订单明细”

为了方便大家记忆,我们现在已经创建了4个超级表了,按一下Ctrl+F3,就可以看见了

我们为了快速排程,我们把订单的信息可以快速的引用到订单池中,方便我们做数据分析,注意表1订单池的顺序保持不变,统计按下单日期升序排序;都是未结案的;在引用销售订单号的时候,我们发现ERP系统这边没有带出对应工单号;所以这里没办法直接引用;
还有就是在引用销售订单号的时候我们发现无法一一对应,因一个销售订单号有多个项次,我们如果只匹配销售订单号的时候,就会工单对应的销售需求号就会一对多了;
以上两个问题我们的解决方案是,统计叫信息化部门加上去,有时候信息化部门办事效率太低,我们思考如何用Excel快速引用;

通过观察发现,只需要把品号和下单数量两个条件一起判断,就大概率可以找到销售订单号;录入公式=[@品号]&[@受订数量]

然后在表1订单池录入公式:
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[销售订单号]],"找不到")
这里用XLOOKUP,不用VLOOKUP的原因,是因为VLOOKUP不支持向左引用,只支持向右引用,出现错误找不到还需要额外写公式;

录入完成后,我们发现有些找不到的需要人工排查一下,是什么原因,是挪单了还是结案了?

引用完销售订单号,我们发现一个销售单号会对应多个订单号,我们还要让工单实现单单对应,就是保证一个工单对应 一个销售需求号,我们再把公式做一个变形;
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[销售订单号]],"找不到")&"-"&XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[项次]],"找不到")
公式看起来很长,其实非常好理解,就是再次引用一个项次号,用文本连接符号把它们串联起来,完成后的效果如下:

当订单池带上项次号后,就实现了一一对应,也就是单单对应了;
根据前文,我们在订单中,已经把销售订单号匹配过来了,现在需要快速分析,就需要创建一些字段,如时间、型号等这也是分析中常见的一种手段;
我们把销售订单中的预交期、客户、业务员引用过来,方便排程时候快速索引;
分别录入公式:
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[预交日期]],"找不到")
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[客户简称]],"找不到")
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[业务员]],"找不到")
注意这几个公式基本都一样,只需要更改XLOOKUP的返回参数的名称:如把客户简称替换成业务员就可以了
因为定义了名称表,所以公式显示的都是中文名称,这样的好处是,方便解释公式定义;

有了这些字段,我们就可以通过数据透视表快速转成我需要分析的数据了;
01 时间别分析;
按接单时间分析,各个时间段的接单情况,同时看预交期的时间分布,看一下是否平衡;
依次点表设计→透视表→插入透视表;这里看到引用范围就是表1,定义好的名称,这样的好处就是可以动态引用,当数据有增加的时候,不需要再次更新数据引用范围了;

这里可以按客户维度分析:

数据透视表非常简单,简单地把格式拖拽到对应的透视表字段中,就可以实现不同维度的分析;

当然也可以按品号的角度分析:

02 数量分析;
这是分析订单数量的结构,例如大订单占比多少?小订单占比多少等;
我们新建一个透视表,命名为 06 数量分析;
操作步骤:把数量最先拖拽到行字段列表,如下图所示

然后依次点数据透视表分析→分组选择→在弹出的对话框中起始录入0→终止于录入5000→步长1000
简单理解就是按1000一个维度分析,超过5000以上就不详细分析了

按下确认可以看到,基本上都集中在0到2000的数量范围下单;大订单比较少;

换成500的范围 后分析 如下图:

分析这些数量的目的就是为了看订单结构对排程的影响;举例说明:如果某个时间段全部是小订单,排程的压力就会很大,很可能切换就会非常多;如果某个时间段大订单较多,相对来说会好一点,无论切换还是生产效率都相对好掌握;
同时也分析哪些客户经常下小单,产值不高,要求又高,这样的客户是不是要排在优先级最高?也是作为在销大于产的时候,排产逻辑的一个依据;
03 展开分析;
知道了字段对于排程的重要性,我们可以通过数据透视不同的组合方式,分析出很多结果,注意没有字段就自己创建字段;
按业务与客户组合数量分析;

按业务与客户组合数量分析再加上日期维度分析;

按客户加上数量分析,计算出每单订单的平均数量;

排程中需要考虑的约束条件比较多,是否专线等,然后根据效率最优原则,一级一级筛选,直到综合效率最高。
01 判断是否专线
我们在排程表中增加一列,可生产线体,录入公式下拉:
=VLOOKUP([@品号],'08 对应线体'!A:B,2,0)

这一步的目的是筛选专用线体,只能专线生产。,筛选数字1的,录入公式
=VLOOKUP([@品号],'08 对应线体'!A:C,3,0)

上图中代表为专线生产,我们再筛选空白,执行同样的操作。再匹配一次;
02 判断线体是否超负荷
录入完公式,我们在分析表中录入公式汇总排程表中各线体的负荷
=SUMIFS('09 T+7 排程'!K:K,'09 T+7 排程'!M:M,A2)

可以看出,8线和10线明显超了,而1线和3线及6线明显少了,所以返回排程,重新分配,此时我们再用函数匹配第2优先线体,我们先筛选8线,把超负荷的工时删除了

同理,也把9线,10线,2线超负荷的删除.,然后分别匹配第2、第3、第4优先级,最终在考虑平衡约束的条件下,把工时平均分配到各个线体;

03 开始排程
已经是最优线体后,我们需要考虑约束最为重要的就是交期,所以按交期排序,同时同个线体的尽量同类型的一起装配,在考虑物料齐套,换线约束等情况下排出各线体的订单顺序;

确定开工日期和和开工时间,我们就可以设计公式了

4. 开工日期:
录入公式: =IF(P2<>P1,$V$1,R1) 下拉填充 这个好好理解一下,这是一维排程的重点函数

5.完工日期:
录入公式:=[@开工时间]+[@转成天]
6. 一维转二维排程

接上文,已经把排程根据标准PPH转成一维排程,同时也通过数据透视表把相应的二维排程。只是上文排程中没有考虑切换时间,也没有考虑宽放时间,也没有考虑人员对效率的影响,我们需要把这些约束一起加上去。
01 加上切换时间
切换的定义为产品品号有切换的时候需要预留半小时的切换时间,所以我们需要写一个公式自动判断是否有切换。

上图中标记红框处表示切换了,我们录入公式:
=IF(D2<>D3,1/24,0)
公式释义:当与下方的型号作对比时,不一样时,返回1小时。其中1/24 代表1小时,因为1代表1天,除24就是1小时;
然后在边上的完工时间上加上这时间:
=[@开工时间]+[@转成天]+[@切换时间]
02 宽放时间
实际排程中,为了确保评审交期的准确,也为了预留一些意外产能,可以加上一些宽放时间。这样的话可以应对产量延期:举例说明:

增加了这个宽放时间后,同时在完工时间也需要把这个时间加上
03 快速调整
刚刚是在1张页表的排程,相当于把几十条线放在一页,这样的话,排的天数越多,行数越多,信息量非常大,有时候可以想办法把线体分开的排程设计。这时候我们可以用一个函数 FILTER 可以快速筛选结果;
操作步骤:
新线一个页面:命名为 “12 组装1线”,同时把 "09 T+7 排程"的标题复制过来。再录入以下函数,就可以把组装01线快速放到一张新页中;
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装01#线")

同理我们可以复制公式把2、3、线分别建立对应的排程报表;
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装02#线")
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装03#线")
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装01#线")
……
这几张表都是自动生成的,我们需要调整的时候只需要在 09 T+7 排程 调整就可以了;

04 插入目录
当工作表比较多的时候,我们需要插入目录来实现,我们可以通过:
表格目录→生成目录→新建一个页面→创建自动目录

并对每一个模块做说明:
01 订单池 :计划员工作订单主表,订单池总表
02 复制生产订单 : 每日复制ERP生产单
03 已结案 : 结案归档处
04 销售订单明细 : 每日复制销售订单
05 订单时间分析 : 自动报表
06 数量分析 : 自动报表
07 标准工时 : 工程提供,有变动时需要更新
08 对应线体 :排程数据库,颗粒度到品号
09 T+7 排程 :核心排程;
10 负荷分析 : 自动报表
11 透视转二维 :自动报表
12 组装1线 : 自动报表
13 组装2线 : 自动报表
……
完成后的效果如下:






好了,这就是排程报表的全部内容。
01 定义
集权式安排:生产计划人员把相应的生产任务排到具体的每个点。颗粒度到具体到设备、具体到机台;生产的管理人员只需要按计划做执行了;
分权式安排:生产计划人员把排程排到各车间对应的管理人员,由对应的管理人员再进行二次分解,根据相关的图纸、工艺安排在每台机器、设备上面;
02 优点
集权式安排:因集权式安排已经到具体的机台设备,所以这样的模式下,对于订单的各工序控制点都能够控制到,生产是一个执行部门。集权式下的安排可以多部门协调,而不是站在某一个独立的车间来看,而是看整体效率;
集权式安排下会对在手订单和预测订单一起进行产能负荷协调,根据价值流分析,做出符合公司经营的最佳生产平衡点;
分权式安排:分权式的安排只到生产管理的班组,由班组进行排程,对排程人员的要求相对低,不需要生产计划具备专业的工艺知识,只需要以拉动式倒排即可;
03 缺点
集权式安排:因集权式安排的精度相当高,所以对生产计划排程人员需要能力相对比较高:
- 丰富的实际现场经验
- 现场管理与计划能力
- 对制程工艺的熟悉,对模具的熟悉,对设备的熟悉;
- 熟悉机器负荷、操作工分布、线平衡;
- 对价值流分析有一定的基础,通过分析可以推出并单原则、拆单原则,也就是最小上机量;
如果以上不熟悉的话,排程出来的生产计划,生产相关的管理人员是无法执行的;
分权式安排:分权式安排是由生产管理人员进行排程,由于每个工序都是班组长或车间主任决定,各组长、各车间彼此之间缺乏必要的协调。各制程对应的工序很有可能是,上工序做了下工序不需要的半成品,下工序需要的,上工序又没有;
车间的班组长的计算机水平以及ERP逻辑水平相对比较弱弱,在具体到机台设备的排程中的排程负荷量预计只有1天到3天,超过3天以上的全工序零件的整合平衡计划是排程不出来的;
04 工作内容
集权式安排: 根据订单需求排程出对应的全制程工序计划;
输出报表:
- 《组装成品生产计划》:在手订单全部排程,按组装标准工时拉动式分解,需要30天就排程30天,需要60天就排程60天
- 《组装成品T+7天计划》在长线计划中分解出来的7天具体计划;
- 《组装成品日计划》按7天计划分解的具体日计划;
- 《设备负荷预警表》
-
《人员负荷预警表》
上面排程组装计划的约束条件需要综合考虑各制程的约束,特别是瓶颈资源;
对应组装的零件假定有注塑件、五金件、印刷件、缝制件;对应的输出报表需要与成品计划一致;以注塑件为例:
- 《注塑机台对应的长线计划》《T+7天》计划 《日计划》
- 《注塑模具对应月度最大产能报表》
- 《注塑模具切换时间明细报表》
输入报表:
上面需要输出报表需要对应各职能部门提供相关报表,计划才能输出对应的排程表,举例说明:
- 《标准工时报表》
- 《模具明细表》
- 《设备明细表》
- 《人员明细表》
- 《瓶颈工艺定义表》
-
……
分权式安排: 分权式安排只需要按交期倒排到具体的时间,然后转各对应的装配车间、注塑车间、CNC车间,由车间分解,一般情况下,车间分解都是具体的1到2天的排程,每天的的工作内容就是处理急单。;
05 总结
最后用一张表来看下,由你们决定什么模式;
名称 | 集权式 | 分权式 |
定义 | 计划排到机台 | 计划排到班组 |
优点 | 有效控制、全局协调、综合平衡 | 推行简单,对生产计划人员工艺技能要求低 |
缺点 | 推行复杂,人员要求高,基础数据要健全 | 各工序制程孤岛、协调困难、库存难以控制 |
工作内容 | 排出全部订单(在手+预测)的对应线体、机台、人员的计划 | 排程到班组,班组按天排程 |
目前的我了解的企业大部分是分权式的,这样的模式的特点是排程人员为跟单,生产人员是计划,因为生产人员的强项是在生产,所以计划一般不是很强,造成异常多,库存高,工序之间经常发生,我要你没有,我不要的你生产一大堆……。
我建议,最后还是向集权式计划推进,相关部门把基础数据完善与健全;
关于生产计划排程经验总结:
-
图例:一维排程

-
图例:二维排程

-
主计划:
-
S&OP计划:销售与运营计划

-
信息更新方便 数据更新可以多表更新,如更新库存信息,更新采购信息,更新入库信息,数据分析也能够自动同步到PPT。 -
数据分析快速 数据可以根据设计的科目,快速按产品别、型号别、日期别、数据别不同维度分析; -
排程转换方便 排程可以实现一维排程快速的转成二维排程,也可以从二维排程转换成一维排程,可以从月计划转成周计划,也可以周计划转成三日计划以及日计划; -
排程调整方便 排程可以快速换线、可以快速的调整顺序,可以快速按标准工时排程; -
公式简单高效 为了减少学习成本,尽量不用VBA,尽量不用数组函数;

01 信息更新方便
PMC在工作中需要更新的信息比较多,基本上都是围绕着资源来管理的,这些资源对应的信息如何快速更新到排程表,是这个模块重点考虑的事情。以下的资源信息将整合到排程表中作为约束条件之一;
-
订单信息:以业务下达的销售订单为准;ERP系统中导出未结案销售订单明细
- 工单信息:销售订单转成的自制生产任务;对应ERP中的生产任务明细表;
- 采购信息:采购订单明细表
- 库存信息:成品库存及原料库存;现存量明细表;
- 生产日报:一般指Excel上报的生产信息,因为账务的滞后性,有些工厂以Excel日报最为准确和快速。特别是没有上MES前,Excel的日报非常重要;
02 开始设计
明确目标和方向,开始动手,打开一个Excel工作簿,按F12,另存为指定的文件夹,同时命名为:生产排程表1.0; 在第1面Sheet页面,对此页重命名为:01 订单池;
订单池 页面说明:
定义:以ERP系统中未结案的生产任务为基准建立
更新频率:每天
导出全部未结案的生产任务明细表,如下图所示:

注意上图中标记框框处,这里是有问题的地方,这也是大部分ERP的的导出初始问题;
- 导出的格式为兼容模式,后缀为*.xls; 兼容模式一般情况文件比较大,打开速度慢,
-
工单日期为文本,不能按月筛选,具体看下图
- 同时数量也是文本,不能求和;

所以导出来的数据最好是打开后,直接复制数值过来,再用公式转换一下就可以了;
我们在订单排程表中,新建一个页面:命名为:02 复制生产订单,再把导出的数据复制→粘贴数值到这个表上,这样就把问题1解决,直接转成高版本了,因为订单排程表就是*.xlsx;

文本型日期问题的解决思路:用日期函数转换
- DATE(year,month,day) 根据指定的年份、月份和具体日期返回表示特定日期的连续序列号
- YEAR(serial_number) 返回某日期对应的年份
- MONTH(serial_number) 返回某日期对应的月份,用整数 1 到 12 表示
-
DAY(serial_number) 返回以序列号表示的某日期的天数,用整数 1 到 31 表示

对于问题2:我们这个页面的边上把原数据的标题复制到边上,然后在下方录入公式:就解决了问题2,下拉填充实现动态引用,
,

对于问题3:文本型数值,只需要对其减负运算就可以变成数值,录入--D2,向右填充→向下填充

最后一步,选中全部数据,按下Ctrl+T 转换成超级表

并对标题进行颜色填充和窗口冻结
- 灰色代表复制数据,从其它地方复制过来的
-
黄色代表公式数据,设置好了原则上不变了

完成这一步后,把填充颜色为黄色的数据复制到订单排程表的表1
选中数据→Ctrl+C→切换到表1的01订单池A1→选择性粘贴→粘贴列宽→粘贴数值→粘贴格式→选中数据→Ctrl+T→转成超级表→设置格式

完成后如上图所示;
这个设计思路的大纲如下,古哥希望能够慢慢的更新,争取能逻辑以及Excel技术一次性讲明白,为了不跑题,还是把设计大纲置顶;

订单池已经通过生产任务未结案明细中的任务创建好了,接下来就是要更新了,我们昨天的日期是昨日的生产任务未结案明细,今天如果再导出未结案明细就是今天的生产任务,为了好理解,我们定义今天为T天,其中T为Today的首字母; 昨天为T-1天;
更新的原则如下:
-
T天的未结案工单明细与T-1天的明细进行VLOOKUP函数匹配,如果匹配不到的就是新增的
- T-1天未结案工单与T天对比,匹配不到的,就是工单已经结案
- T-1天入库数量与T天的进行匹配,更新T天的入库记录;
接下来,回到报表中,我们把T天的未结案工单复制到“02 复制生产订单”,这里注意,一定是粘贴数值,因为是超级表的原因,只要粘贴数值可以自动更新格式的;

注意上方标记处,这是新增加的,我们写一个匹配公式
=XLOOKUP([@制令单号3],表1[[#全部],[制令单号3]],表1[[#全部],[未完工量7]],"新增加")
函数释义:
-
通过制令单号去表1找制令单号对应的未完工数量,找不到返回新增加


我们只需要复制公式区中数值就可以了

粘贴到表1就可以自动填充公式
接下更新表1中结案数量以及完工数量;
录入公式:
=XLOOKUP([@制令单号3],表2[[#全部],[制令单号]],表2[[#全部],[已缴库量]],"已结案")

我们把已结案的生产任务复制到一个新建一张表3,命名为 03 已结案,同时把表1的已结案订单复制到这里后,再把表1的已经结案的删除

复制的最快速方法:
-
全选Ctrl+A→切换到表3→Ctrl+Alt+V选择性粘贴→粘贴列宽→粘贴数值→Ctrl+T转换成超级表;
接下来就要更新缴库数据
在表1的数据已经缴库的数据在录入引用公式
下拉填充公式得到下图,这样就完成订单池的新增加,更新入库数量了。

更新完成后的数量,表1与表2的数量应该是完全一致的。也就是T的未结案工单的订单数量,缴库数量都是和T-1天的一致;
当然有同学会问,为什么要这样复杂的更新,不能更新用这张表做订单池吗?这个问题问得好,如果直接用这张表的话,原来在表1更新的一些订单备注信息就无法一一对应了,相当于每次都覆盖式更新;
更新完后,我筛选未完工为0的订单还有很多,为什么不直接转到结案处呢?

这里就是涉及到结案与完工的定义了
-
完工,系统判断产品已经完工,从财务的角度来说,成本还没有核销;
- 结案,系统判断财务已经核销完了,相当于领料完成,入库完成,成本也没有太大差异;有些工单虽然完工了,但是结案不了,可能成本超了,如超领太多,或者成本少了,有料没有发完等等;
开始设计第二个模块,就是如何设计排程表可以数据快速分析;

根据前文,我们已经把工单明细表转成订单池的设计完成。每天只需要把未结案的生产任务更新到订单池中就可以了,有了订单就可以排程了吗?什么都考虑的情况下,是可以的。但是排程不是简单的按某一个单一的约束条件来排程的,排程前我们需要准备一些数据,方便我们快速在排程中做出决策;
01 订单交期:
每个工单都会对应一个需求,占比最大的是销售订单需求,除了销售订单的需求,也有一些其它的需求而产生的工单,如返工,样品,等,就成品级的工单的话,一般都是销售需求单号和工单的需求号一一对应的;需要注意的就是一个订单需求号可以对应多工单,工单号就是唯一的号;这个订单交期是业务也是客户的第一交期;对应的KIP绩效就是客户订单准时交付率;这个指标根据内销和行业平均值,一般90%-95%;
02 评审交期:
对于客户的日期,是需要经过评审回复交期的,如果能够满足,订单交期就是评审交期;不能满足就是需要经过主计划排程后评估后得出的交期,这就是评审的交期,对应的KIP绩效指标就是订单一次评审准时交付率:这个指标需要和订单周期指标对应起来,不然评审只需要把客户的交期评审的宽放放进去,很容易做到100%;所以需要加上订单周期指标,订单周期指标根据公司的战略来定,从20天到40天不等;原则上订单一次评审的准时交付率需要95%到100%之间,同时订单周期指标小于30天;
03 资料确认;
对于家电行业来说,印刷品相关的一些配置订单的资料确认的及时非常重要,这个也需要加到订单池中,对应KPI绩效就是资料提供的准时率,这个指标需要主计划统计收集业务部门的配置资料是否按时提供;常见的家电配置资料有:
- 印刷品相关:彩盒、外箱、贴纸、说明书等;
- 外观相关:外观颜色、丝印位置;
- 配件相关:是做简版还是高配版本等;
04 工单信息;
工单的状态、工单领料情况、工单的齐套情况,可以说工单的信息对于主计划来说非常重要,所以在排程中要特别注意工单管理,特别是工单的“资源”情况,相关对应的KPI绩效有:
- 工单准时结案率;成品工单的结案周期一般为30天
- 工单一次齐套率;T+1天,100%;T+2天 80%, T+3 天 70%;
- 工单准时领料率;上线前全部完成领料;
05 其它信息
排程中如果ERP的一些信息不方便分析,主计划需要思考自己创建一些科目来分析,如按产品一级分类、二级分类,按产品的性能的一级分类、二级分类,分类的越详细,对排程的决策越有用;
如:产品大类小家电:一级分类:电饭煲、二级分类:按外观有:方煲、圆煲;按功能有:电子式;机械式;按客户分:内销、外销;按功率分:大功率、小功率;按销售渠道分:线上、线下;等等;
06 开始设计
铺垫了这样多,我们开始设计,01到03的大部分信息都是在销售订单里面,所以我们需要导出销售订单明细表,这里导出的表还是兼容模式,我们还是把它转成高版本的格式,同时转成超级表,命名为:“04 销售订单明细”

为了方便大家记忆,我们现在已经创建了4个超级表了,按一下Ctrl+F3,就可以看见了

我们为了快速排程,我们把订单的信息可以快速的引用到订单池中,方便我们做数据分析,注意表1订单池的顺序保持不变,统计按下单日期升序排序;都是未结案的;在引用销售订单号的时候,我们发现ERP系统这边没有带出对应工单号;所以这里没办法直接引用;
还有就是在引用销售订单号的时候我们发现无法一一对应,因一个销售订单号有多个项次,我们如果只匹配销售订单号的时候,就会工单对应的销售需求号就会一对多了;
以上两个问题我们的解决方案是,统计叫信息化部门加上去,有时候信息化部门办事效率太低,我们思考如何用Excel快速引用;

通过观察发现,只需要把品号和下单数量两个条件一起判断,就大概率可以找到销售订单号;录入公式=[@品号]&[@受订数量]

然后在表1订单池录入公式:
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[销售订单号]],"找不到")
这里用XLOOKUP,不用VLOOKUP的原因,是因为VLOOKUP不支持向左引用,只支持向右引用,出现错误找不到还需要额外写公式;

录入完成后,我们发现有些找不到的需要人工排查一下,是什么原因,是挪单了还是结案了?

引用完销售订单号,我们发现一个销售单号会对应多个订单号,我们还要让工单实现单单对应,就是保证一个工单对应 一个销售需求号,我们再把公式做一个变形;
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[销售订单号]],"找不到")&"-"&XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[项次]],"找不到")
公式看起来很长,其实非常好理解,就是再次引用一个项次号,用文本连接符号把它们串联起来,完成后的效果如下:

当订单池带上项次号后,就实现了一一对应,也就是单单对应了;
根据前文,我们在订单中,已经把销售订单号匹配过来了,现在需要快速分析,就需要创建一些字段,如时间、型号等这也是分析中常见的一种手段;
我们把销售订单中的预交期、客户、业务员引用过来,方便排程时候快速索引;
分别录入公式:
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[预交日期]],"找不到")
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[客户简称]],"找不到")
=XLOOKUP([@品号4]&[@数量5],表4[[#全部],[辅助列品号+数量]],表4[[#全部],[业务员]],"找不到")
注意这几个公式基本都一样,只需要更改XLOOKUP的返回参数的名称:如把客户简称替换成业务员就可以了
因为定义了名称表,所以公式显示的都是中文名称,这样的好处是,方便解释公式定义;

有了这些字段,我们就可以通过数据透视表快速转成我需要分析的数据了;
01 时间别分析;
按接单时间分析,各个时间段的接单情况,同时看预交期的时间分布,看一下是否平衡;
依次点表设计→透视表→插入透视表;这里看到引用范围就是表1,定义好的名称,这样的好处就是可以动态引用,当数据有增加的时候,不需要再次更新数据引用范围了;

这里可以按客户维度分析:

数据透视表非常简单,简单地把格式拖拽到对应的透视表字段中,就可以实现不同维度的分析;

当然也可以按品号的角度分析:

02 数量分析;
这是分析订单数量的结构,例如大订单占比多少?小订单占比多少等;
我们新建一个透视表,命名为 06 数量分析;
操作步骤:把数量最先拖拽到行字段列表,如下图所示

然后依次点数据透视表分析→分组选择→在弹出的对话框中起始录入0→终止于录入5000→步长1000
简单理解就是按1000一个维度分析,超过5000以上就不详细分析了

按下确认可以看到,基本上都集中在0到2000的数量范围下单;大订单比较少;

换成500的范围 后分析 如下图:

分析这些数量的目的就是为了看订单结构对排程的影响;举例说明:如果某个时间段全部是小订单,排程的压力就会很大,很可能切换就会非常多;如果某个时间段大订单较多,相对来说会好一点,无论切换还是生产效率都相对好掌握;
同时也分析哪些客户经常下小单,产值不高,要求又高,这样的客户是不是要排在优先级最高?也是作为在销大于产的时候,排产逻辑的一个依据;
03 展开分析;
知道了字段对于排程的重要性,我们可以通过数据透视不同的组合方式,分析出很多结果,注意没有字段就自己创建字段;
按业务与客户组合数量分析;

按业务与客户组合数量分析再加上日期维度分析;

按客户加上数量分析,计算出每单订单的平均数量;

排程中需要考虑的约束条件比较多,是否专线等,然后根据效率最优原则,一级一级筛选,直到综合效率最高。
01 判断是否专线
我们在排程表中增加一列,可生产线体,录入公式下拉:
=VLOOKUP([@品号],'08 对应线体'!A:B,2,0)

这一步的目的是筛选专用线体,只能专线生产。,筛选数字1的,录入公式
=VLOOKUP([@品号],'08 对应线体'!A:C,3,0)

上图中代表为专线生产,我们再筛选空白,执行同样的操作。再匹配一次;
02 判断线体是否超负荷
录入完公式,我们在分析表中录入公式汇总排程表中各线体的负荷
=SUMIFS('09 T+7 排程'!K:K,'09 T+7 排程'!M:M,A2)

可以看出,8线和10线明显超了,而1线和3线及6线明显少了,所以返回排程,重新分配,此时我们再用函数匹配第2优先线体,我们先筛选8线,把超负荷的工时删除了

同理,也把9线,10线,2线超负荷的删除.,然后分别匹配第2、第3、第4优先级,最终在考虑平衡约束的条件下,把工时平均分配到各个线体;

03 开始排程
已经是最优线体后,我们需要考虑约束最为重要的就是交期,所以按交期排序,同时同个线体的尽量同类型的一起装配,在考虑物料齐套,换线约束等情况下排出各线体的订单顺序;

确定开工日期和和开工时间,我们就可以设计公式了
-
确定日产能
录入公式:=[@未完工量]/[@线体人数]*[@PPH]*10
-
转换成天:
录入公式:=[@未完工量]/[@日产能] 转成天是为了时间加减 - 录入开工日期

4. 开工日期:
录入公式: =IF(P2<>P1,$V$1,R1) 下拉填充 这个好好理解一下,这是一维排程的重点函数

5.完工日期:
录入公式:=[@开工时间]+[@转成天]
6. 一维转二维排程

接上文,已经把排程根据标准PPH转成一维排程,同时也通过数据透视表把相应的二维排程。只是上文排程中没有考虑切换时间,也没有考虑宽放时间,也没有考虑人员对效率的影响,我们需要把这些约束一起加上去。
01 加上切换时间
切换的定义为产品品号有切换的时候需要预留半小时的切换时间,所以我们需要写一个公式自动判断是否有切换。

上图中标记红框处表示切换了,我们录入公式:
=IF(D2<>D3,1/24,0)
公式释义:当与下方的型号作对比时,不一样时,返回1小时。其中1/24 代表1小时,因为1代表1天,除24就是1小时;
然后在边上的完工时间上加上这时间:
=[@开工时间]+[@转成天]+[@切换时间]
02 宽放时间
实际排程中,为了确保评审交期的准确,也为了预留一些意外产能,可以加上一些宽放时间。这样的话可以应对产量延期:举例说明:
- 紧急订单和临时插单造成的;
- 制造效率不达标造成的
- 品质工艺异常造成的
- 物料欠料造成的
-
其它异常造成的

增加了这个宽放时间后,同时在完工时间也需要把这个时间加上
03 快速调整
刚刚是在1张页表的排程,相当于把几十条线放在一页,这样的话,排的天数越多,行数越多,信息量非常大,有时候可以想办法把线体分开的排程设计。这时候我们可以用一个函数 FILTER 可以快速筛选结果;
操作步骤:
新线一个页面:命名为 “12 组装1线”,同时把 "09 T+7 排程"的标题复制过来。再录入以下函数,就可以把组装01线快速放到一张新页中;
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装01#线")

同理我们可以复制公式把2、3、线分别建立对应的排程报表;
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装02#线")
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装03#线")
A2=FILTER(表9[[制令单号]:[宽放时间]],表9[线体]="组装01#线")
……
这几张表都是自动生成的,我们需要调整的时候只需要在 09 T+7 排程 调整就可以了;

04 插入目录
当工作表比较多的时候,我们需要插入目录来实现,我们可以通过:
表格目录→生成目录→新建一个页面→创建自动目录

并对每一个模块做说明:
01 订单池 :计划员工作订单主表,订单池总表
02 复制生产订单 : 每日复制ERP生产单
03 已结案 : 结案归档处
04 销售订单明细 : 每日复制销售订单
05 订单时间分析 : 自动报表
06 数量分析 : 自动报表
07 标准工时 : 工程提供,有变动时需要更新
08 对应线体 :排程数据库,颗粒度到品号
09 T+7 排程 :核心排程;
10 负荷分析 : 自动报表
11 透视转二维 :自动报表
12 组装1线 : 自动报表
13 组装2线 : 自动报表
……
完成后的效果如下:






好了,这就是排程报表的全部内容。