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.
       

你可能感兴趣的:(程序人生,ABAPer)