BAPI_ACC_DOCUMENT_POST 字段增强

1、se11创建结构,必须包含行项目号POSNR字段,和其他需要扩展的字段,如记账码Posting Key、原因代码Reason Code
    2、SE19实现BADI增强,这个增强是用来将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前对相应字段赋值,就行了。

时间: 2024-08-09 22:03:01

BAPI_ACC_DOCUMENT_POST 字段增强的相关文章

物料主数据自定义字段增强

1.  SE11 创建自定义表 ZPARTAPPEND 2. SPRO--后勤-常规--物料主数据 -- 配置物料主记录 --  创建定制子屏幕的程序 3. SE80 -- 输入函数组 ZMGD1 在屏幕 0001 里增加 三个 函数: 代码如下: *&---------------------------------------------------------------------* *&      Module  DISABLE_FIELD  OUTPUT *&-----

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

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

会计凭证原因代码增强

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

增强(enhancement)

增强的目的就是标准的sap正常的业务系统不能满足实际需求. 但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口. 比如:1:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型.2:在需要界面增强时,比如用户对某个字段要求大写,但是最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入.还有的模块能对输入数据检查,甚至实现自动替代等功能.3:有不规则业务时,比如

由订单创建收款凭证

*&---------------------------------------------------------------------**& Report ZFI_DOCU_IMPORT*&*&---------------------------------------------------------------------**&*&*&--------------------------------------------------

Lucene的例子

lucene爬数据库中的数据无非也是查询数据.所有我们用lucene搜索数据主要有下面几个步骤:(代码紧供参考)       一  ,  从数据库中查数据 ====爬数据  -------------1 public ArrayList<BaseItem> getDate(String sql) throws SQLException {  ArrayList<BaseItem> item = new ArrayList<BaseItem>();  ConnBase d

Sap Enhancement种类

增强(enhancement)的概念其实很广,SAP标准系统之上的所有二次开发,我们都可以理解为增强,做增强的目的就是标准的sap正常的业务系统 不能满足实际需求,所以我们在标准的系统基础进行增加不同的功能来达到不同企业的要求,换句话说我们今天开发过程中所有的ADD-ON都可以说是增强开发. 但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口. 比如:1:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型.2:在

9大Python最常用的数据分析库,在2018都做了哪些更新?

1. NumPy 一般我们会将科学领域的库作为清单打头,NumPy是该领域的主要软件库之一.它旨在处理大型的多维数组和矩阵,并提供了很多高级的数学函数和方法,因此可以用它来执行各种操作. 在过去一年,开发团队对该库进行了大量改进.除了错误修复和解决兼容性问题之外,关键的变更还包括样式改进,即NumPy对象的打印格式.此外,一些函数现在可以处理任意编码的文件,只要这些编码受Python支持. 2. SciPy 另一个科学计算核心库SciPy,基于NumPy而构建,并扩展了NumPy的功能.SciP

SAP S4/HANA BP屏幕增强添加自定义字段(BDT方式)

喜欢博主的读者也许会意识到,这是本博客中第一篇有关屏幕增强的文章.之前没有总结过相关的东西,除了因为相关经验有限之外,我个人也是不喜欢所谓dynpro编程的,它有许多“潜规则”一样的东西要记住,想要运用熟练,就需要花些力气去学,而它又十分老旧,在SAP的发展路线中处于即将被淘汰的地位..即便学成,可能也没什么用处. 但是在S4开始普及的这段时间里,我们毕竟还是使用着GUI.过去的供应商.客户的事务代码被废弃,相关的功能被整合到事务代码BP(Business Partner)中,因此相应的增强也要