固定资产报废在BPM或OA中审批,再通过接口传到SAP

发布于:2025-09-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

记录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.


网站公告

今日签到

点亮在社区的每一天
去签到