SAP系統的常見訂單狀態如下:
·
CRTD (創建):標識生產訂單剛剛創建,此時禁止做后續發料和報工確認等操作;
·
PREL (部分下達):當生產訂單部分下達時,如僅下達部分工序時出現此狀態;
·
REL (已下達):當生產任務已經明確可下發生產時,將生產訂單轉換為已下達狀態,這個狀態后可以繼續后續業務操作,如打印訂單、發料、報完工等操作;
·
MANC (未檢查物料可用性):生產訂單未進行零部件物料的可用性檢查;
·
SETC (結算規則維護):生產訂單已維護結算規則;
·
MSPT (物料短缺):生產訂單的零部件物料在進行可用性檢查后發現存在短缺;
·
MACM (已承諾的物料):生產訂單的零部件物料在進行可用性檢查后確認完全可用;
·
GMPS (已過帳的貨物移動):生產訂單已經進行過發料;
·
PCNF (部分確認):生產訂單只進行了部分完工確認,比如說訂單需求10個,只進行了5個生產,或者訂單有2道工序,只完成了第一道工序;
·
CNF (已確認) :生產訂單已全部完工確認;
·
PDLV (部分交貨):生產訂單只有部分產品入庫;
·
DLV (交貨) :生產訂單已經完全交貨入庫,這意味着生產訂單業務全部完成。CO看到DLV狀態或TECO狀態時將對訂單進行完工結算。
·
VCAL (差異計算) :生產訂單進行過差異運算;
·
TECO (技術完成) :在生產過程中,會出現訂單未完成但是不再繼續生產的情況,這時就可以打上技術完結標識,此時訂單對零部件的需求同時刪除。在很多項目中,為了簡便處理,會對所有完成的訂單進行技術完結處理(注:不再繼續生產也是一種完成)。CO看到DLV狀態或TECO狀態時將對訂單進行完工結算;
·
RESA (進行結果分析):生產訂單進行過結算;
·
CLSD (關閉):生產訂單做賬務關閉,不允許對訂單發生任何過賬,通常情況下,財務月末對訂單進行結算后,如果確認不會再有追加發料等業務發生,則應該將訂單進行關閉;
·
DLID (刪除) :對生產訂單做刪除標識,數據仍然存在數據庫中,狀態可恢復。如果想徹底刪除,需對訂單進行歸檔處理。
表為:JEST,字段OBJNR為OR+訂單號,STAT即為訂單狀態。但是STAT的都是I打頭的狀態,通過CO03看生產訂單狀態都是如下:
表TJ02:
函數:STATUS_READ。
輸入參數OBJNR也是OR+訂單號,ONLY_ACTIVE即只取出激活的狀態。讀出來后也需要轉換下。STATUS_CHECK是檢查生產訂單狀態,看是否具有某種狀態,STATUS_TEXT_EDIT同STATUS_READ,但似乎不能讀出所有的狀態。
在JEST中,一個生產訂單可能同時存在多個狀態(比如DLV和TECO,TECO可能和其它狀態都會同時存在),所以需要注意,單aufk和JEST關聯是會存在多條記錄,如果要做數量統計等。最后把TECO狀態給過濾掉,或統計時不要統計TECO狀態的條目,否則統計數據會錯誤。TJ02T表(系統狀態文本)。
包含訂單的所有狀態和文本說明。
CALL FUNCTION 'STATUS_TEXT_EDIT' EXPORTING objnr = object_tab-objnr spras = sy-langu flg_user_stat = 'X' IMPORTING line = object_tab-sttxt user_line = object_tab-ustxt EXCEPTIONS object_not_found = 01.
函數不能直接用工單號碼作輸入參數,需使用工單的OBJNR欄位,可以通過用工單號碼從視圖VSAUFK中取得。 TMP_LINE就是返回的工單狀態記錄,如: TECO DLV PRC MANC RESA RMWB SETC
2.可以通過直接在JEST表中通過狀態判定讀取。
SELECT SINGLE * FROM aufk WHERE aufnr = readrec-aufnr. ** 檢查工單種類 * IF aufk-auart(1) <> 'A'. * CONTINUE. * ENDIF. ** 判定工單狀態 CLEAR: jest. SELECT SINGLE * FROM jest WHERE objnr = aufk-objnr AND ( stat = 'I0045' OR " TECO stat = 'I0013' OR " DELETE stat = 'I0076' OR " DELETE FLAG stat = 'I0046' OR " CLSD stat = 'I0012 ') "DLV AND inact = space. IF sy-subrc = 0. CONTINUE. ENDIF. * ** 判定工單是否 RELASE CLEAR: jest. SELECT SINGLE * FROM jest WHERE objnr = aufk-objnr AND ( stat = 'I0002' OR " RELEASE stat = 'I0042') " Partial RELEASE AND inact = space. IF sy-subrc <> 0. CONTINUE. ENDIF. ** 檢查此筆作業是否需要 ( 必需 RELEASE) ** 判定作業是否 RELASE CLEAR: afvc. SELECT SINGLE * FROM afvc WHERE aufpl = readrec-aufpl AND aplzl = readrec-aplzl. CLEAR: jest. SELECT SINGLE * FROM jest WHERE objnr = afvc-objnr AND stat = 'I0002' . " RELEASE IF sy-subrc <> 0. CONTINUE. ENDIF.