Skip to content

工单关闭

技术性完成(TECO)生产订单

示例代码
DATA:
  lt_orders        TYPE STANDARD TABLE OF bapi_order_key,
  lt_detail_return TYPE STANDARD TABLE OF bapi_order_return,
  ls_return        TYPE bapiret2.

CLEAR lt_orders.
CLEAR lt_detail_return.
CLEAR ls_return.

INSERT VALUE #( order_number = ls_input-aufnr ) INTO TABLE lt_orders.

" 技术性完成生产订单
CALL FUNCTION 'BAPI_PRODORD_COMPLETE_TECH'
  IMPORTING
    return        = ls_return
  TABLES
    orders        = lt_orders
    detail_return = lt_detail_return.

IF ls_return-type = 'E'.
  l_mtype = 'E'.
  MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
    WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4
    INTO l_msg.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
  l_mtype = 'S'.
  l_msg = |已处理|.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDIF.

撤销TECO

用方法STATUS_CHANGE_INTERN撤销TECO,但是无法清除AUFK-IDAT2技术完成日期,或许可以直接改表来去除这个字段信息?

示例代码
  DATA lt_jstat TYPE STANDARD TABLE OF jstat WITH EMPTY KEY.
  CLEAR lt_jstat.
  CALL FUNCTION 'STATUS_READ'
    EXPORTING
      objnr            = i_objnr
    TABLES
      status           = lt_jstat
    EXCEPTIONS
      object_not_found = 1
      OTHERS           = 2.
  IF sy-subrc = 0.
* Implement suitable error handling here
    LOOP AT lt_jstat REFERENCE INTO DATA(lr_jstat).
      CASE lr_jstat->stat.
        WHEN 'I0002'. " REL
          lr_jstat->inact = ''.
        WHEN 'I0045'. " TECO
          lr_jstat->inact = 'X'.
        WHEN OTHERS.
      ENDCASE.
    ENDLOOP.

    CALL FUNCTION 'STATUS_CHANGE_INTERN'
      EXPORTING
        objnr               = i_objnr
      TABLES
        status              = lt_jstat
      EXCEPTIONS
        object_not_found    = 1
        status_inconsistent = 2
        status_not_allowed  = 3
        OTHERS              = 4.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDIF.

撤销TECO(BDC实现)

示例代码
FORM frm_bdc_status_change USING i_aufnr TYPE aufk-aufnr
                                 i_teco TYPE xflag
                        CHANGING c_subrc TYPE sy-subrc.
  DATA lt_bdcdata TYPE STANDARD TABLE OF bdcdata WITH EMPTY KEY.
  DEFINE _bdc_dynpro.
    append value #(
      program = &1
      dynpro = &2
      dynbegin = 'X'
    ) to lt_bdcdata.
  END-OF-DEFINITION.
  DEFINE _bdc_field.
    append value #(
      fnam = &1
      fval = &2
    ) to lt_bdcdata.
  END-OF-DEFINITION.

  " CO02首页,选择总览,输入订单号,ENTER进入
  _bdc_dynpro 'SAPLCOKO1' '0110'.
  _bdc_field:
    'BDC_OKCODE' '/00',
    'R62CLORD-FLG_OVIEW' 'X',
    'CAUFVD-AUFNR' i_aufnr.

  " =TABS:  TECO 技术性关闭
  " =TABR:  undo TECO 取消技术性关闭
  _bdc_dynpro 'SAPLCOKO1' '0115'.
  IF i_teco = 'X'.
    _bdc_field 'BDC_OKCODE' '=TABS'.
  ELSE.
    _bdc_field 'BDC_OKCODE' '=TABR'.
  ENDIF.

  " 保存
  _bdc_dynpro 'SAPLCOKO1' '0115'.
  _bdc_field 'BDC_OKCODE' '=BU'.

  " 保存时弹窗选择“是”
  _bdc_dynpro 'SAPLSPO1' '0300'.
  _bdc_field 'BDC_OKCODE' '=YES'.


  DATA ls_option TYPE ctu_params.
  ls_option-dismode = 'N'. " 后台
  ls_option-updmode = 'L'. " 本地
  ls_option-nobinpt = 'X'. " 有弹窗,需要启用这个标识

  DATA lt_message TYPE STANDARD TABLE OF bdcmsgcoll WITH EMPTY KEY.

  CALL TRANSACTION 'CO02' USING lt_bdcdata
        OPTIONS FROM ls_option
        MESSAGES INTO lt_message.
  " 不管如何,BDC都回滚不了,直接提交了事
  COMMIT WORK AND WAIT.
ENDFORM.                    " frm_bdc_status_change