SAP KO02内部订单状态修改

SAP KO02内部订单状态修改

  1. 修改AUFK phas0/phas1/phas2/phas3 状态字段使用BAPI:KAUF_ORDER_READ、KAUF_ORDER_STORE
    修改JEST内部订单对象号相关状态使用STATUS_CHANGE_INTERN
    以上几个函数结合使用。
  2. AUFK和JEST两个表的状态都要调整,不然前台会出现问题;使用KAUF_ORDER_STORE修改状态的时候,会显示的警告消息,通过参数没办法然他不展示,在函数EXCEPTIONS加上参数error_message就可以让他不显示出来。
  3. 上代码:
DATA:ls_coas TYPE coas,
       ls_kauf TYPE kauf,
       lv_msg  TYPE string.
  DATA:lt_jstat TYPE TABLE OF jstat,
       ls_jstat TYPE jstat.

  CALL FUNCTION 'KAUF_ORDER_READ'
    EXPORTING
*     I_ACTVT                = '03'
      i_aufnr                = ps_tab-aufnr
*     I_AUTYP_ERL            = ' '
*     I_COAS                 = ' '
*     I_ENQUEUED             = ' '
*     I_INDEX                = 0
*     I_AFKO                 =
*     I_AFPO                 =
*     I_COSTS_EXIST          =
*     I_DISPLAY_FROM_ARCHIVE = 'X'
    IMPORTING
*     E_AFKO                 =
*     E_AFPO                 =
      e_coas                 = ls_coas
      e_kauf                 = ls_kauf
*     E_COAS_OLD             =
    EXCEPTIONS
      auart_not_found        = 1
      foreign_lock           = 2
      no_authority           = 3
      order_not_found        = 4
      order_type_not_valid   = 5
      wrong_input            = 6
      logsystem_inconsistent = 7
      OTHERS                 = 8.
  IF sy-subrc <> 0.
    CLEAR lv_msg.

    ps_tab-zlight = icon_red_light.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                        INTO lv_msg
                        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ps_tab-zmsg = ps_tab-zmsg && '状态修改失败:' && lv_msg && ';'.

  ENDIF.

  IF p_x = 'X'.
    CASE ps_tab-zddzt2.
      WHEN 'CRTD'. "I0001
        ls_coas-phas0 = 'X'.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = ''.

      WHEN 'REL'.  "I0002
        ls_coas-phas0 = ''.
        ls_coas-phas1 = 'X'.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = ''.

      WHEN 'TECO'. "I0045
        ls_coas-phas0 = ''.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = 'X'.
        ls_coas-phas3 = ''.

      WHEN '结算'. "I0046
        ls_coas-phas0 = ''.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = 'X'.

      WHEN OTHERS.
    ENDCASE.
  ELSE.
    CASE ps_tab-zddzt.
      WHEN 'CRTD'. "I0001
        ls_coas-phas0 = 'X'.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = ''.

      WHEN 'REL'.  "I0002
        ls_coas-phas0 = ''.
        ls_coas-phas1 = 'X'.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = ''.

      WHEN 'TECO'. "I0045
        ls_coas-phas0 = ''.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = 'X'.
        ls_coas-phas3 = ''.

      WHEN '结算'. "I0046
        ls_coas-phas0 = ''.
        ls_coas-phas1 = ''.
        ls_coas-phas2 = ''.
        ls_coas-phas3 = 'X'.

      WHEN OTHERS.
    ENDCASE.
  ENDIF.


  CALL FUNCTION 'KAUF_ORDER_STORE'
    EXPORTING
*     I_AFKO              = ' '
*     I_AFPO              = ' '
      i_check             = 'N'
      i_coas              = ls_coas
      i_dialog            = ''
      i_kauf              = ls_kauf
      i_save_flag         = 'X'
      i_auc_dialog_off    = abap_true
    EXCEPTIONS
      illegal_change      = 1
      order_not_in_buffer = 2
      error_message       = 99
      OTHERS              = 3.
  IF sy-subrc <> 0.
    CLEAR lv_msg.

    ps_tab-zlight = icon_red_light.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                        INTO lv_msg
                        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ps_tab-zmsg = ps_tab-zmsg && '状态修改失败:' && lv_msg && ';'.
    ROLLBACK WORK.

  ELSE.
*        ps_tab-zmsg = ps_tab-zmsg && '内部订单状态修改成功;' .

*     更新JEST表
    REFRESH:lt_jstat.

    IF p_x = 'X'.
      CASE ps_tab-zddzt2.
        WHEN 'CRTD'. "I0001
*          ls_jstat-stat = 'I0001'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = '' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN 'REL'.  "I0002
*          ls_jstat-stat = 'I0002'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = '' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN 'TECO'. "I0045
*          ls_jstat-stat = 'I0045'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = '' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN '结算'. "I0046
*          ls_jstat-stat = 'I0046'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = '' ) ).
        WHEN OTHERS.
      ENDCASE.
*      APPEND ls_jstat TO lt_jstat.
*      CLEAR ls_jstat.
    ELSE.
      CASE ps_tab-zddzt.
        WHEN 'CRTD'. "I0001
*          ls_jstat-stat = 'I0001'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = '' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN 'REL'.  "I0002
*          ls_jstat-stat = 'I0002'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = '' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN 'TECO'. "I0045
*          ls_jstat-stat = 'I0045'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = '' )
                              ( stat = 'I0046' inact = 'X' ) ).
        WHEN '结算'. "I0046
*          ls_jstat-stat = 'I0046'.
          lt_jstat = VALUE #( ( stat = 'I0001' inact = 'X' )
                              ( stat = 'I0002' inact = 'X' )
                              ( stat = 'I0045' inact = 'X' )
                              ( stat = 'I0046' inact = '' ) ).
        WHEN OTHERS.
      ENDCASE.
*      APPEND ls_jstat TO lt_jstat.
*      CLEAR ls_jstat.
    ENDIF.


    CALL FUNCTION 'STATUS_CHANGE_INTERN'
      EXPORTING
        objnr               = ps_tab-objnr
      TABLES
        status              = lt_jstat
      EXCEPTIONS
        object_not_found    = 1
        status_inconsistent = 2
        status_not_allowed  = 3
        OTHERS              = 4.
    IF sy-subrc = 0.
      COMMIT WORK AND WAIT.

*      ps_tab-zlight = icon_green_light.
*      ps_tab-zmsg   = '状态修改成功;'.

    ELSE.
      ROLLBACK WORK.

      ps_tab-zlight = icon_red_light.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          INTO lv_msg
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ps_tab-zmsg = ps_tab-zmsg && '状态修改失败:' && lv_msg && ';'.
    ENDIF.
  ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值