SAP 会计凭证 BAPI 增强:支持批导修改自定义字段

一、背景

背景:因集团财务上线了税纪云项目,系统中存在很多会计凭证字段期初没有维护或者维护不当,如:相关的文本信息,Coding Block (COBL 结构)中的 全电发票号码(ZZYL06 )和税纪云标识(ZZYL07)等。

为了方便用户的数据维护,因此需要做一个数据批导修改的功能。

技术定位: 高级

技术难点: 标准字段(凭证抬头文本 BKTXT 和 参照 XBLNR )和行项目文本 SGTXT 和 分配编号 ZUONR 可以通过标准 BAPI 实现。但是自定义 CodingBlock 字段暂时没有。

二、方案研究

方案一:BDC 录屏,将自定义字段在前台屏幕配置好,前提是需要设置 FB02 模式下相关字段可编辑修改。缺点:BDC 屏幕不可控,返回报错不好定位。

方案二:找到相关的 BAPI,测试是否能通过标准 BAPI 进行修改。目前在网上找到与会计凭证修改相关的 BAPI 有如下三个:

  • FI_ITEMS_MASS_CHANGE

  • FI_DOCUMENT_CHANGE

  • BAPI_ACC_DOCUMENT_POST

2.1 FI_ITEMS_MASS_CHANGE 研究

根据函数名称可以初步判断,这个 FM 跟行项目批量更改有关,进入代码内去查看,这个功能也是通过 BDC 录屏数据,然后通过直接调用 FB02 事务码进行数据更改的,相关代码如下:

loop at it_buztab where bukrs = beltab-bukrs
                   and   belnr = beltab-belnr
                   and   gjahr = beltab-gjahr.
  perform screen_0700_abzl.
  perform screen_0700_pick.
  perform screen_detail.
  perform screen_0700.
endloop.
perform screen_0700_save.
export g_mass_change to memory id 'EPOS_MASS_CHANGE'.
call transaction 'FB02'  WITHOUT AUTHORITY-CHECK
                         using    bdcdata
                         mode     bdcmode
                         update   'A'
                         messages into msgtab.

仔细研究里面的代码,这个程序只跟程序 SAPMF05L(⽤户总帐屏幕⼀般过帐显示)有关。实际上,在本项目中税纪云标识在应收应付会计凭证增加在屏幕本身,而总账增加在其他按钮中,位置不统一。再加上 BDC 录屏方式一旦出错不好定位问题,故此方案行不通。

2.2 FI_DOCUMENT_CHANGE 研究

这个函数从文件名中可以看出,会计凭证更改。点进去看短文本:FI:从 SD 或 MM 更改文档,这个 FM 点进去发现最关键的代码修改凭证在这一段 FORM :

PERFORM document_change TABLES   t_accchg
                                   xbseg
                                   xbkpf
                                   xbsec    "note 1877685
                          USING    xbsegc   "for EBPP
                                   x_ale.   "note 2509112

点进这个 FORM 会看到三段针对应收、应付、总账的三段凭证更改的 FORM,分别为:

  • 应收,当 i_bseg-koart = 'D'  时:

PERFORM document_change_cust  TABLES   t_accchg   "note 2596048
                                      USING    xbsegc      "for EBPP
                                      CHANGING x_xblnr
                                               x_bktxt
                                               x_open_fi
                                               i_bkpf
                                               i_bseg
                                               i_bsec.    "note 1877685

  • 应付,当 i_bseg-koart = 'K' 时:

PERFORM document_change_vend  TABLES   t_accchg   "note 2596048
                                      CHANGING x_xblnr
                                               x_bktxt
                                               x_open_fi
                                               i_bkpf
                                               i_bseg
                                               i_bsec.    "note 1877685
  • 总账,当 i_bseg-koart IN ('S','M','A')

* begin of note 2036659
      IF ( i_bseg-koart EQ 'S'                            "note 2509112
      OR   i_bseg-koart EQ 'M'                            "note 2509112
      OR   i_bseg-koart EQ 'A' )                "note 2396217 & 2509112
      AND  i_ale IS INITIAL.                              "n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值