BAPI_ACC_DOCUMENT_POST更新BSED数据增强

时间:2022-10-14 19:56:00


FB03查看凭证

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

对于特殊总账类型为W的,双击进入可见出票人出票行 票据号等信息

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

这些数据是保存在bsed表的。


而 BAPI_ACC_DOCUMENT_POST  并没有提供这些字段。所以需要走增强。


首先肯定是想到的extension2  字段


"创建凭证
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = gs_bkpf
TABLES
accountgl = gt_account
accountreceivable = gt_customer
accountpayable = gt_vendor
currencyamount = gt_currency
return = gt_return
extension2 = gt_etx.


然后在BADI  ACC_DOCUMENT里赋值

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

发现这里面也没有票据号信息,至于页数啊之类的信息


然后我有找其他增强,出口之类的,没找到合适的。



后来索性直接在源码里查找BSED

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

最后发现都不能用……


查找SAP SCN 等,也没有特别好的解决方案。

SCN上也有人提出过这个问题,没解决

​https://archive.sap.com/discussions/thread/1461635​



最后的解决办法:隐士增强+BADI


增强位置1: FI_DOCUMENT_CHECK


一进来,先检查是否是W类型特殊总账(用get函数获取,set操作在 调用bapi的时候 赋值)

如果是,把char_w 改为U

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

在函数最后,改回去

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

增强位置2:LFACIF5D 

form最后的地方

把exten 数据传过来,传给bsed数据


这里特殊声明下:

因为这个demo只涉及特殊总账类型为W的,其他特殊总账不考虑BSED,

这个得根据所在项目业务来确定,如果除了W还有 S或者其他等类型的,再多加个判断即可。


BAPI_ACC_DOCUMENT_POST更新BSED数据增强

增强结构比如下面字段

POSNR

POSNR_ACC

NUMC

10

0

会计凭证行项目编号

BSCHL

BSCHL

CHAR

2

0

记帐代码

SHKZG

SHKZG

CHAR

1

0

借方/贷方标识

NUMPG

J_1ANOPG

NUMC

3

0

发票的页数

RSTGR

RSTGR

CHAR

3

0

现金流量事务代码

WDATE

WDATE

DATS

8

0

汇票签发日

WBANK

WBANK

CHAR

60

0

票据号

WLZBP

WLZBP

CHAR

60

0

出票行

XNEGP

XNEGP

CHAR

1

0

标识: 反记帐

KKBER

KKBER

CHAR

4

0

信贷控制范围

ZLSCH

SCHZW_BSEG

CHAR

1

0

付款方式

WNAME

WNAME




汇票受票人的名字

WBZOG

WBZOG




汇票出票人


因为有些字段不是bsed的,所以还是需要

然后在BADI 

BAPI_ACC_DOCUMENT_POST更新BSED数据增强

调用BAPI使用 extension2 

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = gs_bkpf
TABLES
accountgl = gt_account
accountreceivable = gt_customer
accountpayable = gt_vendor
currencyamount = gt_currency
return = gt_return
extension2 = gt_etx.


最后我说下,不要使用ABAP Memory传值, 维护起来太麻烦了

接受的人都不知道你哪儿存进去的,也不知哪儿取出来的。

所以用set get函数,只要看到一个,就可以根据另一个 定位到哪儿调用了。


 

BAPI_ACC_DOCUMENT_POST更新BSED数据增强