创建增强结构
如图所示,上面是行项目的增强字段,最下方两个是抬头的增强字段,我写在了一个结构里
BAPI 赋值
组装好增加结构数据后,直接调用BAPI_ACC_DOCUMENT_POST,将增强结构放入extension2即可
DATA: ls_ext2 TYPE zfis_en001, "扩展结构
lt_extension2 TYPE STANDARD TABLE OF bapiparex, "扩展数据
ls_extension2 TYPE bapiparex.
CLEAR: ls_ext2,ls_extension2.
ls_ext2-posnr = lv_item.
ls_ext2-bschl = <lfs_one_doc>-bschl. "记帐代码
ls_ext2-rstgr = <lfs_one_doc>-rstgr. "原因代码
ls_ext2-xref1_hd = <lfs_one_doc>-xref1_hd. "参考码(标题)1
ls_ext2-xref2_hd = <lfs_one_doc>-xref2_hd. "参考码(抬头)2
ls_ext2-numpg = <lfs_one_doc>-numpg. "附件张数
IF <lfs_one_doc>-anln1 IS NOT INITIAL.
ls_ext2-anbwa = <lfs_one_doc>-bewar. "资产交易类型
ls_ext2-anln1 = <lfs_one_doc>-anln1.
ls_ext2-anln2 = '0000'.
ENDIF.
ls_ext2-ebeln = <lfs_one_doc>-ebeln."采购凭证编号
ls_ext2-ebelp = <lfs_one_doc>-ebelp."采购凭证的项目编号
ls_ext2-zhtlx = ls_one_doc-zhtlx. "抬头增强字段:合同类型
ls_ext2-zkxxz = ls_one_doc-zkxxz. "抬头增强字段:款项性质
ls_extension2-structure = 'ZFIS_EN001'.
ls_extension2-valuepart1 = ls_ext2.
APPEND ls_extension2 TO lt_extension2.
创建实施
se19-创建ACC_DOCUMENT增强实施,过滤器类型:AWTYP,过滤器值:BKPFF 会计凭证直接输入
实现IF_EX_ACC_DOCUMENT~CHANGE代码,因为抬头是结构,所以我把抬头的增强放在里行项目处理代码当中,循环覆盖也不会有影响,如果逻辑复杂可以分开写
METHOD if_ex_acc_document~change.
DATA: ls_extension TYPE bapiparex,
ext_value(960) TYPE c,
ls_accit TYPE accit,
ls_acchd TYPE acchd,
l_ref TYPE REF TO data.
DATA:lv_xref1_hd TYPE accit-xref1_hd,
lv_xref2_hd TYPE accit-xref2_hd,
lv_numpg TYPE accit-numpg,
lv_rldnr TYPE accit-proj_ledger.
DATA:ls_accit1 TYPE accit.
DATA:ls_acchd1 TYPE acchd.
FIELD-SYMBOLS: <fs_struc> TYPE any,
<fs_field> TYPE any.
SORT c_extension2 BY structure.
LOOP AT c_extension2 INTO ls_extension WHERE structure NE ''.
AT NEW structure.
CREATE DATA l_ref TYPE (ls_extension-structure).
ASSIGN l_ref->* TO <fs_struc>.
ENDAT.
CONCATENATE ls_extension-valuepart1 ls_extension-valuepart2
ls_extension-valuepart3 ls_extension-valuepart4
INTO ext_value.
MOVE ext_value TO <fs_struc>.
ASSIGN COMPONENT 'BUZEI' OF STRUCTURE <fs_struc> TO <fs_field>.
IF NOT <fs_field> IS ASSIGNED.
ASSIGN COMPONENT 'POSNR' OF STRUCTURE <fs_struc> TO <fs_field>.
ENDIF.
READ TABLE c_accit WITH KEY posnr = <fs_field>
INTO ls_accit.
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING <fs_struc> TO ls_accit.
MODIFY c_accit FROM ls_accit INDEX sy-tabix.
ENDIF.
" 直接更新凭证抬头字段
ASSIGN COMPONENT 'ZKXXZ' OF STRUCTURE <fs_struc> TO <fs_field>.
IF sy-subrc = 0.
c_acchd-zkxxz = <fs_field>.
ENDIF.
ASSIGN COMPONENT 'ZHTLX' OF STRUCTURE <fs_struc> TO <fs_field>.
IF sy-subrc = 0.
c_acchd-zhtlx = <fs_field>.
ENDIF.
ENDLOOP.
ENDMETHOD.
检查字段
se38-查看程序LFACIF4S中p_acc中,是否包含你要的增强字段,如果没有,se38运行标准程序SAPFACCG,完成后再次查看是否有增强字段
前台增强链接:
fb01/f-02增强 https://blog.csdn.net/weixin_45293769/article/details/149088534?spm=1011.2415.3001.5331
fb02/fb03增强 https://blog.csdn.net/weixin_45293769/article/details/149093684?spm=1011.2415.3001.5331