基于SAP ECC平台实现可配置成品的生产计划和生产排序
2012-08-08朱羽冰
朱羽冰
(中国惠普有限公司,上海 201101)
SAP ERP核心组件 ECC(Enterprise Central Component)实现了MRP和能力需求计划的功能。MRP是基于无限产能的假设,根据产成品的需求日期和它的多层BOM(Bill of Material)计算出原料和半成品的需求计划。能力需求计划是针对关键工位基于产能的订单工时消耗来进行负荷均衡,再运用提前期推导得到生产计划。它在固定成品生产、订单量少、生产计划简单的情况下可以有效地应用,但是针对可配置成品、订单量多的情况下是无法实现基本的计划排产功能。这类行业包含了汽车、钢铁、造纸、高科技、电机等。
虽然SAP已经提供了供应链管理——生产计划和精细排程(SCM-PPDS)的产品,但是该产品的使用需要在软硬件和实施维护上投入很大的开支。有的企业采用本行业特定的生产执行和计划系统,但系统间的集成、软硬件和实施费用上的大投入也是不可避免的。而采用基于SAP ECC平台的自开发解决方案是一种低成本和有效的选择。本文基于过去多个项目的应用实例,提炼出一些共有的原理和特征,介绍针对可配置成品、大量生产订单的主生产计划和排序的开发方法。
1 流程架构
1.1 SAP ECC的生产计划和能力需求计划功能
SAP ECC的主生产计划(MPS)是针对产成品和主要半成品的物料需求计划(MRP),MPS则根据需求实际的客户订单和预测订单产生计划订单或生产订单。订单根据工艺路线或网络产生提前期计划。该计划根据客户需求的交货日期得到订单的需求完成时间,考虑各工序的准备时间、加工时间、工序间的等待时间、传送时间、排队时间和各种缓冲时间,最后计算出各订单的详细进度计划,同时也产生了各工序的能力负荷需求。
MPS结束后,SAP ECC的能力需求计划根据计划工序负荷均衡的原则编制生产排序计划,通过调整生产日期分派生产订单和计划订单[1]。由于MRP和CRP(Capacity Requiemal Planning)是两个独立的步骤,所以 ECC的能力需求计划无法考虑零部件的可用性约束[1]。同时能力需求计划也无法考虑生产线的平衡,如不同种类的产品需要交叉生产、有些产品需要合并生产、一类产品的某个特征在生产中需要逐步过渡增减等。SAP ECC的能力需求计划有两种类型的计划表输出交互:表格式的计划表和图形式的计划表[1]。虽然这两种格式的输出内容均可以通过增强开发来增加特定的内容,但是如果订单数量很多,该两种输出格式几乎无法使用。所以SAP ECC的能力需求计划在订单量少、工艺较简单、成品种类不多的情况下可以有效应用,但是针对订单量较多、工艺复杂和成品配置复杂的情况下是无法使用的。实际情况是很多企业把大量的生产订单导出来在EXCEL内进行主生产计划的安排。
SAP ECC标准计划流程如图1所示。
图1 SAP ECC标准计划流程
1.2 自开发的主生产计划和排序的工具
生产计划和排序工具即是辅助计划员编制主生产计划。它可以分成两个核心程序:一个是基于产能和特定约束条件把生产订单按顺序打散到天;另一个是尽可能基于所见即所得原则,协助计划员调整主生产计划的工具。
MPS是基于无限产能的标准MRP逻辑。因为客户需求日期经常集中在某些天,所以经过提前期计划产生的生产订单也都会集中在某些天。
程序需要定义一个完整的结构代表程序内处理的每个被计划的对象单元。该结构以生产订单或计划订单为主体,包含所有其他和主生产计划相关的信息。例如,可配置成品的主生产计划相关的特性、产线的选择、零部件的可用性状况、计划的结果等。按天打散程序根据每天维护的实际产能,综合考虑需求交货日期、零件和总成的可用确认日期、订单冻结原则、特性的约束条件、产线、订单优先级,把未排序的生产订单按天排序。规则尽可能简单实用、没有冲突,同时需要考虑主生产计划员和物料计划员的协同。本程序通常在后台运行,需要有完善的日志输出。
生产计划员使用辅助计划排序工具可以方便地查找生产计划相关的信息,根据具体情况安排生产。计划员的排序结果又影响其后的按天打散结果。主生产计划的结果通常是确定生产订单的开始日期。这两个程序都会调用SAP标准功能以执行提前期计划,决定各工序生产时间。
完成了主生产计划后,运行所有物料的MRP,产生自制件的生产计划和采购件的需求计划。同时可将产成品和主要中间件的排序信息通知供应商作为排序直送或经中转中心排序直送工位的依据。
本文推荐的生产计划模型如图2所示。
图2 推荐的生产计划模型
2 程序实现
2.1 配置产品
可配置产品是一些离散行业描述复杂产成品的方法,它可以灵活地确定产成品特征、总成件的规范等,具体应用于销售、定价、生产、工艺、计划等各业务范围。如整车的发动机类型、颜色、内饰、变速箱、轮胎、仪表盘等,又如钢板的牌号、宽度、厚度、表面精度、保淬透性等。主生产计划如果需要基于一定的约束关系,它的数据源通常就是每个订单的配置特性,甚至个别特性就是为了主生产计划。有些特性值虽然不直接用于订单打散,但是与生产计划密切相关,计划员制定计划时需要参考评估。
特征显示参数文件定义哪些特性可以在SAP标准的生产订单显示/创建/修改的快速录入屏幕中显示,SAP的配置菜单路径为生产→商店底价控制→主数据→订单→产品订单中快速输入特征→定义特征显示的应用程序组/定义概览屏幕的特征显示。不同的参数文件可以有不同的用途,本文定义的参数文件包含需要在生产计划和排序工具中使用的所有特性。这样使订单和排产工具的数据选择与显示一致。
程序根据生产订单中的配置对象字段INT_OBJ_NO,通过函数CUCB_GET_CONFIGURATION读取所有特征的值,然后读取出该参数文件中指定特性的特征值和值描述并赋值给计划对象内表。
2.2 排产规则
排产规则是基于特性值的约束关系。以汽车行业为例,业务上会考虑下列约束:(1)块:如要求在订单序列中黑色的车必须至少3辆一块;(2)数量:如要求在某一天生产大型车不多于10辆;(3)间距:如要求每两辆白色的车之间至少隔开5辆其他颜色的车;(4)比例排序:A类车和B类车之间的比例在一定范围内;(5)N/M:如要求订单序列中每连续10辆车中至多有6辆是白色的;(6)均匀间隔:如要求在订单序列中白色的车是均匀散布的。
理论上这些规则都是可以实现的,但是基于开发难度和稳定性考虑,规则应尽可能简单实用。实际上往往1~2个规则就够用了。这些排产规则和需求交货日期、零件和总成的可用确认日期、订单冻结原则、优先级等规则需要合并考虑。规则分成两类:强制性的和非强制性的。先考虑的强制性规则决定了哪些订单可以参与当日排产,然后是逐一执行非强制性的规则,晚执行的非强制性规则优先级更高。
2.3 产能定义
产能定义大致有两种方案:方案一是将可用产能维护在计划工序工作中心的主数据中,使用该工作中心的生产订单产生对于该工作中心的产能需求。可用产能和订单的产能需求均可以通过SAP的标准函数CR_CAPACITY_AVAILABLE_PERIODS读取。每天的可用产能按照用户的维护值可以不一样。本方案与SAP能力需求计划功能可以集成,但是由于SAP ECC只能支持一种工厂日历,同时产能最后只能折算成时间,在有些案例中会有缺陷。方案二是自定义开发,开发工作量并不大,但效果很好。按天打散就是按照100%的产能利用率逐天分配生产订单,如果某一天的需求负荷超出了产能,就将生产订单后移;如果某一天的需求负荷低于产能,就将后面的生产订单前移。
2.4 产线定义
如果不同的产成品有不同的产线约束要求,需要定义配置表,即在配置表内每个产成品或者具有相同特性值的产成品有一个唯一的缺省产线。生产订单的扩充字段增强包含缺省产线和计划员手工指定的产线,手工指定的产线具有更高的优先级。计划员通过辅助计划排序工具或者生产订单修改程序手工调整产线。这样的实现方式比较简单。如果确实有产品需要多产线组织生产,其配置表内定义的是允许产线集。这样产线的分配就按照排产约束规则的类似方式实现,但一般会增加程序复杂度和影响约束规则的选用数量。
2.5 物料可用性检查及确认和冻结期
每个生产订单的零部件、原材料或总成件是否能满足按照订单生产时间的需求来供货,这是生产计划的一个非常关键的约束条件。每个零部件、原材料或自制件都有一个最长补货时间的概念,即从需求确认订单下达到收到货物的通常时间。SAP标准逻辑是通过计划运输时间、收货时间、生产时间计算而得到。有的案例就采用标准逻辑,而有的案例采用自定义字段。因为用户希望采用考虑了安全库存和供应商加速送货的因素后更短的类似最长补货时间。每个订单通过BOM展开,就得到所有零部件或自制件的类似最长补货时间,其中最长的补货时间加上需求产生日期可以理解为该订单的采购确认日期。这个概念和基于产成品的冻结期概念是一样的,但是它实现了可配置成品基于不同的配置有不同的组件,然后就会有不同的冻结期。生产订单的开始日期必须在冻结期之外。
物料可用性检查并不需要考虑所有的物料(尤其是BOM组件很多的情况),所以只需要维护重点物料的类似最长补货时间。通常每个物料计划员负责自己管理的物料供应,假定把物料计划员分成8组,每组计划员有自己认为需要特别关注的零部件或原材料,这些信息可以维护在一张数据库表中或物料主数据中。这样当某生产订单第一次被打散程序执行时,可根据该订单所使用的零部件对应找到它们的组号或者没有组号。有组号的零部件计算出每组的补货最长时间,补货最长时间和订单创建日期的和就是该组零部件的理论采购确认时间,8个组中的最大值就是总采购确认时间。这种分成8组的方法正好和实际业务对应起来。每个物料计划员以订单为单位调整自己负责组的采购确认时间,这样就很好地形成了主生产计划和物料供应计划的协同。
2.6 订单计划的固定
按天打散程序执行后,根据每天的产能决定了生产订单的生产日期,根据约束条件决定了先后次序。先后次序可以保存在生产订单增强字段内,或者在节拍式生产模型时可以采用固定节拍递增生产时间。按天打散程序决定的先后次序只是一个建议值,必须由计划员在辅助计划排序工具中手工确定最后的生产次序。
有生产序号的生产订单就是已经固定的订单。以后的按天打散程序不会更改它的生产时间。
2.7 如何记录排产更改历史
生产计划的变更、零部件和自制件的供货情况发生变化都是不可避免的。在生产订单中增加两个长文本字段,其中一个用来记录订单生产日期的变更历史和变更原因,按天打散工具和辅助计划排序工具都会改变生产日期,也就会自动记录变更历史,因此近期的计划变更需要输入变更原因;另外一个用来记录采购确认时间的变更历史和变更原因。辅助计划排序工具和订单维护功能允许输入变更原因,也会自动记录变更历史。自动记录变更历史是为了实现生产计划的可追溯性。
2.8 生产订单的增加
订单中增加的信息需要集成在标准的生产订单维护功能中。通过用户出口PPCO0012在订单中创建自定义屏幕,显示自定义字段。对于每个字段都有相应的权限控制。生产订单的增加字段如表1所示。
表1 生产订单的增加字段
2.9 按天打散工具
本程序根据产能、需求交货日期、采购确认日期、订单优先级以及其他基于特性的约束条件把未排序的生产订单按天排序。计划的重点放在订单执行的次序上而不是理论上的具体执行时间。如果是多班次生产,晚班跨24点的生产则根据业务惯例归属在前一天的生产计划中。
按天打散程序给没有序号的生产订单一个有序的生产时间或者理论序号。生产计划员在辅助计划排序工具中负责给有明确生产时间的订单或有特殊日期需求的订单一个序号,有具体序号的生产订单就是被固定的,在其后的按天打散程序中不改变生产日期。
所有订单的生产日期必须在总采购确认时间之后,虽然这并不能完全取代订单确定生产日期后的物料可用性检查,但这是硬性条件。但生产订单的需求交货日期根据销售订单的客户需求推导出来,排产时尽可能满足,客户要求这是软性指标。生产订单优先级来源于销售订单的优先级,因此可以定义有具体客户的销售订单优先级永远比预测订单的优先级高。
对于满足日期需求的订单,无论原来的生产日期在哪一天,程序都采用一定逻辑进行排序。排序的条件来源于特性值和订单优先级。排序的方法有顺序排序、按比例排序、按特征值合并成组排序等。按比例排序是指某个特性有值 A和 B,比例为 3:1,则排序为 3个 A、1个B穿插起来直至其中一个没有为止。也可实现某天某个特性只能有N个;某个特性的订单 3~4个一组;在一定日期区间内订单的某个特性的值从大到小,同时另外一个特性值尽可能一致。虽然规则可以比较灵活,但是规则应尽可能简单实用。排产过程是从输入日期开始按照工厂日历的工作日期一天一天地往后排产。排产结束后设置生产日期(具体过程见2.11节)。按天打散程序逻辑如图3所示。
2.10 辅助计划排序工具
辅助计划排序工具采用所见即所得的编程思想,协助生产计划员给每个订单指定一个唯一的生产序列号来安排组织生产,协助物料计划员调整订单的分组采购确认时间。
该工具采用ALV编程技术[3],灵活的视窗显示被计划对象结构的所有计划相关信息,如订单顺序号、自定义字段、订单号、物料号、主材号、各种日期、需求信息、订单状态、计划相关特性值、采购确认时间、可用性整体确认日期等。
该工具除了具备ALV的标准功能,如配置个性化的输出内容和格式、针对一列或多列排序、打印功能等外,通常还需要开发如下功能:(1)清空所有的序列号和所选中行的序列号;(2)根据屏幕显示的次序和存在的序列号,从最小号码开始重新依次填充序号;(3)根据所选中行的显示次序和存在的序列号,从最小号码开始重新依次填充序号;(4)交换两张订单的序号;(5)按比例排序;(6)批量修改选中行的序列号、生产日期、分组采购确认时间、待处理标记、产线等;(7)根据当时的订单顺序后推某日开始的末尾N个订单的生产日期;(8)按照计划员指定的单日订单数,根据当时的订单顺序调整生产日期;(9)按照某特性的总量调整生产日期。
这些功能都是ALV的一个个按钮,所以程序是相对独立的。不同的客户也可以开发特殊的功能和逻辑,如基于某个特性或主原料的合并后再调整顺序。
图3 按天打散程序逻辑
所有与日期相关的操作都可能触发待处理标记被标记上,同时冲突标记指出判定的原因类别以方便计划员分析处理。
字段可用性整体确认日期基于SAP针对所有关键零部件的可用性检查的结果,如果客户使用了可用性检查的功能,可用性整体确认日期就是一个很重要的计划参考项。
该程序可以运行在显示模式或修改模式。通过创建权限对象,在程序中对用户进行权限控制和锁机制控制,以实现不同的用户修改相应的字段同时又防止程序互锁。
当修改结果被保存时,根据排产的顺序,设置生产时间,具体设置过程参见2.11节。
2.11 生产时间确定工具
按天打散工具和辅助排序工具执行完成后,订单的生产日期和订单间的次序都已经明确,实践中有两种模式可以确定生产时间:(1)采用后台运行的SAP能力需求计划。其优点是功能相对全面,可以实现基于订单中间工序的时间点向前向后的双向排产。但是由于SAP能力需求计划执行订单分配与解除分配的操作方式不灵活,必须后台运行限制较多;(2)通过调用函数“BAPI_PRODORD_SCHEDULE”对生产订单逐个运行提前期计划,或根据生产结束时间向前排产。
本工具确定的时间原则上不代表实际的生产时间,只代表生产日期和次序,因此也可以把先后次序保存在生产订单增加字段内,而生产时间均是白班开始的时间。在汽车行业等节拍式生产模型中可以采用固定节拍递增生产时间。一天第一个订单的开始时间可以是白班开始时间,后一个订单的开始时间是基于前一个订单的开始时间加上一个系统维护的生产节拍,或者对于非节拍式生产模型,读取前一个订单在该计划工序上由系统计算所得的结束时间作为后一个订单的开始时间。计划工序的工作时间可以在工作中心主数据中通过公式灵活地定义,如工时×工序数量/基本数量/机器数。
在SAP ECC的系统平台下,针对订单量大、可配置成品的生产计划和排序,通过一定的开发和集成SAP的标准功能实现一定的工具辅助生产计划员制定计划、分析和改进生产。订单打散工具按照一定约束条件平衡产线,提供建议生产时间,最后的生产次序由生产计划员检查打散结果后决定。辅助计划排序工具帮助生产计划员决定生产序列、响应零部件供应异常、生产执行异常等。这二个工具互相独立,相互依托。
SAP已经提供了供应链管理(SCM)产品。本文的设计思想也是参照了SAP的生产计划和精细排程模块(SCM-PPDS),目标都是实现基于产能约束 (有限资源计划)的物料和生产计划,能够创建精确地以工厂为单位的生产排产。但是,SAP SCM产品在操作界面、约束条件的灵活配置和扩展、计划方案多样性等方面还是有优势的。而且SAP SCM还有许多其他功能,如:需求管理、供应网络管理、全局可用性检查、矩阵式MRP。但是由于该产品的使用从软硬件和系统实施维护上都需要较大的投入,所以该产品在国内使用并不广泛。相反很多企业采用了基于SAP ECC平台的自开发解决方案。
[1]彭俊松.汽车行业整车订单交付系统—建立需求驱动的汽车供应网络[M].北京:电子工业出版社,2009.
[2]SAP AG.SAP R/3 Enterprise Release 4.70 SR1 Online Help--Production Planning and Control (PP)part.2003.
[3]施权.利用SAP ABAP语言解决客户特制要求的方法[J].计算机工程,2004,30:84-86.
[4]托马斯·H·达文波特.ERP必备指南 [M].宋学军译.北京:机械工业出版社,2003.