采购订单审批和取消例子
文章目录
- 1 Introduction
- 2 Example
1 Introduction
This is a exmaple for releaseing po and reseting po.
2 Example
DATA:lw_in TYPE zmms015,lw_out TYPE zmms015_out,lt_head LIKE TABLE OF ZMMT003_head,lw_head TYPE ZMMT003_head,lt_item TYPE zmmt003_item_t,lt_spjd TYPE ZMMT003_spjd_T.DATA:lv_rel_code LIKE bapimmpara-rel_code.DATA:lt_return TYPE TABLE OF bapireturn,ls_return TYPE bapireturn.DATA:lv_str TYPE string,lv_offset TYPE i.DATA:BEGIN OF ls_grp,frgco TYPE t16fc-frgco,END OF ls_grp,lt_grp LIKE TABLE OF ls_grp.FIELD-SYMBOLS:<lfs_v1> TYPE any.* logic partlw_in = ps_in.lt_item = lw_in-is_value-it_items1.lt_spjd = lw_in-is_value-it_items2.MOVE-CORRESPONDING lw_in-is_value TO lw_head .IF lw_in-is_value-ebeln IS INITIAL.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '采购单号必填,请核实数据!'.RETURN.ENDIF.LOOP AT lt_item ASSIGNING FIELD-SYMBOL(<fs_item>).IF <fs_item>-ebeln IS INITIAL.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '采购单号必填,请核实数据!'.RETURN.ENDIF.IF <fs_item>-ebelp IS INITIAL.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '采购行项目必填,请核实数据!'.RETURN.ENDIF.ENDLOOP.LOOP AT lt_spjd ASSIGNING FIELD-SYMBOL(<fs_spjd>).IF <fs_spjd>-ebeln IS INITIAL.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '采购订单必填,请核实数据!'.RETURN.ENDIF.ENDLOOP.* Get po's approve code and get apporve leve codeIF lw_head-zspbs = 'R' . " Approve poSELECT k~ebeln,k~frgzu,s~frgc1,s~frgc2,s~frgc3,s~frgc4,s~frgc5,s~frgc6,s~frgc7,s~frgc8FROM t16fs AS sINNER JOIN ekko AS kON k~frggr = s~frggrAND k~frgsx = s~frgsxWHERE k~ebeln = @lw_head-ebelnAND k~frgrl = @abap_true "FRGRL 字段标示审批是否结束INTO TABLE @DATA(lt_t16fs).READ TABLE lt_t16fs ASSIGNING FIELD-SYMBOL(<lfs_t16fs>) INDEX 1.IF sy-subrc EQ 0.DO 8 TIMES.lv_str = sy-index.lv_str = 'FRGC' && lv_str.CONDENSE lv_str NO-GAPS.ASSIGN COMPONENT lv_str OF STRUCTURE <lfs_t16fs> TO <lfs_v1>.IF sy-subrc EQ 0.IF <lfs_v1> IS NOT INITIAL.DATA(lv_x) = <lfs_t16fs>-frgzu+lv_offset(1).IF lv_x IS INITIAL."未审批ls_grp-frgco = <lfs_v1>.APPEND ls_grp TO lt_grp.ENDIF.ENDIF.ENDIF.lv_offset = lv_offset + 1.ENDDO.CLEAR lv_str.ENDIF.* Approve po's orderLOOP AT lt_grp INTO ls_grp.CALL FUNCTION 'BAPI_PO_RELEASE'EXPORTINGpurchaseorder = lw_head-ebelnpo_rel_code = ls_grp-frgcoTABLESreturn = lt_return.LOOP AT lt_return INTO ls_returnWHERE type = 'E' OR type = 'A'.lv_str = lv_str && '|' && ls_return-message.DATA(lv_flag) = abap_true.ENDLOOP.SHIFT lv_str LEFT DELETING LEADING '|'.IF lv_flag EQ abap_true.EXIT.ENDIF.WAIT UP TO 1 SECONDS.ENDLOOP.IF lv_flag EQ abap_true."失败CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '审核失败'.ELSE."成功ps_out-es_value-code = 'S'.ps_out-es_value-msg = '审核成功'.ENDIF.
* Disapprove po's order .ELSE. "CALL FUNCTION 'BAPI_PO_RESET_RELEASE'EXPORTINGpurchaseorder = lw_head-ebelnpo_rel_code = 'R2'use_exceptions = 'X'EXCEPTIONSauthority_check_fail = 1document_not_found = 2enqueue_fail = 3prerequisite_fail = 4release_already_posted = 5responsibility_fail = 6no_release_already = 7no_new_release_indicator = 8OTHERS = 9.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ps_out-es_value-code = 'E'.ps_out-es_value-msg = '审核失败'.ELSE.ps_out-es_value-code = 'S'.ps_out-es_value-msg = '审核成功'.ENDIF.ENDIF.MODIFY ZMMT003_head FROM lw_head.MODIFY ZMMT003_item FROM TABLE lt_item.MODIFY ZMMT003_spjd FROM TABLE lt_spjd.IF sy-subrc = 0.COMMIT WORK.ELSE.ROLLBACK WORK .ENDIF.