固定资产报废在BPM或OA中审批,再通过接口传到SAP
记录SAP固定资产报废的接口:
1.通过BPM或OA写报废申请单
2.审批完成传后,回传SAP,并在BPM记录生成的会计凭证
3.BPM回写SAP接口
FUNCTION zbpm_rfc030.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(P_SYSTEM) TYPE CHAR4 DEFAULT 'BPM'
*" VALUE(P_UNAME) TYPE UNAME DEFAULT SY-UNAME
*" VALUE(P_NAME1) TYPE CHAR12 OPTIONAL
*" EXPORTING
*" VALUE(EV_MESSAGE) TYPE BAPI_MSG
*" TABLES
*" ET_INPUT STRUCTURE ZBPMS030 OPTIONAL
*"----------------------------------------------------------------------DATA: json_ser TYPE REF TO cl_trex_json_serializer,json_des TYPE REF TO cl_trex_json_deserializer.DATA: jsonstr TYPE string.DATA: lt_zrfc_logs TYPE TABLE OF zrfc_logs,ls_zrfc_logs TYPE zrfc_logs.DATA: ls_posting TYPE bapifapo_gen_info,ls_info TYPE bapifapo_add_info,ls_ret TYPE bapifapo_ret,ls_return TYPE bapiret2,lt_return TYPE TABLE OF bapiret2.DATA: ls_zit0005 TYPE zit0005,lt_zit0005 TYPE TABLE OF zit0005.SELECT COUNT(*)FROM zit0004WHERE zstop EQ 'X'AND name IN ('ALL','ZBPM_RFC030').IF sy-subrc EQ 0.EV_MESSAGE = '该功能已暂停使用,请等IT通知,谢谢!'.EXIT.ENDIF.CREATE OBJECT json_serEXPORTINGdata = et_input[].CALL METHOD json_ser->serialize.CALL METHOD json_ser->get_dataRECEIVINGrval = jsonstr.ls_zrfc_logs-funcname = 'ZBPM_RFC030'.ls_zrfc_logs-zsystem = p_system.ls_zrfc_logs-uname = p_uname.ls_zrfc_logs-zname1 = p_name1.ls_zrfc_logs-erdat = sy-datum.ls_zrfc_logs-uzeit = sy-uzeit.
* ls_zrfc_logs-ep_type = ep_type.
* ls_zrfc_logs-ep_message = ep_message.ls_zrfc_logs-jsonstr1 = jsonstr.
* IF p_system NE 'SAP'.
* MODIFY zrfc_logs FROM ls_zrfc_logs.
* IF sy-subrc EQ 0.
* COMMIT WORK AND WAIT.
* ELSE.
* ROLLBACK WORK.
* ENDIF.
* ENDIF.* BREAK-POINT.IF et_input[] IS NOT INITIAL.SELECT *INTO TABLE @DATA(lt_zit0005c)FROM zit0005FOR ALL ENTRIES IN @et_inputWHERE zdh EQ @et_input-zdhAND zxuhao EQ @et_input-zdhidAND zdh NE ''AND ztype EQ 'S'.SORT lt_zit0005c[] BY zdh zxuhao.ENDIF.IF lt_zit0005c[] IS NOT INITIAL.LOOP AT et_input ASSIGNING FIELD-SYMBOL(<fs_tab>).READ TABLE lt_zit0005c INTO DATA(ls_zit0005c) WITH KEY zdh = <fs_tab>-zdhzxuhao = <fs_tab>-zdhid BINARY SEARCH.IF sy-subrc EQ 0.<fs_tab>-ztype = 'S'.<fs_tab>-msg = '该流程单号已提交过,请不要重复提交'.
* <fs_tab>-belnr = ls_zit0005c-belnr.
* <fs_tab>-gjahr = ls_zit0005c-gjahr.ELSE.<fs_tab>-ztype = 'E'.<fs_tab>-msg = '存在已提交的流程单号,请不要重复提交'.ENDIF.ENDLOOP.EXIT."结束本次调用ENDIF.LOOP AT et_input INTO DATA(ls_input).CLEAR: ls_posting,ls_info,ls_return,lt_return[].ls_input-anln1 = |{ ls_input-anln1 ALPHA = IN }|.ls_input-anln2 = |{ ls_input-anln2 ALPHA = IN }|.ls_posting-username = p_uname."用户名ls_posting-doc_type = ls_input-blart."凭证类型ls_posting-doc_date = ls_input-bldat."凭证日期ls_posting-pstng_date = ls_input-budat."过账日期ls_posting-fis_period = ls_input-monat."会计期间
* LS_POSTING-TRANS_DATE = LS_INPUT-BZDAT."换算日期,ls_posting-comp_code = ls_input-bukrs."公司代码ls_posting-assetmaino = ls_input-anln1."主资产号ls_posting-assetsubno = ls_input-anln2."次级资产编号ls_posting-assettrtyp = ls_input-bwasl."事务类型ls_posting-depr_area = ls_input-afabe."过账折旧范围ls_posting-acc_principle = ls_input-accpr."会计准则ls_info-alloc_nmbr = ls_input-zuonr."分配编号ls_info-item_text = ls_input-sgtxt. "项目文本ls_info-ref_doc_no = ls_input-xblnr."参考凭证号ls_ret-valuedate = ls_input-bzdat."ls_ret-compl_ret = ls_input-compl_ret."标志:记账全部报废CALL FUNCTION 'BAPI_ASSET_RETIREMENT_POST'EXPORTING
* ORIGINDOCREFERENCE =generalpostingdata = ls_postingretirementdata = ls_ret
* ACCOUNTASSIGNMENTS =furtherpostingdata = ls_infoIMPORTING
* DOCUMENTREFERENCE =return = ls_returnTABLESreturn_all = lt_return.ls_input-ztype = ls_return-type.LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<ls_return>).ls_input-msg = |{ ls_input-msg }{ <ls_return>-message }|.* added by solin 20250904 增加会计编号IF <ls_return>-ID CS 'AA'.ls_input-ZKJBH = <ls_return>-message_v2.ENDIF.ENDLOOP.IF ls_return-type NE 'A' AND ls_return-type NE 'E'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'
* IMPORTING
* RETURN =.WAIT UP TO '0.3' SECONDS.CLEAR ls_return.DATA:ls_allocations TYPE bapi1022_feglg004,ls_allocationsx TYPE bapi1022_feglg004x.ls_allocations-evalgroup1 = '003'. "资产状态 003 -- 报废ls_allocationsx-evalgroup1 = 'X'.CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'EXPORTINGcompanycode = ls_input-bukrsasset = ls_input-anln1subnumber = ls_input-anln2
* GROUPASSET =
* GENERALDATA =
* GENERALDATAX =
* INVENTORY =
* INVENTORYX =
* POSTINGINFORMATION =
* POSTINGINFORMATIONX =
* TIMEDEPENDENTDATA =
* TIMEDEPENDENTDATAX =allocations = ls_allocationsallocationsx = ls_allocationsx
* ORIGIN =
* ORIGINX =
* INVESTACCTASSIGNMNT =
* INVESTACCTASSIGNMNTX =
* NETWORTHVALUATION =
* NETWORTHVALUATIONX =
* REALESTATE =
* REALESTATEX =
* INSURANCE =
* INSURANCEX =
* LEASING =
* LEASINGX =
* GLO_RUS_GEN =
* GLO_RUS_GENX =
* GLO_RUS_PTX =
* GLO_RUS_PTXX =
* GLO_RUS_TTX =
* GLO_RUS_TTXX =
* GLO_IN_GEN =
* GLO_IN_GENX =
* GLO_JP_ANN16 =
* GLO_JP_ANN16X =
* GLO_JP_PTX =
* GLO_JP_PTXX =
* GLO_TIME_DEP =
* GLO_RUS_GENTD =
* GLO_RUS_GENTDX =
* GLO_RUS_PTXTD =
* GLO_RUS_PTXTDX =
* GLO_RUS_TTXTD =
* GLO_RUS_TTXTDX =
* GLO_JP_IMPTD =
* GLO_JP_IMPTDX =IMPORTINGreturn = ls_return
* TABLES
* DEPRECIATIONAREAS =
* DEPRECIATIONAREASX =
* INVESTMENT_SUPPORT =
* EXTENSIONIN =.IF ls_return-type = 'S'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'
* IMPORTING
* RETURN =.ls_zit0005-zdh = ls_input-zdh.ls_zit0005-zxuhao = ls_input-zdhid.ls_zit0005-ztype = ls_input-ztype.ls_zit0005-zmsg = ls_input-msg.
* ls_zit0005-belnr = ls_input-belnr.
* ls_zit0005-mjahr = ls_head-pstng_date+0(4)."goodsmvt_header-doc_date+0(4).ls_zit0005-erdat = sy-datum.ls_zit0005-uzeit = sy-uzeit.APPEND ls_zit0005 TO lt_zit0005[]."用于记录成功的流程单号ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =.ls_input-ztype = ls_return-type.ls_input-msg = ls_return-message.ENDIF.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =.ENDIF.MODIFY et_input FROM ls_input.CLEAR: ls_input.ENDLOOP.DELETE lt_zit0005[] WHERE zdh EQ ''.IF lt_zit0005[] IS NOT INITIAL.MODIFY zit0005 FROM TABLE lt_zit0005.IF sy-subrc EQ 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.ENDFUNCTION.