业务需求:和银行做一个接口,要通过银行流水产生会计凭证,会计凭证的事务码是F-02,查到了BAPI方法BAPI_ACC_DOCUMENT_POST。昨天测试发现,有一些参数在BAPI_ACC_DOCUMENT_POST的输入和表参数中根本没有,如记账码Posting Key、原因代码Reason Code,那怎么把这些字段的值传进去呢?在SDN查了一下相关问题的解决办法,发现遇到这个问题的朋友还挺多,总结了一下,解决办法大体如下:
    1、se11创建结构,必须包含行项目号POSNR字段,和其他需要扩展的字段,如记账码Posting Key、原因代码Reason Code
    2、SE19实现BADI增强ACC_DOCUMENT,这个增强是用来将BAPI_ACC_DOCUMENT_POST参数表EXTENSION2传入系统表
    3、使用BAPI_ACC_DOCUMENT_POST参数表EXTENSION2,将扩展字段传入

详细步骤如下:
1、创建结构,se11,很简单,不再赘述,如下图:

2、SE19实现BADI增强ACC_DOCUMENT
通过ACC_DOCUMENT help文档知道,方法CHANGE用来完成字段的扩展,还有一个需要注意的是参考业务类型,这个一定要选对,不然执行BAPI的时候不会调用这个BADI,我用的是BKPFF,如下图:

激活这个BADI实现。

双击change方法创建,可以查看ACC_DOCUMENT 的实现例子CL_EXM_IM_ACC_DOCUMENT(R/3 4.7版本,其他版本可能名称不一样),,将这个实例的change方法的代码直接copy过来,激活方法,代码如下

***********************************************************************
* Example to move fields from BAPI parameter EXTENSION2 to structure  *
* ACCIT (accounting document line items).                             *
* The dictionary structure (content for EXTENSION2-STRUCTURE) must    *
* contain field POSNR, (TYPE POSNR_ACC) to indentify the correct line *
* item of the internal table ACCIT.                                   *
***********************************************************************

DATA: wa_extension   TYPE bapiparex,
        ext_value(960) TYPE c,
        wa_accit       TYPE accit,
        l_ref          TYPE REF TO data.

FIELD-SYMBOLS: <l_struc>TYPE ANY,
                 <l_field>TYPE ANY.

SORT c_extension2 BY structure.

LOOP AT c_extension2 INTO wa_extension.
    AT NEW structure.
      CREATE DATA l_ref TYPE (wa_extension-structure).
      ASSIGN l_ref->* TO <l_struc>.
    ENDAT.
    CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
                wa_extension-valuepart3 wa_extension-valuepart4
           INTO ext_value.
    MOVE ext_value TO <l_struc>.
    ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc>TO <l_field>.
    READ TABLE c_accit WITH KEY posnr = <l_field>
          INTO wa_accit.
    IF sy-subrc IS INITIAL.
      MOVE-CORRESPONDING <l_struc>TO wa_accit.
      MODIFY c_accit FROM wa_accit INDEX sy-tabix.
    ENDIF.
  ENDLOOP.

3、使用BAPI_ACC_DOCUMENT_POST参数表EXTENSION2,将扩展字段传入
********************************************************************** 
*INTERNAL TABLE DECLARATION
**********************************************************************

*&—-G/L ACCOUNT ITEM
DATA: ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09.

*&—CURRENCY ITEMS
DATA: CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09.

*&—-RETURN PARAMETER
DATA: RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE.

*&—-it_extension2 ITEMS
DATA: IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE.

*&—WORKAREA FOR ZEXTEN
DATA: WA_ZEXTEN LIKE ZEXTEN. ”ZEXTEN就是刚才SE11创建的那个结构

********************************************************************** 
*赋值
**********************************************************************

*& EXTENSION2 扩展字段增强部分

WA_ZEXTEN-POSNR = '0000000010'. "凭证行项目
  WA_ZEXTEN-RSTGR = '171'. "凭证行项目原因代码

IT_EXTENSION2-STRUCTURE  = 'ZEXTEN'.
  IT_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
  APPEND IT_EXTENSION2.

*其他参数表的字段赋值如下例

HEADER-HEADER_TXT = 'TEST HEADER'."凭证抬头文本
  HEADER-USERNAME = SY-UNAME.  "用户名
  HEADER-COMP_CODE = '1000'."公司代码
  HEADER-DOC_DATE = '20090618'."凭证中的凭证日期
  HEADER-PSTNG_DATE = '20090618'."凭证中的记帐日期
  HEADER-DOC_TYPE = 'S1'."凭证类型
*  HEADER-BUS_ACT = 'RFBU'."交易业务

WA_ACCOUNTGL-ITEMNO_ACC = '0000000010'. "会计凭证行项目编号
  WA_ACCOUNTGL-GL_ACCOUNT = '1002010105'. "总分类帐帐目
*  WA_ACCOUNTGL-ITEM_TEXT = .
  WA_ACCOUNTGL-BUS_AREA = '8000'. "业务范围
  APPEND WA_ACCOUNTGL TO ACCOUNTGL.
  CLEAR WA_ACCOUNTGL.

WA_ACCOUNTGL-ITEMNO_ACC = '0000000020'. "会计凭证行项目编号
  WA_ACCOUNTGL-GL_ACCOUNT = '1301040000'. "总分类帐帐目
  WA_ACCOUNTGL-BUS_AREA = '8000'. "业务范围
*WA_ACCOUNTGL-ITEM_TEXT = .
*wa_accountgl-ACCT_TYPE = 'R'.
  APPEND WA_ACCOUNTGL TO ACCOUNTGL.
  CLEAR WA_ACCOUNTGL.

