ABAP:BAPI_ACC_DOCUMENT_POST扩展字段

1、se11创建结构,必须包含行项目号POSNR字段,和其他需要扩展的字段,如记账码Posting Key、原因代码  
   Reason Code等;
2、SE19实现BADI增强ACC_DOCUMENT,这个增强是用来将BAPI_ACC_DOCUMENT_POST参数表EXTENSION2传入系统表
3、使用BAPI_ACC_DOCUMENT_POST参数表EXTENSION2,将扩展字段传入。
以下详细列出方法:
1、略
2、引用bapi中的extession2表,将字段扩展进去。
   但是必须得通过BADI增强将字段扩展进去。
Step1:创建Badi

tcode:SE19

此处有2种方式来创建增强,“Classic BADI”或“New BADI”

创建Classic Badi名称:ACC_DOCUMENT

或创建New Badi名称:BADI_ACC_DOCUMENT


这篇文章里以创建Classic Badi为例。

命名为Z_MY_ACC_DOCUMENT

 Step2:增加一个Filter

新增一条BKPFF的Filter

 

Step3:保存

如果保存时出现了下面这个消息,说明你必须将你做的Classic Badi迁移到New Badi。


此时可以选择已有的或创建新的Badi Enhancement Implementation。我们选择创建新的。

 

 

 

创建好之后,系统会提示消息。


Step5:编辑代码

在New Badi里面显示Z_MY_ACC_DOCUMENT,此时将不会报出需要删除Classic Badi的警告了。

双击CHANGE方法即可进入编辑。

代码例子:

[c-sharp] view plaincopy
  1. METHOD IF_EX_ACC_DOCUMENT~CHANGE.  
  2.   DATA: WA_EXTENSION TYPE BAPIPAREX,  
  3.         ZEXT_DATA    TYPE Zsfi_bseg.  "此处为1所建的结构
  4.   
  5.   FIELD-SYMBOLS:  TYPE ACCIT.  
  6.   IF C_EXTENSION2[] IS NOT INITIAL.  
  7.     LOOP AT C_EXTENSION2 INTO WA_EXTENSION  
  8.                          WHERE STRUCTURE 'ZSFI_BSEG' 
  9.       ZEXT_DATA WA_EXTENSION-VALUEPART1.  
  10.       READ TABLE C_ACCIT ASSIGNING  WITH KEY POSNR ZEXT_DATA-POSNR.  
  11.       IF SY-SUBRC 0.  
  12.        -ABPER ZEXT_DATA-ABPER.  
  13.        -ZZCASHFLOW ZEXT_DATA-ZZCASHFLOW.  
  14.         -BSCHL ZEXT_DATA-BSCHL.  
  15.        -XREF1_HD ZEXT_DATA-XREF1_HD.  
  16.       ENDIF.  
  17.     ENDLOOP.  
  18.   ENDIF.  
  19. ENDMETHOD.  
代码释义

CHANGE方法中参数FLT_VAL,C_ACCHD,C_ACCIT,C_ACCCR,C_ACCWT,C_ACCTX均与凭证数据相关。

C_EXTENSION2中传入的数据即为BAPI_ACC_DOCUMENT_POST中EXTENSION2参数。

BAPIPAREX-TE_STRUC为数据字典中结构的名称,其余为扩展数据。

上面例子中,生成BAPI的EXTENTION2参数时,就是按照ZKS_OA_ACC_EXT的数据结构顺序写入的,读取时也按照相同的方式读取即可。

根据参数里面的类型和说明来判断某个参数对应凭证中的什么数据,将BAPI中无法传入的数据从EXTENTION2里面取出,传入CHANGE的参数里面即可。

3、调用BAPI,引用Extenssion2.

 READ TABLE  lt_alv INDEX 1.
   IF sy-subrc 0.
     documentheader-comp_code  lt_alv-bukrs.
     documentheader-fisc_year  lv_endda+0(4)..
     documentheader-fis_period lv_endda+4(2).
     documentheader-doc_date   lv_endda.
     documentheader-pstng_date lv_endda.
     documentheader-doc_type   'SA'.
     documentheader-header_txt '计提存货跌价准备'.
     documentheader-username   sy-uname.
     LOOP AT  lt_alv.
       item item 1.
       accountgl-itemno_acc  item.
       accountgl-comp_code   lt_alv-bukrs.
       accountgl-doc_type    'SA'.
       accountgl-plant       lt_alv-werks.
       accountgl-gl_account  '1471000010'.
       accountgl-material     lt_alv-matnr.
       APPEND accountgl.
       currencyamount-itemno_acc  item.
       currencyamount-currency    'CNY'.
       currencyamount-amt_doccur   lt_alv-zytje -).
       APPEND currencyamount.
       CLEAR extension2.
       CLEAR wa_zsfi040.
       wa_zsfi040-posnr item.
       wa_zsfi040-bschl      '50'        "记账代码 增强字段
       extension2-structure  'ZSFI040'.
       extension2-valuepart1 wa_zsfi040.
       APPEND extension2.
       CLEAR:accountgl,currencyamount.
       CLEAR:lt_alv-matnr,lt_alv-zchemc,
             lt_alv-maktx,lt_alv-meins,
             lt_alv-bklas,lt_alv-bkbez,
             lt_alv-zkckm,lt_alv-zkckmz,
             lt_alv-zcykm,lt_alv-zcykmz,
             lt_alv-zbqcy,lt_alv-zqmze,
             lt_alv-zqmsl,lt_alv-zqmdj,
             lt_alv-zkbdj,lt_alv-zdjce.
       COLLECT lt_alv INTO lt_salv.
     ENDLOOP.
     READ TABLE lt_salv INDEX 1.
     item item 1.
     accountgl-itemno_acc  item.
     accountgl-comp_code   lt_salv-bukrs.
     accountgl-doc_type    'SA'.
     accountgl-plant       lt_salv-werks.
     accountgl-gl_account  '6701000020'.
     APPEND accountgl.
     currencyamount-itemno_acc  item.
     currencyamount-currency    'CNY'.
     currencyamount-amt_doccur   lt_salv-zytje .
     APPEND currencyamount.
     wa_zsfi040-posnr item.
     wa_zsfi040-bschl      '40'        "记账代码
     extension2-structure  'ZSFI040'.
     extension2-valuepart1 wa_zsfi040.
     APPEND extension2.
     CLEAR lt_salv.
     CLEAR lt_alv.
     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
       EXPORTING
         documentheader documentheader
       TABLES
         accountgl      accountgl
         currencyamount currencyamount
         return         return
         extension2     extension2.
   ENDIF.
   CLEAR:documentheader,accountgl[],currencyamount[],extension2[].
   READ TABLE return WITH KEY type 'E'.
   IF sy-subrc <> 0.
     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         wait   'X'
       IMPORTING
         return return.
   ELSE.
     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
       IMPORTING
         return return.
   ENDIF.
   LOOP AT return.
*将返回日志记入LOG
     gs_log-type    return-type.
     gs_log-message return-message.
     APPEND gs_log TO gt_log.
   ENDLOOP.
   PERFORM display_log.
   CLEAR:gt_log[],return[] .


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值