KO02内部订单修改

结合两个SAP标准的函数完成仅是修改内部订单基本主数据

1、KAUF_ORDER_READ

2、KAUF_ORDER_STORE

如果还要需要修改AUFK表中的订单状态 和 结算规则系统状态需要再加一个内部订单状态的标准函数

3、STATUS_CHANGE_INTERN

1-3 组可以修改整个内部订单的数据

  DATA i_actvt    TYPE tact-actvt.
  DATA i_aufnr    TYPE aufk-aufnr.
  DATA e_afko     TYPE afko.
  DATA e_afpo     TYPE afpo.
  DATA e_coas_old TYPE coas.

  DATA lv_desp    LIKE zpv_s_lgcont-desp.
  DATA ls_coas     TYPE coas."订单信息
  DATA ls_kauf     TYPE kauf.

  DATA lt_set_stat     TYPE STANDARD TABLE OF jstat.
  DATA:ls_set_stat          TYPE jstat.
  DATA:lt_jest        TYPE  TABLE OF jest.
  DATA:ls_jest        TYPE  jest.

  "读取内部订单信息信息
  CALL FUNCTION 'KAUF_ORDER_READ'
    EXPORTING
      i_actvt                = '03'
      i_aufnr                = p_aufnr
    IMPORTING
      e_coas                 = ls_coas
      e_kauf                 = ls_kauf
*     e_coas_old             = 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.
* Implement suitable error handling here
    PERFORM frm_build_msg USING sy-msgid sy-msgno
                                sy-msgv1 sy-msgv2
                                sy-msgv3 sy-msgv4
                          CHANGING lv_desp.
    pt_ret-type = c_e.
    pt_ret-message = '内部订单状态修改失败' && lv_desp.
    APPEND pt_ret. CLEAR pt_ret.
    RETURN.
  ENDIF.

  ls_coas-phas3 = abap_true.
  ls_coas-phas1 = abap_false.
  ls_coas-phas2 = abap_false.
  ls_coas-phas0 = abap_false.

  CALL FUNCTION 'KAUF_ORDER_STORE'
    EXPORTING
      i_check             = 'N'
      i_coas              = ls_coas
*     I_DIALOG            = ' '
      i_kauf              = ls_kauf
      i_save_flag         = 'X'
    EXCEPTIONS
      illegal_change      = 1
      order_not_in_buffer = 2
      OTHERS              = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
    PERFORM frm_build_msg USING sy-msgid sy-msgno
                                sy-msgv1 sy-msgv2
                                sy-msgv3 sy-msgv4
                          CHANGING lv_desp.
    pt_ret-type = c_e.
    pt_ret-message = '内部订单状态修改失败' && lv_desp.
    APPEND pt_ret. CLEAR pt_ret.
    RETURN.
  ELSE.

    CONSTANTS:
          l_con_stk_crtd        TYPE jest-stat   VALUE 'I0001',"建立    PHAS1  状态 "订单建立"
          l_con_stk_rel         TYPE jest-stat   VALUE 'I0002',"已释放     PHAS2  状态 "订单完成"
          l_con_stk_setc        TYPE jest-stat   VALUE 'I0028',"结算规则维护  这个状态 保持激活状态
          l_con_stk_teco        TYPE jest-stat   VALUE 'I0045',"技术实现 PHAS2     状态 "订单完成"
          l_con_stk_clsd        TYPE jest-stat   VALUE 'I0046'."算结算 PHAS3  状态 "订单关闭"

    REFRESH lt_set_stat.

    SELECT * FROM jest
             INTO TABLE lt_jest
            WHERE stat  IN ('I0001','I0002','I0045','I0046')
              AND objnr EQ ls_coas-objnr.

    LOOP AT lt_jest INTO ls_jest.
      IF ls_jest-stat EQ l_con_stk_clsd.
        CLEAR:ls_jest-inact.
      ELSE.
        ls_jest-inact = abap_true.
      ENDIF.
      MOVE-CORRESPONDING ls_jest TO ls_set_stat.
      APPEND ls_set_stat TO lt_set_stat.
      CLEAR:ls_set_stat.
    ENDLOOP.

    CALL FUNCTION 'STATUS_CHANGE_INTERN'
      EXPORTING
        objnr               = ls_coas-objnr
      TABLES
        status              = lt_set_stat
      EXCEPTIONS
        object_not_found    = 1
        status_inconsistent = 2
        status_not_allowed  = 3
        OTHERS              = 4.
    IF sy-subrc <> 0.
      PERFORM frm_build_msg USING sy-msgid sy-msgno
                                  sy-msgv1 sy-msgv2
                                  sy-msgv3 sy-msgv4
                            CHANGING lv_desp.
      pt_ret-type = c_e.
      pt_ret-message = '内部订单状态修改失败' && lv_desp.
      APPEND pt_ret. CLEAR pt_ret.
      RETURN.
    ELSE.
      COMMIT WORK AND WAIT.
      PERFORM frm_build_msg USING sy-msgid sy-msgno
                                  sy-msgv1 sy-msgv2
                                  sy-msgv3 sy-msgv4
                            CHANGING lv_desp.
      pt_ret-type = c_s.
      pt_ret-message = '内部订单状态修改成功' && lv_desp.
      APPEND pt_ret. CLEAR pt_ret.
    ENDIF.

  ENDIF.


版权声明:本文为Clare_Laujingcio原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。