FB03查看凭证
对于特殊总账类型为W的,双击进入可见出票人出票行 票据号等信息
这些数据是保存在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里赋值
发现这里面也没有票据号信息,至于页数啊之类的信息
然后我有找其他增强,出口之类的,没找到合适的。
后来索性直接在源码里查找BSED
最后发现都不能用……
查找SAP SCN 等,也没有特别好的解决方案。
SCN上也有人提出过这个问题,没解决
https://archive.sap.com/discussions/thread/1461635
最后的解决办法:隐士增强+BADI
增强位置1: FI_DOCUMENT_CHECK
一进来,先检查是否是W类型特殊总账(用get函数获取,set操作在 调用bapi的时候 赋值)
如果是,把char_w 改为U
在函数最后,改回去
增强位置2:LFACIF5D
form最后的地方
把exten 数据传过来,传给bsed数据
这里特殊声明下:
因为这个demo只涉及特殊总账类型为W的,其他特殊总账不考虑BSED,
这个得根据所在项目业务来确定,如果除了W还有 S或者其他等类型的,再多加个判断即可。
增强结构比如下面字段
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使用 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函数,只要看到一个,就可以根据另一个 定位到哪儿调用了。