SAP ABAVN固定资产中实现多重资产的批量报废

bapi BAPI_ASSET_RETIREMENT_POST 可实现ABAVN固定资产的报废,具体实现方式可参考

http://www.baidusap.com/abap/bapi/7284>

这里不再赘述。但这个bapi只能实现一个资产号报废后生成一个会计凭证号,无法批量处理多重资产的报废(多个资产号同时报废后最后只生成一个会计凭证号)。查了许多资料,在网上并没有找到关于多重资产批量报废的bapi。这时候就需要通过ABAVN前台去跟一下标准代码,将标准代码的实现方式copy出来即可。
在ABAVN 前台找到事物代码对应存储的包
在这里插入图片描述
SE80 在AB包中>业务工程>业务对象类型>固定资产 ,双击,
在这里插入图片描述

找到方法中关于资产报废的方法描述,双击,找到对应的函数模块
在这里插入图片描述
在该函数中打上断点,前台abavn 输入数据后/h进去前台调试,发现可以进行该函数的断点处,一步步debug,前台的输入数据都传入该函数AMDP_BAPI_CALL_ON_TRANSACTION中

查看执行多重资产报废的时候,系统给哪些参数赋值,赋的固定值由哪些参数承接,动态变更的资产号传到哪里

debug后发现函数AMDP_BAPI_CALL_ON_TRANSACTION只是在校验前台输入的数据能否报废,如果不能报废该函数会带出相应的消息提示 ,如果能报废成功,执行报废的这一操作则是在函数AMDP_USER_COMMAND_PROCESS 中实现的
在这里插入图片描述
最后将整理后的代码贴上,根据这些代码就可以像前台一样实现多重资产的批量报废了

  DATA:wa_ge     TYPE  bapifapo_gen_info, "会计记帐:资产事务
       wa_re     TYPE  bapifapo_ret,     "固定资产记帐购置
       wa_fu     TYPE  bapifapo_add_info, "会计记帐:资产事务部分结构3
       wa_return TYPE bapiret2. "返回的消息
  DATA:BEGIN OF i_list1 OCCURS 0,
         bukrs LIKE anlc-bukrs, "公司代码
         anln1 LIKE anlc-anln1, "资产编号
       END OF i_list1.
  DATA  c_raifp1 LIKE raifp1. "资产会计:过帐表头输入字段
  DATA:lf_txnok.
  DATA:t_raifp2 LIKE TABLE OF raifp2 WITH HEADER LINE. "资产会计:过帐输入字段
  DATA t_raifp3 LIKE TABLE OF raifp3 WITH HEADER LINE.
  DATA e_fcode LIKE sy-ucomm.
  DATA:    lt_bapiret2   LIKE  bapiret2      OCCURS 0 WITH HEADER LINE.
  DATA:    lt_acchd      LIKE  acchd         OCCURS 0 WITH HEADER LINE.
  DATA:    lt_accit      LIKE  accit         OCCURS 0 WITH HEADER LINE.
  DATA:    lt_acccr      LIKE  acccr         OCCURS 0 WITH HEADER LINE.
  DATA:    lt_accda      LIKE  accda         OCCURS 0 WITH HEADER LINE.
  DATA:    ld_awref      LIKE  anek-belnr.
  DATA:    ld_awtyp      LIKE  anek-awtyp.
  DATA:    ld_aworg      LIKE  anek-aworg.
  DATA:    ld_awsys      LIKE  anek-awsys.
  e_fcode = 'SAVE'.
  DATA:    t_return   LIKE  bapiret2      OCCURS 0 WITH HEADER LINE.

  c_raifp1-gsvor = 'ABGA'.
  c_raifp1-vorgn = 'ABAV'.
  c_raifp1-bzdat = i_date. "资产价值日
  c_raifp1-budat = i_date. "凭证中的过帐日期
  c_raifp1-bldat = i_date. "凭证中的凭证日期


  IF i_list[] IS  NOT INITIAL.
    LOOP AT i_list.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = i_list-anln1
        IMPORTING
          output = i_list-anln1.

      CLEAR t_raifp3.
      t_raifp2-bukrs = i_bukrs. "公司代码
      t_raifp2-anln1 = i_list-anln1. "资产编号
      t_raifp2-xvabg  = 'X'. "全部报废标识
      t_raifp2-sgtxt = i_list-sgtxt. "项目文本
      APPEND t_raifp2.

      MODIFY i_list.
      CLEAR  i_list.
    ENDLOOP.
  ENDIF.

  SELECT SINGLE waers INTO c_raifp1-waers FROM t001 WHERE bukrs = i_bukrs.

  CALL FUNCTION 'AMDP_BAPI_CALL_ON_TRANSACTION'
    EXPORTING
      i_raifp1 = c_raifp1
    IMPORTING
      e_txnok  = lf_txnok
    TABLES
      t_raifp2 = t_raifp2
      t_raifp3 = t_raifp3
      t_return = t_return
    CHANGING
      c_fcode  = e_fcode.

  IF lf_txnok IS INITIAL.
    LOOP AT t_return.
      READ TABLE i_list WITH KEY anln1 =  t_return-message_v1.
      IF sy-subrc = 0.
        i_list-msg = t_return-message.
        MODIFY i_list TRANSPORTING msg WHERE anln1 = t_return-message_v1.
      ENDIF.
    ENDLOOP.
    o_msg = '报废失败,请查看具体报错信息'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'ACC5_RETURN_APPEND_OR_CHECK'
    EXPORTING
      i_refresh_return = 'X'.

  CALL FUNCTION 'AMBU_CALL_AC_DOCUMENT_CHECK'
    TABLES
      t_acchd  = lt_acchd
      t_accit  = lt_accit
      t_acccr  = lt_acccr
      t_accda  = lt_accda
      t_return = lt_bapiret2.

