SAP KO02内部订单状态修改
- 修改AUFK phas0/phas1/phas2/phas3 状态字段使用BAPI:KAUF_ORDER_READ、KAUF_ORDER_STORE
修改JEST内部订单对象号相关状态使用STATUS_CHANGE_INTERN
以上几个函数结合使用。 - AUFK和JEST两个表的状态都要调整,不然前台会出现问题;使用KAUF_ORDER_STORE修改状态的时候,会显示的警告消息,通过参数没办法然他不展示,在函数EXCEPTIONS加上参数error_message就可以让他不显示出来。
- 上代码:
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.