SAP-ABAP-会计凭证bapi更新BSED表增强

本文详细阐述了如何通过增强结构和内存操作,在BAPI_ACC_DOCUMENT_POST调用中处理票据数据更新,包括创建会计凭证时BSED表问题的解决方法,以及遇到的常见错误如冲销失败的处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准的会计凭证bapi  BAPI_ACC_DOCUMENT_POST 无法更新票据相关数据想要同时更新票据BSED表相关数据需要按照下列步骤操作

1.增强结构新增票据相关字段

 2.在调用程序bapi时export出数据至内存


  DATA: lt_bsed TYPE TABLE OF bsed,
        ls_bsed TYPE bsed.
  DATA: lv_umskz_flag TYPE flag.      " 用来判断要创建的会计凭证是否有特别总账标识


    IF <ls_data>-umskz = 'W' OR <ls_data>-umskz = 'S'.
      CLEAR ls_bsed.
      lv_umskz_flag = <ls_data>-umskz.
      ls_bsed-buzei = lv_num.
      ls_bsed-wname = <ls_data>-wname.
      ls_bsed-wbzog = <ls_data>-wbzog.
      ls_bsed-wdate = <ls_data>-wdate.
      ls_bsed-wbank = <ls_data>-wbank.
      APPEND ls_bsed TO lt_bsed.
      EXPORT lv_umskz_flag lt_bsed TO MEMORY ID 'ZFIR104'.
    ENDIF.

3.创建隐式增强,import 内存中BSED表数据插入BSED表


   DATA:lt_bsed TYPE TABLE OF bsed.
   DATA:ls_bsed TYPE bsed.
    DATA: lv_umskz_flag TYPE flag.
    imPORT lv_umskz_flag lt_bsed from MEMORY ID 'ZFIR104'.

    IF lv_umskz_flag is not INITIAL AND lt_bsed[] is not INITIAL.
      LOOP AT xbseg WHERE umskz = lv_umskz_flag.
        READ TABLE lt_bsed into ls_bsed WITH KEY buzei = xbseg-buzei.
        IF sy-subrc = 0.
          MOVE-CORRESPONDING xbseg TO xbsed.
          xbsed-wname   = ls_bsed-wname  .
          xbsed-wbzog   = ls_bsed-wbzog  .
          xbsed-wdate   = ls_bsed-wdate  .
          xbsed-wbank   = ls_bsed-wbank  .
          APPEND xbsed.
        ENDIF.
      ENDLOOP.
    ENDIF.

以上操作同样适用下面情况处理

1.创建会计凭证bapi时报错BSED表相关的问题。

2.创建会计凭证成功了,但是FB08冲销报错说找不到凭证行项目,实际BSEG表可以查到数据,只是BSED表查不到数据的问题,同样可以使用增强写入数据

### 修改增强 SAP FB02 事务代码的最佳实践 在 SAP 中对 `FB02` 进行修改增强主要涉及通过用户出口 (User Exits) 或 BAdIs (Business Add-ins) 来实现功能扩展。对于财务模块中的凭证过账日期更改等操作,通常不建议直接改动标准程序逻辑,而是利用这些官方支持的接口来满足特定业务需求[^1]。 #### 使用 User Exit 实现自定义逻辑 针对 `FB02` 的具体场景,可以考虑使用名为 `EXIT_SAPLFBIU_001` 的用户出口,在此过程中能够捕获并处理凭证头数据以及行项目信息的变化请求: ```abap FUNCTION EXIT_SAPLFBIU_001. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(TCODE) LIKE SY-TCODE *"---------------------------------------------------------------------- CASE TCODE. WHEN 'FB02'. " 自定义逻辑编写处 ENDCASE. ENDFUNCTION. ``` 上述 ABAP 函数模块会在执行 `FB02` 期间被调用,允许开发者在此基础上加入额外验证或是日志记录等功能[^2]。 #### 利用 BAdI 执行更灵活的功能定制 除了传统的用户出口外,现代版本的 SAP 更推荐采用基于面向对象设计模式开发的 Business Add-in 接口来进行增强工作。例如,可以通过注册到 `FIN_ACC_DOCUMENT_CHANGE` 类下的方法拦截器来影响 `FB02` 流程中发生的变更行为[^3]: ```abap CLASS lcl_badi DEFINITION INHERITING FROM zif_fin_acc_document_change. PUBLIC SECTION. METHODS: on_before_save FOR EVENT before_save OF cl_fi_docu_chng_handler IMPORTING eo_header TYPE REF TO if_fi_docu_head_bo et_items TYPE fi_docu_item_tab CHANGING cs_changed_data TYPE fi_docu_chg_struct. ENDCLASS. CLASS lcl_badi IMPLEMENTATION. METHOD on_before_save. " 对传入参数进行检查与调整 ENDMETHOD. ENDCLASS. ``` 这种做法不仅提高了代码可读性和维护性,还使得不同客户化需求之间的冲突可能性降到最低限度[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值