【ABAP系列】SAP 獲取工單和工序的狀態


公眾號: matinal
本文作者: matinal
 

 

前言部分

大家可以關注我的公眾號,公眾號里的排版更好,閱讀更舒適。

正文部分

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表就可以了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM