朱羽冰
(中國惠普有限公司,上海 201101)
SAP ERP核心組件 ECC(Enterprise Central Component)實現了MRP和能力需求計劃的功能。MRP是基于無限產能的假設,根據產成品的需求日期和它的多層BOM(Bill of Material)計算出原料和半成品的需求計劃。能力需求計劃是針對關鍵工位基于產能的訂單工時消耗來進行負荷均衡,再運用提前期推導得到生產計劃。它在固定成品生產、訂單量少、生產計劃簡單的情況下可以有效地應用,但是針對可配置成品、訂單量多的情況下是無法實現基本的計劃排產功能。這類行業包含了汽車、鋼鐵、造紙、高科技、電機等。
雖然SAP已經提供了供應鏈管理——生產計劃和精細排程(SCM-PPDS)的產品,但是該產品的使用需要在軟硬件和實施維護上投入很大的開支。有的企業采用本行業特定的生產執行和計劃系統,但系統間的集成、軟硬件和實施費用上的大投入也是不可避免的。而采用基于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標準計劃流程
生產計劃和排序工具即是輔助計劃員編制主生產計劃。它可以分成兩個核心程序:一個是基于產能和特定約束條件把生產訂單按順序打散到天;另一個是盡可能基于所見即所得原則,協助計劃員調整主生產計劃的工具。
MPS是基于無限產能的標準MRP邏輯。因為客戶需求日期經常集中在某些天,所以經過提前期計劃產生的生產訂單也都會集中在某些天。
程序需要定義一個完整的結構代表程序內處理的每個被計劃的對象單元。該結構以生產訂單或計劃訂單為主體,包含所有其他和主生產計劃相關的信息。例如,可配置成品的主生產計劃相關的特性、產線的選擇、零部件的可用性狀況、計劃的結果等。按天打散程序根據每天維護的實際產能,綜合考慮需求交貨日期、零件和總成的可用確認日期、訂單凍結原則、特性的約束條件、產線、訂單優先級,把未排序的生產訂單按天排序。規則盡可能簡單實用、沒有沖突,同時需要考慮主生產計劃員和物料計劃員的協同。本程序通常在后臺運行,需要有完善的日志輸出。
生產計劃員使用輔助計劃排序工具可以方便地查找生產計劃相關的信息,根據具體情況安排生產。計劃員的排序結果又影響其后的按天打散結果。主生產計劃的結果通常是確定生產訂單的開始日期。這兩個程序都會調用SAP標準功能以執行提前期計劃,決定各工序生產時間。
完成了主生產計劃后,運行所有物料的MRP,產生自制件的生產計劃和采購件的需求計劃。同時可將產成品和主要中間件的排序信息通知供應商作為排序直送或經中轉中心排序直送工位的依據。
本文推薦的生產計劃模型如圖2所示。