WA_CURRENCY_AMOUNT-ITEMNO_ACC = '0000000010'. "行项目编号
  WA_CURRENCY_AMOUNT-AMT_DOCCUR = '500'. "金额
  WA_CURRENCY_AMOUNT-CURRENCY = 'RMB'.
  APPEND WA_CURRENCY_AMOUNT TO CURRENCY_AMOUNT.
  CLEAR WA_CURRENCY_AMOUNT.

WA_CURRENCY_AMOUNT-ITEMNO_ACC = '0000000020'.
  WA_CURRENCY_AMOUNT-AMT_DOCCUR = '-500'.
  WA_CURRENCY_AMOUNT-CURRENCY = 'RMB'.
  APPEND WA_CURRENCY_AMOUNT TO CURRENCY_AMOUNT.
  CLEAR WA_CURRENCY_AMOUNT.

*执行BAPI
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
  DOCUMENTHEADER = HEADER
*CUSTOMERCPD =
*CONTRACTHEADER =
*IMPORTING
*OBJ_TYPE =
*OBJ_KEY =
*OBJ_SYS =
  TABLES
  ACCOUNTGL = ACCOUNTGL

*ACCOUNTRECEIVABLE =
*ACCOUNTPAYABLE =
*ACCOUNTTAX =
  CURRENCYAMOUNT = CURRENCY_AMOUNT

*CRITERIA =
*VALUEFIELD =
*EXTENSION1 =
  RETURN = RETURN
*PAYMENTCARD =
*CONTRACTITEM =
  EXTENSION2 = IT_EXTENSION2
*REALESTATE =
  .

IF RETURN-TYPE NA 'EA'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
  ENDIF.
如果还需要扩展其他字段,在结构ZEXTEN加入,然后在调用BAPI前对相应字段赋值,就行了。

JAVA 填写结构参数是 前面00000000001 是行项目,后面104是原因代码,所以值只要按照顺序填写进去就行了。

 
 
 

使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段(转)的更多相关文章

  1. 如何在调用Marketing Cloud contact创建API时增加对扩展字段的支持

    需求:扩展字段"微信ID"是我创建出来的extension field,我想用Marketing Cloud提供的contact creation API,在创建contact时也 ...

  2. 如何在Marketing Cloud里创建extension field扩展字段

    首先在Marketing Cloud里找到创建扩展字段的tile入口,搜索关键字extension: 这会进入Fiori应用"Custom fields",能看到系统里所有创建好的 ...

  3. Log4net创建日志及简单扩展

    转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...

  4. 使用Log4net创建日志及简单扩展

    如何使用Log4net创建日志及简单扩展 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的 ...

  5. U9单据打印模板自定义扩展字段显示名称

    UBF打印模板中,单据自定义扩展字段显示均为扩展字段值集值编码,而在实际运用过程中打印时需要显示扩展字段名称,具体实现方法如下 方式一:采用SQL系统定义函数[dbo].[fn_GetSegName] ...

  6. 【FICO系列】SAP 创建会计凭证(FB01)的BAPI

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 创建会计凭证(FB01) ...

  7. VS自定义项目模板:[2]创建VSIX项目模板扩展

    VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...

  8. 如何创建一个Edge 浏览器扩展

    随着微软Windows 10 年度更新的发布,数次延宕的Edge 扩展功能终于得到了官方正式支持.我在我的另外一个博客上发布了如何创建一个Edge 浏览器扩展的博文,链接如下: https://blo ...

  9. ThinkCMF-smeta扩展字段

    ThinkCMF - 添加文章功能 没有上传文件功能,为了扩展这一功能,在页面加入如下代码: <tr> <td> <div style="text-align: ...

随机推荐

  1. Hibernate,JPA注解@OneToMany_Map

    用例代码如下: 数据库DDL语句 1,CAT表 create table CAT ( id VARCHAR2(32 CHAR) not null, create_time TIMESTAMP(6), ...

  2. Hibernate,JPA注解@PrimaryKeyJoinColumn

    一对一(One-to-one),主键关联 用例代码如下: 数据库DDL语句 1,CAT表 create table CAT ( id CHAR) not null, create_time ), up ...

  3. org.hibernate.PropertyNotFoundException:could not find a getter for name in class ....

    Hibernate创建持久化类须符合JavaBean的规范,"get","set"后面紧跟属性的名字,并且属性名的首字母为大写.如果不遵守这个规则,Hibern ...

  4. 【PHP设计模式 09_ZhuangShiQi.php】装饰器模式 (decorator)

    <?php /** * [装饰器模式 (decorator)] * 有时候发布一篇文章需要经过很多人手,层层处理 */ header("Content-type: text/html; ...

  5. 杭电1009-FatMouse' Trade

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. Java中的ClassLoader

      Java中类的加载过程(如Dog类):   通过类型信息定位Dog.class文件. 载入Dog.class文件,创建相应的Class对象. 执行父类的静态字段定义时初始化语句和父类的静态初始化块 ...

  7. WP8.1简单项目 《在线词典》

    为什么要做这个词典? 学了正则表达式要运用 增加WP开发熟练度 项目中运用了那些技术? HttpClient 正则表达式 数据绑定 详解 通过http://cn.bing.com/dict/searc ...

  8. corefile的设置与使用

    一.简介 corefile是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息. 二.corefile的设置 默认情况下,程序崩溃是不会生成corefi ...

  9. COM技术の接口

    什么是接口 DLL的接口可以理解为其导出的那些函数,C++类的接口则是该类的一个成员函数集. 对于COM来说,接口是一个包含一个函数指针数组的内存结构,每一个数组元素包含的是一个由组件所实现的函数的地 ...

  10. js表单操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...