公眾號:
matinal
本文作者:
matinal
原文鏈接:
【ABAP系列】SAP 獲取工單和工序的狀態
前言部分
大家可以關注我的公眾號,公眾號里的排版更好,閱讀更舒適。
正文部分
ABAP 獲取訂單狀態的兩個函數 STATUS_TEXT_EDIT 和 STATUS_READ 的簡單介紹
CONCATENATE 'OR' TWK1-AUFNR INTO Z_OBJNR. DATA:objnr TYPE aufk-objnr. objnr = 'OR000000100014'. DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE. "結果存放在STATUS表中 CALL FUNCTION 'STATUS_READ' EXPORTING client = sy-mandt objnr = 'OR000001100154' TABLES status = t_status EXCEPTIONS object_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. LOOP AT t_status. IF t_status-STAT = 'I0002' AND t_status-INACT = 'X'. WRITE:'已刪除'. EXIT. ENDIF. ENDLOOP. DATA:line TYPE bsvx-sttxt. CALL FUNCTION 'STATUS_TEXT_EDIT' EXPORTING FLG_USER_STAT = 'X' OBJNR = 'OR000001100154' ONLY_ACTIVE = 'X' SPRAS = SY-LANGU IMPORTING LINE = line EXCEPTIONS OBJECT_NOT_FOUND = 01 OTHERS = 02. WRITE:line. SEARCH line FOR 'CLSD'. IF sy-subrc = 0. WRITE:'訂單已關閉'. ENDIF.
在SAP中對於如何獲取訂單的狀態,提供了至少兩個函數(我自己知道的),分別是 STATUS_READ 和 STATUS_TEXT_EDIT。下面簡單介紹這兩個函數
1.STATUS_READ 改函數的實現原理大概是通過訂單的對象好(OR+訂單號)到JEST中取出字段STAT INACT.
JEST表中STAT是一串從字面看不出意思的字符,可以根據STAT到表TJ02T中找到具體的描述。
下面是具體用法:
DATA:objnr TYPE aufk-objnr. objnr = 'OR000000100014'. DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE. "結果存放在STATUS表中 CALL FUNCTION 'STATUS_READ' EXPORTING client = sy-mandt objnr = objnr TABLES status = t_status EXCEPTIONS object_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. LOOP AT t_status. IF t_status = 'I0046'. WRITE:'訂單已關閉'. EXIT. ENDIF. ENDLOOP.
2.STATUS_TEXT_EDIT 改函數讀取的結果是將訂單狀態拼接到一個字符串中,而且這個字符串是在前台訂單上看到的狀態,比較直接,這樣做的結果就可能由於狀態較多導致長度過長,在某些情況下取的數據可能不准。
下面是一段代碼:
DATA:line TYPE bsvx-sttxt. CALL FUNCTION 'STATUS_TEXT_EDIT' EXPORTING client = sy-mandt objnr = objnr spras = sy-langu IMPORTING line = line EXCEPTIONS object_not_found = 1 OTHERS . " IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. SEARCH line FOR 'CLSD'. IF sy-subrc = 0. WRITE:'訂單已關閉'. ENDIF.
下面介紹獲取工序狀態的方法:
狀態一般都在JEST這表里面,到AFVC表里面找到對象號 再找TJ02表就可以了!