1. 程式人生 > >SAP 獲取工單和工序的狀態

SAP 獲取工單和工序的狀態

SAP 獲取工單和工序的狀態

2015年11月12日 15:20:46 SAPmatinal 閱讀數:3684

ABAP 獲取訂單狀態的兩個函式 STATUS_TEXT_EDIT 和 STATUS_READ 的簡單介紹

 

 
  1. CONCATENATE 'OR' TWK1-AUFNR INTO Z_OBJNR.

  2.  
  3. DATA:objnr TYPE aufk-objnr.

  4.  
  5. objnr = 'OR000000100014'.

  6. DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE.

  7. "結果存放在STATUS表中

  8. CALL FUNCTION 'STATUS_READ'

  9. EXPORTING

  10. client = sy-mandt

  11. objnr = 'OR000001100154'

  12. TABLES

  13. status = t_status

  14. EXCEPTIONS

  15. object_not_found = 1

  16. OTHERS = 2.

  17. IF sy-subrc <> 0.

  18. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

  19. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  20. ENDIF.

  21. LOOP AT t_status.

  22. IF t_status-STAT = 'I0002' AND t_status-INACT = 'X'.

  23. WRITE:'已刪除'.

  24. EXIT.

  25. ENDIF.

  26. ENDLOOP.

  27.  
  28. DATA:line TYPE bsvx-sttxt.

  29. CALL FUNCTION 'STATUS_TEXT_EDIT'

  30. EXPORTING

  31. FLG_USER_STAT = 'X'

  32. OBJNR = 'OR000001100154'

  33. ONLY_ACTIVE = 'X'

  34. SPRAS = SY-LANGU

  35. IMPORTING

  36. LINE = line

  37. EXCEPTIONS

  38. OBJECT_NOT_FOUND = 01

  39. OTHERS = 02.

  40. WRITE:line.

  41. SEARCH line FOR 'CLSD'.

  42. IF sy-subrc = 0.

  43. WRITE:'訂單已關閉'.

  44. ENDIF.

 

在SAP中對於如何獲取訂單的狀態,提供了至少兩個函式(我自己知道的),分別是 STATUS_READ 和   STATUS_TEXT_EDIT。下面簡單介紹這兩個函式 
1.STATUS_READ  改函式的實現原理大概是通過訂單的物件好(OR+訂單號)到JEST中取出欄位STAT INACT.
JEST表中STAT是一串從字面看不出意思的字元,可以根據STAT到表TJ02T中找到具體的描述。
下面是具體用法

 

 
  1. DATA:objnr TYPE aufk-objnr.

  2.  
  3. objnr = 'OR000000100014'.

  4. DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE.

  5. "結果存放在STATUS表中

  6. CALL FUNCTION 'STATUS_READ'

  7. EXPORTING

  8. client = sy-mandt

  9. objnr = objnr

  10. TABLES

  11. status = t_status

  12. EXCEPTIONS

  13. object_not_found = 1

  14. OTHERS = 2.

  15. IF sy-subrc <> 0.

  16. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

  17. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  18. ENDIF.

  19. LOOP AT t_status.

  20. IF t_status = 'I0046'.

  21. WRITE:'訂單已關閉'.

  22. EXIT.

  23. ENDIF.

  24. ENDLOOP.


2.STATUS_TEXT_EDIT 改函式讀取的結果是將訂單狀態拼接到一個字串中,而且這個字串是在前臺訂單上看到的狀態,比較直接,這樣做的結果就可能由於狀態較多導致長度過長,在某些情況下取的資料可能不準。
下面是一段程式碼

 

 
  1. DATA:line TYPE bsvx-sttxt.

  2. CALL FUNCTION 'STATUS_TEXT_EDIT'

  3. EXPORTING

  4. client = sy-mandt

  5. objnr = objnr

  6. spras = sy-langu

  7. IMPORTING

  8. line = line

  9. EXCEPTIONS

  10. object_not_found = 1

  11. OTHERS . "

  12. IF sy-subrc <> 0.

  13. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

  14. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  15. ENDIF.

  16.  
  17. SEARCH line FOR 'CLSD'.

  18. IF sy-subrc = 0.

  19. WRITE:'訂單已關閉'.

  20. ENDIF.


下面介紹獲取工序狀態的方法:

狀態一般都在JEST這表裡面,到AFVC表裡面找到物件號 再找TJ02表就可以了!