圖2 推薦的生產計劃模型
可配置產品是一些離散行業描述復雜產成品的方法,它可以靈活地確定產成品特征、總成件的規范等,具體應用于銷售、定價、生產、工藝、計劃等各業務范圍。如整車的發動機類型、顏色、內飾、變速箱、輪胎、儀表盤等,又如鋼板的牌號、寬度、厚度、表面精度、保淬透性等。主生產計劃如果需要基于一定的約束關系,它的數據源通常就是每個訂單的配置特性,甚至個別特性就是為了主生產計劃。有些特性值雖然不直接用于訂單打散,但是與生產計劃密切相關,計劃員制定計劃時需要參考評估。
特征顯示參數文件定義哪些特性可以在SAP標準的生產訂單顯示/創建/修改的快速錄入屏幕中顯示,SAP的配置菜單路徑為生產→商店底價控制→主數據→訂單→產品訂單中快速輸入特征→定義特征顯示的應用程序組/定義概覽屏幕的特征顯示。不同的參數文件可以有不同的用途,本文定義的參數文件包含需要在生產計劃和排序工具中使用的所有特性。這樣使訂單和排產工具的數據選擇與顯示一致。
程序根據生產訂單中的配置對象字段INT_OBJ_NO,通過函數CUCB_GET_CONFIGURATION讀取所有特征的值,然后讀取出該參數文件中指定特性的特征值和值描述并賦值給計劃對象內表。
排產規則是基于特性值的約束關系。以汽車行業為例,業務上會考慮下列約束:(1)塊:如要求在訂單序列中黑色的車必須至少3輛一塊;(2)數量:如要求在某一天生產大型車不多于10輛;(3)間距:如要求每兩輛白色的車之間至少隔開5輛其他顏色的車;(4)比例排序:A類車和B類車之間的比例在一定范圍內;(5)N/M:如要求訂單序列中每連續10輛車中至多有6輛是白色的;(6)均勻間隔:如要求在訂單序列中白色的車是均勻散布的。
理論上這些規則都是可以實現的,但是基于開發難度和穩定性考慮,規則應盡可能簡單實用。實際上往往1~2個規則就夠用了。這些排產規則和需求交貨日期、零件和總成的可用確認日期、訂單凍結原則、優先級等規則需要合并考慮。規則分成兩類:強制性的和非強制性的。先考慮的強制性規則決定了哪些訂單可以參與當日排產,然后是逐一執行非強制性的規則,晚執行的非強制性規則優先級更高。
產能定義大致有兩種方案:方案一是將可用產能維護在計劃工序工作中心的主數據中,使用該工作中心的生產訂單產生對于該工作中心的產能需求。可用產能和訂單的產能需求均可以通過SAP的標準函數CR_CAPACITY_AVAILABLE_PERIODS讀取。每天的可用產能按照用戶的維護值可以不一樣。本方案與SAP能力需求計劃功能可以集成,但是由于SAP ECC只能支持一種工廠日歷,同時產能最后只能折算成時間,在有些案例中會有缺陷。方案二是自定義開發,開發工作量并不大,但效果很好。按天打散就是按照100%的產能利用率逐天分配生產訂單,如果某一天的需求負荷超出了產能,就將生產訂單后移;如果某一天的需求負荷低于產能,就將后面的生產訂單前移。
如果不同的產成品有不同的產線約束要求,需要定義配置表,即在配置表內每個產成品或者具有相同特性值的產成品有一個唯一的缺省產線。生產訂單的擴充字段增強包含缺省產線和計劃員手工指定的產線,手工指定的產線具有更高的優先級。計劃員通過輔助計劃排序工具或者生產訂單修改程序手工調整產線。這樣的實現方式比較簡單。如果確實有產品需要多產線組織生產,其配置表內定義的是允許產線集。這樣產線的分配就按照排產約束規則的類似方式實現,但一般會增加程序復雜度和影響約束規則的選用數量。
每個生產訂單的零部件、原材料或總成件是否能滿足按照訂單生產時間的需求來供貨,這是生產計劃的一個非常關鍵的約束條件。每個零部件、原材料或自制件都有一個最長補貨時間的概念,即從需求確認訂單下達到收到貨物的通常時間。SAP標準邏輯是通過計劃運輸時間、收貨時間、生產時間計算而得到。有的案例就采用標準邏輯,而有的案例采用自定義字段。因為用戶希望采用考慮了安全庫存和供應商加速送貨的因素后更短的類似最長補貨時間。每個訂單通過BOM展開,就得到所有零部件或自制件的類似最長補貨時間,其中最長的補貨時間加上需求產生日期可以理解為該訂單的采購確認日期。這個概念和基于產成品的凍結期概念是一樣的,但是它實現了可配置成品基于不同的配置有不同的組件,然后就會有不同的凍結期。生產訂單的開始日期必須在凍結期之外。
物料可用性檢查并不需要考慮所有的物料(尤其是BOM組件很多的情況),所以只需要維護重點物料的類似最長補貨時間。通常每個物料計劃員負責自己管理的物料供應,假定把物料計劃員分成8組,每組計劃員有自己認為需要特別關注的零部件或原材料,這些信息可以維護在一張數據庫表中或物料主數據中。這樣當某生產訂單第一次被打散程序執行時,可根據該訂單所使用的零部件對應找到它們的組號或者沒有組號。有組號的零部件計算出每組的補貨最長時間,補貨最長時間和訂單創建日期的和就是該組零部件的理論采購確認時間,8個組中的最大值就是總采購確認時間。這種分成8組的方法正好和實際業務對應起來。每個物料計劃員以訂單為單位調整自己負責組的采購確認時間,這樣就很好地形成了主生產計劃和物料供應計劃的協同。
按天打散程序執行后,根據每天的產能決定了生產訂單的生產日期,根據約束條件決定了先后次序。先后次序可以保存在生產訂單增強字段內,或者在節拍式生產模型時可以采用固定節拍遞增生產時間。按天打散程序決定的先后次序只是一個建議值,必須由計劃員在輔助計劃排序工具中手工確定最后的生產次序。
有生產序號的生產訂單就是已經固定的訂單。以后的按天打散程序不會更改它的生產時間。
生產計劃的變更、零部件和自制件的供貨情況發生變化都是不可避免的。在生產訂單中增加兩個長文本字段,其中一個用來記錄訂單生產日期的變更歷史和變更原因,按天打散工具和輔助計劃排序工具都會改變生產日期,也就會自動記錄變更歷史,因此近期的計劃變更需要輸入變更原因;另外一個用來記錄采購確認時間的變更歷史和變更原因。輔助計劃排序工具和訂單維護功能允許輸入變更原因,也會自動記錄變更歷史。自動記錄變更歷史是為了實現生產計劃的可追溯性。
訂單中增加的信息需要集成在標準的生產訂單維護功能中。通過用戶出口PPCO0012在訂單中創建自定義屏幕,顯示自定義字段。對于每個字段都有相應的權限控制。生產訂單的增加字段如表1所示。