* im RWIN aufgetretene Fehler bzw. Erfolgsmeldung ausgeben
  CALL FUNCTION 'AMDP_MESSAGE_SEND'
    TABLES
      t_return = lt_bapiret2
    CHANGING
      c_fcode  = e_fcode          "<0584750
    EXCEPTIONS
      OTHERS   = 4.

* RWIN zwecks Verbuchung aufrufen
  CHECK sy-subrc = 0.
  CALL FUNCTION 'ACC5_RETURN_APPEND_OR_CHECK'
    EXPORTING
      i_refresh_return = 'X'.

  CALL FUNCTION 'AMBU_CALL_AC_DOCUMENT_POST'
    IMPORTING
      e_awref  = ld_awref
      e_aworg  = ld_aworg
      e_awtyp  = ld_awtyp
      e_awsys  = ld_awsys
    TABLES
      t_acchd  = lt_acchd
      t_accit  = lt_accit
      t_acccr  = lt_acccr
      t_accda  = lt_accda
      t_return = lt_bapiret2.

  READ TABLE lt_bapiret2 WITH KEY type = 'E'.
  IF sy-subrc = 0.
    o_msg = lt_bapiret2-message.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    READ TABLE lt_bapiret2 WITH KEY type = 'S' id = 'AA'.
    IF sy-subrc = 0.
      CONCATENATE '报废成功:'  lt_bapiret2-message INTO o_msg.
    ENDIF.
  ENDIF.

这个方法也是自己凭感觉研究出来,如果有大佬有更好的实现多重资产批量报废的方式,请多指教。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
根据引用\[1\]和引用\[2\]的内容,要在SAP进行大批量删除数据,可以通过以下步骤实现。首先,需要在SAP应用服务器上设置一个独立的文件服务器共享目录,将要删除的数据导出到该目录。可以使用NFS协议将文件服务器和SAP应用服务器连接起来,并为SAP提供相应的权限。然后,在SAP的AL11事务新增一个文件目录,该目录就是导出数据的目录。如果没有独立的文件服务器,也可以使用SAP服务器作为导出地址。在AL11目录下的所有地址都可以作为文件导出地址。 接下来,可以使用类方法cl_alv_table_create=>create_dynamic_table,根据参考的字段清单构造一个动态内表。然后,将要删除的数据构造成与之前提到的SQL结构一致的结果,并将其存储在动态内表。这样可以避免浪费内存和算力。 最后,可以使用相应的SAP功能或工具,如ABAP程序或数据删除事务,对动态内表的数据进行删除操作。这样就可以实现SAP进行大批量删除数据的需求。 #### 引用[.reference_title] - *1* *2* *3* [SAP-ABAP-后台表数据万能导出程序](https://blog.csdn.net/Qunending/article/details/124095092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值