【ABAP系列】SAP 生產訂單完工確認(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT


公眾號: matinal
本文作者: matinal
 

 

前言部分

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

正文部分

生產完成后,需要對產品進行完工確認(也叫 報工確認);

一般情況下,可以通過事務碼(T-Code)CO11 或 CO11N 進行確認。


對於一些零配件的生產時,往往需要確認大量的數量,因而有些用戶就會有批量報工的需求。

批量報工可以通過兩種方式實現:錄制BDC 或者 Call 系統標准 BAPI。

1) 錄制BDC這里就不講述了,直接在CO11N上錄屏即可;

2) Call 系統標准 BAPI:BAPI_PRODORDCONF_CREATE_TT.



在報工時,當涉及到 倒沖料扣料 的操作時,則需要 Call 兩個BAPI來操作:

1. BAPI_PRODORDCONF_GET_TT_PROP 獲取生產訂單相關屬性

2. BAPI_PRODORDCONF_CREATE_TT 報工確認


相關操作示例(包括倒沖料操作):

* 定義數據內表
DATA: gt_afko TYPE STANDARD TABLE OF afko.
 
* Work Area 定義
DATA: gw_afko  TYPE afko,
      gw_afpo  TYPE afpo,
      gw_afvc  TYPE afvc,
      gw_afvv  TYPE afvv.
 
DATA: gv_index  TYPE sy-tabix,
      gv_result TYPE c.
 
DATA:
*BAPI相關定義
      propose             LIKE bapi_pp_conf_prop,
      timetickets         LIKE bapi_pp_timeticket       OCCURS 0 WITH HEADER LINE,
      goodsmovements      LIKE bapi2017_gm_item_create  OCCURS 0 WITH HEADER LINE,
      link_conf_goodsmov  LIKE bapi_link_conf_goodsmov  OCCURS 0 WITH HEADER LINE,
      return_detail       LIKE bapi_coru_return         OCCURS 0 WITH HEADER LINE,
      return              LIKE bapiret1                 OCCURS 0 WITH HEADER LINE.
 
CONSTANTS:
      cn_flagx TYPE c VALUE 'X'.
 
* Get Data...
* Header
CLEAR gt_afko[].
SELECT aufnr rsnum aufpl
  INTO CORRESPONDING FIELDS OF TABLE gt_afko
  FROM afko
  WHERE aufnr IN so_aufnr  "生產工單號
  .
 
* Data Proccess...
CLEAR gw_afko.
LOOP AT gt_afko INTO gw_afko.
 
  IF sy-subrc = 0.
 
    CLEAR gw_afvc.
    SELECT SINGLE
      aufpl       "訂單工序的工藝路線號
      aplzl       "訂單的通用計數器
      vornr       "工序
      plnfl       "順序
      arbid
      aplfl       "序列(新) 有值
      INTO CORRESPONDING FIELDS OF gw_afvc
      FROM afvc
      WHERE aufpl = gw_afko-aufpl.
 
    IF sy-subrc = 0.
 
* 1.需要更新的數據設置
      CLEAR propose.
      propose-quantity          = cn_flagx.   "更新數量
      propose-date_and_time     = cn_flagx.   "更新作業時間
      propose-goodsmovement     = cn_flagx.   "更新貨物移動
 
* 2.作業時間
      CLEAR: timetickets,timetickets[].
      timetickets-orderid       = gw_print-aufnr. "工單號
      timetickets-operation     = gw_afvc-vornr.  "工序號
      timetickets-yield         = gw_print-lmnga. "工單生產數量
      timetickets-sequence      = gw_afvc-aplfl.  "
      APPEND timetickets.
      CLEAR  timetickets.
 
* 3.貨物移動屬性
* 第一次賦值,用於獲取相關默認屬性值
      CLEAR: goodsmovements,goodsmovements[].
      goodsmovements-orderid    = gw_print-aufnr.  "生產訂單號
      goodsmovements-order_itno = gw_afvc-vornr.   "工序號
      APPEND goodsmovements.
      CLEAR  goodsmovements.
 
* 4.調用BAPI,獲取默認屬性值
      CALL FUNCTION 'BAPI_PRODORDCONF_GET_TT_PROP'
        EXPORTING
          propose            = propose
        IMPORTING
          return             = return
        TABLES
          timetickets        = timetickets
          goodsmovements     = goodsmovements
          link_conf_goodsmov = link_conf_goodsmov
          detail_return      = return_detail.
 