表1 生產訂單的增加字段
本程序根據產能、需求交貨日期、采購確認日期、訂單優先級以及其他基于特性的約束條件把未排序的生產訂單按天排序。計劃的重點放在訂單執行的次序上而不是理論上的具體執行時間。如果是多班次生產,晚班跨24點的生產則根據業務慣例歸屬在前一天的生產計劃中。
按天打散程序給沒有序號的生產訂單一個有序的生產時間或者理論序號。生產計劃員在輔助計劃排序工具中負責給有明確生產時間的訂單或有特殊日期需求的訂單一個序號,有具體序號的生產訂單就是被固定的,在其后的按天打散程序中不改變生產日期。
所有訂單的生產日期必須在總采購確認時間之后,雖然這并不能完全取代訂單確定生產日期后的物料可用性檢查,但這是硬性條件。但生產訂單的需求交貨日期根據銷售訂單的客戶需求推導出來,排產時盡可能滿足,客戶要求這是軟性指標。生產訂單優先級來源于銷售訂單的優先級,因此可以定義有具體客戶的銷售訂單優先級永遠比預測訂單的優先級高。
對于滿足日期需求的訂單,無論原來的生產日期在哪一天,程序都采用一定邏輯進行排序。排序的條件來源于特性值和訂單優先級。排序的方法有順序排序、按比例排序、按特征值合并成組排序等。按比例排序是指某個特性有值 A和 B,比例為 3:1,則排序為 3個 A、1個B穿插起來直至其中一個沒有為止。也可實現某天某個特性只能有N個;某個特性的訂單 3~4個一組;在一定日期區間內訂單的某個特性的值從大到小,同時另外一個特性值盡可能一致。雖然規則可以比較靈活,但是規則應盡可能簡單實用。排產過程是從輸入日期開始按照工廠日歷的工作日期一天一天地往后排產。排產結束后設置生產日期(具體過程見2.11節)。按天打散程序邏輯如圖3所示。
輔助計劃排序工具采用所見即所得的編程思想,協助生產計劃員給每個訂單指定一個唯一的生產序列號來安排組織生產,協助物料計劃員調整訂單的分組采購確認時間。
該工具采用ALV編程技術[3],靈活的視窗顯示被計劃對象結構的所有計劃相關信息,如訂單順序號、自定義字段、訂單號、物料號、主材號、各種日期、需求信息、訂單狀態、計劃相關特性值、采購確認時間、可用性整體確認日期等。
該工具除了具備ALV的標準功能,如配置個性化的輸出內容和格式、針對一列或多列排序、打印功能等外,通常還需要開發如下功能:(1)清空所有的序列號和所選中行的序列號;(2)根據屏幕顯示的次序和存在的序列號,從最小號碼開始重新依次填充序號;(3)根據所選中行的顯示次序和存在的序列號,從最小號碼開始重新依次填充序號;(4)交換兩張訂單的序號;(5)按比例排序;(6)批量修改選中行的序列號、生產日期、分組采購確認時間、待處理標記、產線等;(7)根據當時的訂單順序后推某日開始的末尾N個訂單的生產日期;(8)按照計劃員指定的單日訂單數,根據當時的訂單順序調整生產日期;(9)按照某特性的總量調整生產日期。
這些功能都是ALV的一個個按鈕,所以程序是相對獨立的。不同的客戶也可以開發特殊的功能和邏輯,如基于某個特性或主原料的合并后再調整順序。

圖3 按天打散程序邏輯
所有與日期相關的操作都可能觸發待處理標記被標記上,同時沖突標記指出判定的原因類別以方便計劃員分析處理。
字段可用性整體確認日期基于SAP針對所有關鍵零部件的可用性檢查的結果,如果客戶使用了可用性檢查的功能,可用性整體確認日期就是一個很重要的計劃參考項。
該程序可以運行在顯示模式或修改模式。通過創建權限對象,在程序中對用戶進行權限控制和鎖機制控制,以實現不同的用戶修改相應的字段同時又防止程序互鎖。
當修改結果被保存時,根據排產的順序,設置生產時間,具體設置過程參見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.