使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强

业务需求:和银行做一个接口,要通过银行流水产生会计凭证,会计凭证的事务码是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前对相应字段赋值,就行了。
时间: 2025-01-07 03:04:31

使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强的相关文章

【HR系列】SAP HR PA信息类型的创建与增强

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HR系列]SAP HR PA信息类型的创建与增强 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 PA infotype创建与增强:  增强:  1. 输入PM01.  2. 选择SingleScm(单个屏),在Infotype no.中输入想要增强的信息类型编号,然后点击Generate   objects(生成

AS01(创建固定资产)增强 啊

---恢复内容开始--- 查找AS01出口函数 Tcode:SAT(Runtime Analysis,2.0版T-code SE30 ) 选择Transaction 输入AS01,点击Execute执行 在AS01界面填写资产主数据后保存,回到SAT界面,界面为AS01运行过程中的所有步骤,左侧选择Function Modules->CALL FUNCTION,在右侧列Statement/Event中搜索文本'EXIT_',找到出口函数EXIT_SAPLAIST_002 根据出口函数名称EXIT

创建 会计凭证

FUNCTION zrfc_mm018. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(CALLNO) TYPE ZCALLNO *" VALUE(ZFIS005) LIKE ZFIS005 STRUCTURE ZFIS005 *" EXPORTING

会计凭证原因代码增强

使用BAPI_ACC_DOCUMENT_POST 创建会计凭证,用BADI扩展 业务需求:和银行做一个接口,要通过银行流水产生会计凭证,会计凭证的事务码是F-02,查到了BAPI方法BAPI_ACC_DOCUMENT_POST.昨天测试发现,有一些参数在BAPI_ACC_DOCUMENT_POST的输入和表参数中根本没有,如记账码Posting Key.原因代码Reason Code,那怎么把这些字段的值传进去呢?在SDN查了一下相关问题的解决办法,发现遇到这个问题的朋友还挺多,总结了一下,解决

模块 BAPI

MM模块1. BAPI_MATERIAL_SAVEDATA 创建物料主数据注意参数EXTENSIONIN的使用,可以创建自定义字段例如WA_BAPI_TE_MARA-MATERIAL = ITAB_UP-MATNR.T_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'.T_EXTENSIONIN-VALUEPART1 = WA_BAPI_TE_MARA.APPEND T_EXTENSIONIN.WA_BAPI_TE_MARAX-MATERIAL = ITAB_UP-M

BAPI

MM模块 1. BAPI_MATERIAL_SAVEDATA 创建物料主数据 注意参数EXTENSIONIN的使用,可以创建自定义字段 例如:WA_BAPI_TE_MARA-MATERIAL = ITAB_UP-MATNR. T_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'. T_EXTENSIONIN-VALUEPART1 = WA_BAPI_TE_MARA. APPEND T_EXTENSIONIN. WA_BAPI_TE_MARAX-MATERIAL = I

[SAP ABAP开发技术总结]业务对象和BAPI

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 18.3.         业务对象和BAPI 184 18.3.1.     SAP业务对象(SWO1)... 184 18.3.1.1.           业务对象类型的组成... 185 18.3.1.2.           业务对象(BO)设计... 185 18.3.1.2.1.       创建业务表... 185 18.3.1.2.2.       创建

会计凭证BAPI_ACC_DOCUMENT_POST

*&---------------------------------------------------------------------* *& Report ZFIFB107 *& Description 薪酬计提批导开发 *&---------------------------------------------------------------------* *& 开发人员 时间 更改类型 描述 *& CR信息 *&---------

201704 F-02创建财务凭证

一.F-02 创建财务凭证-BDC 期初余额导入程序 程序:ZFIU_LDV_F_02_UPLOAD 创建F-02 凭证: *&---------------------------------------------------------------------------------------------------- CALL TRANSACTION 'F-02' USING it_bdcdata MODE mode_f UPDATE 'S' MESSAGES INTO it_bdcm