* 5.輸出異常信息
      IF return-type = 'E' OR return-type = 'A'.
 
        CONCATENATE '錯誤:' return-message INTO return-message.
        gv_result = cn_flagx.
 
      ENDIF.
 
      LOOP AT return_detail WHERE type IS NOT INITIAL.
 
        IF return_detail-type = 'E' OR return_detail-type = 'A'.
 
          CONCATENATE '錯誤:' return_detail-message INTO return-message.
          gv_result = cn_flagx.
 
        ENDIF.
 
      ENDLOOP.
 
* 6. 如若需要更新相關信息,可在此修改
* -- 這里修改作業時間 --
      IF gv_result NE cn_flagx.
 
        CLEAR gv_index.
        LOOP AT timetickets.
 
          gv_index = sy-tabix.    "索引
          CLEAR gw_afvv.
          SELECT SINGLE * FROM afvv
            INTO CORRESPONDING FIELDS OF gw_afvv
            WHERE aufpl = gw_afvc-aufpl
              AND aplzl = gw_afvc-aplzl.
 
          IF sy-subrc = 0.
 
            IF NOT gw_afvv-bmsch = 0.
              IF timetickets-conf_acti_unit1 NE 'S'.
                timetickets-conf_activity1 = timetickets-yield * gw_afvv-vgw01 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity1 = timetickets-yield * gw_afvv-vgw01 DIV gw_afvv-bmsch.
              ENDIF.
 
              IF timetickets-conf_acti_unit2 NE 'S'.
                timetickets-conf_activity2 = timetickets-yield * gw_afvv-vgw02 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity2 = timetickets-yield * gw_afvv-vgw02 DIV gw_afvv-bmsch.
              ENDIF.
 
              IF timetickets-conf_acti_unit3 NE 'S'.
                timetickets-conf_activity3 = timetickets-yield * gw_afvv-vgw03 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity3 = timetickets-yield * gw_afvv-vgw03 DIV gw_afvv-bmsch.
              ENDIF.
 
              IF timetickets-conf_acti_unit4 NE 'S'.
                timetickets-conf_activity4 = timetickets-yield * gw_afvv-vgw04 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity4 = timetickets-yield * gw_afvv-vgw04 DIV gw_afvv-bmsch.
              ENDIF.
 
              IF timetickets-conf_acti_unit5 NE 'S'.
                timetickets-conf_activity5 = timetickets-yield * gw_afvv-vgw05 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity5 = timetickets-yield * gw_afvv-vgw05 DIV gw_afvv-bmsch.
              ENDIF.
 
              IF timetickets-conf_acti_unit6 NE 'S'.
                timetickets-conf_activity6 = timetickets-yield * gw_afvv-vgw06 / gw_afvv-bmsch.
              ELSE.
                timetickets-conf_activity6 = timetickets-yield * gw_afvv-vgw06 DIV gw_afvv-bmsch.
              ENDIF.
 
            ENDIF.
 
          ENDIF.
 
          timetickets-yield  = 200.    "待確認的產量(用戶輸入確認值)
 
          IF gw_afvv IS NOT INITIAL.
 
            MODIFY timetickets INDEX gv_index TRANSPORTING yield
              conf_activity1 conf_acti_unit1 conf_activity2 conf_acti_unit2
              conf_activity3 conf_acti_unit3 conf_activity4 conf_acti_unit4
              conf_activity5 conf_acti_unit5 conf_activity6 conf_acti_unit6.
 
          ELSE.
 
            MODIFY timetickets INDEX gv_index TRANSPORTING yield.
 
          ENDIF.
 
          CLEAR timetickets.
        ENDLOOP.
 
        CLEAR gw_afvv.
      ENDIF.
 
 
* 7. 調用BAPI,報工確認
      CLEAR: return, return[].
      CLEAR: return_detail, return_detail[].
      CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
        EXPORTING
          post_wrong_entries = '1'
          testrun            = ''      "標識為 X,則為試運行 不提交至系統
        IMPORTING
          return             = return
        TABLES
          timetickets        = timetickets
          goodsmovements     = goodsmovements
          link_conf_goodsmov = link_conf_goodsmov
          detail_return      = return_detail.
 
      CLEAR gv_result.
      READ TABLE return WITH KEY type = 'E'.
      IF sy-subrc = 0.
 
        CONCATENATE '錯誤:' return-message INTO return-message.
        gv_result = cn_flagx.
 
      ENDIF.
      LOOP AT return_detail WHERE type IS NOT INITIAL.
        IF return_detail-type = 'E' OR return_detail-type = 'A'.
 
          CONCATENATE '錯誤:' return_detail-message INTO return-message.
          gv_result = cn_flagx.
 
        ENDIF.
      ENDLOOP.
 
      IF gv_result NE cn_flagx.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = cn_flagx.
      ENDIF.
 
    ENDIF.
  ENDIF.
 
  CLEAR gw_afko.
ENDLOOP.

​

 


免責聲明!

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



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