记录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 zit0004
WHERE zstop EQ 'X'
AND name IN ('ALL','ZBPM_RFC030').
IF sy-subrc EQ 0.
EV_MESSAGE = '该功能已暂停使用,请等IT通知,谢谢!'.
EXIT.
ENDIF.
CREATE OBJECT json_ser
EXPORTING
data = et_input[].
CALL METHOD json_ser->serialize.
CALL METHOD json_ser->get_data
RECEIVING
rval = 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 zit0005
FOR ALL ENTRIES IN @et_input
WHERE zdh EQ @et_input-zdh
AND zxuhao EQ @et_input-zdhid
AND 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>-zdh
zxuhao = <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_posting
retirementdata = ls_ret
* ACCOUNTASSIGNMENTS =
furtherpostingdata = ls_info
IMPORTING
* DOCUMENTREFERENCE =
return = ls_return
TABLES
return_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'
EXPORTING
wait = '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'
EXPORTING
companycode = ls_input-bukrs
asset = ls_input-anln1
subnumber = ls_input-anln2
* GROUPASSET =
* GENERALDATA =
* GENERALDATAX =
* INVENTORY =
* INVENTORYX =
* POSTINGINFORMATION =
* POSTINGINFORMATIONX =
* TIMEDEPENDENTDATA =
* TIMEDEPENDENTDATAX =
allocations = ls_allocations
allocationsx = 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 =
IMPORTING
return = ls_return
* TABLES
* DEPRECIATIONAREAS =
* DEPRECIATIONAREASX =
* INVESTMENT_SUPPORT =
* EXTENSIONIN =
.
IF ls_return-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = '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.