财务凭证 增强 bapi

本文介绍了一种通过BADI(Business Add-In)扩展BAPI_ACC_DOCUMENT_POST的方法,以处理特殊总账凭证。使用BDC(Batch Data Communication)来处理无法通过BAPI插入的数据,并详细阐述了如何创建结构、实现BADI增强以及使用EXTENSION2表参数传递扩展字段的步骤。
摘要由CSDN通过智能技术生成

这个例子比较杂 有bdc的 有bapi的 bapi是badi增强某些字段的

bdc部分利用了 在FUCTION里面用 使用form 需要写到fuction 外

(为什么要用bdc 是因为特殊总账的一些凭证无法通过bapi写入,而bdc本身有一些弊端,不是很特殊的就要用bapi解决 )

里面 关于baid的使用是参照网上的办法一点一点做出来的

经过验证有效

有关增强的部分:

 

在函数里面这个参数

extension2        = it_extension2t[]

这个结构 是参考的这个表 ZACC_DOCUMENT_EXT2T

做的增强

baid增强的具体方法见硬盘oaword文档

【转载加吸收消化--图和实例变成我的了 其他是原文】

 

业务需求:和桌面OA接口,要通过银行流水产生会计凭证,会计凭证的事务码是F-02,BAPI_ACC_DOCUMENT_POST。

有一些参数在BAPI_ACC_DOCUMENT_POST的输入和表参数中根本没有,如记账码Posting Key、原因代码ReasonCode,那怎么把这些字段的值传进去呢?

解决办法大体如下:
    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,如下图:

 

 

双击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: TYPE ANY,
                 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 .
    ENDAT.
    CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
                wa_extension-valuepart3 wa_extension-valuepart4
           INTO ext_value.
    MOVE ext_value TO .
    ASSIGN COMPONENT 'POSNR' OF STRUCTURE TO .
    READ TABLE c_accit WITH KEY posnr =
          INTO wa_accit.
    IF sy-subrc IS INITIAL.
      MOVE-CORRESPONDING TO wa_accit.
      MODIFY c_accit FROM wa_accit INDEX sy-tabix.
    ENDIF.
  ENDLOOP.  
3、使用BAPI_ACC_DOCUMENT_POST参数表EXTENSION2,将扩展字段传入
**********************************************************************
*INTERNAL TABLE DECLARATION
**********************************************************************  
DATA: IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE.
*&—WORKAREA FOR ZACC_DOCUMENT_EXT2

DATA: WA_ZEXTEN LIKE ZACC_DOCUMENT_EXT2. ”ZACC_DOCUMENT_EXT2就是刚才SE11创建的那个结构

*总处理增强

      wa_zext-xnegp =  wa-xnegp."反记账
      wa_zext-rstgr =  wa-rstgr.
      wa_zext-posnr =  wa-itemno_acc. "凭证行项目
      wa_zext-bschl = wa-bschl. "记账码
      it_extension2t-structure  = 'ZACC_DOCUMENT_EXT2T'.
      it_extension2t-valuepart1 = wa_zext.
      append it_extension2t.

    endloop.

    call function 'BAPI_ACC_DOCUMENT_POST'
      exporting
        documentheader    = gd_documentheader
        customercpd       = gd_customercpd
        contractheader    = gd_fica_hd
      importing
        obj_type          = l_type
        obj_key           = l_key
        obj_sys           = l_sys
      tables
        accountgl         = it_accountgl
        accountreceivable = it_accountreceivable
        accountpayable    = it_accountpayable
        accounttax        = it_accounttax
        currencyamount    = it_currencyamount
        criteria          = it_criteria
        valuefield        = it_valuefield
        extension1        = it_ext
        return            = return
        paymentcard       = it_paymentcard
        contractitem      = it_fica_it
        extension2        = it_extension2t[]
        realestate        = it_re.

 

4.完整的函数如下

function z_oa_rfc_bseg.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(BUKRS) TYPE  BUKRS
*"     VALUE(FISC_YEAR) TYPE  GJAHR
*"     VALUE(PSTNG_DATE) TYPE  BUDAT
*"     VALUE(USERNAME) TYPE  USNAM
*"     VALUE(HEADER_TXT) TYPE  BKTXT
*"     VALUE(OACODE) TYPE  CHAR30
*"     VALUE(OAPHOTO) TYPE  CHAR30
*"  EXPORTING
*"     VALUE(RETURNCODE) TYPE  BELNR_D
*"  TABLES
*"      RETURN STRUCTURE  BAPIRET2
*"      ACCOUNTGL STRUCTURE  BAPIACGL09 OPTIONAL
*"      ACCOUNTRECEIVABLE STRUCTURE  BAPIACAR09 OPTIONAL
*"      ACCOUNTPAYABLE STRUCTURE  BAPIACAP09 OPTIONAL
*"      ACCOUNTTAX STRUCTURE  BAPIACTX09 OPTIONAL
*"      CURRENCYAMOUNT STRUCTURE  BAPIACCR09 OPTIONAL
*"      ZCASH STRUCTURE  ZACC_DOCUMENT_EXT2T OPTIONAL
*"      INPUT STRUCTURE  ZOA_INPUT
*"----------------------------------------------------------------------
**"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(BUKRS) TYPE  BUKRS
*"     VALUE(FISC_YEAR) TYPE  GJAHR
*"     VALUE(PSTNG_DATE) TYPE  BUDAT
*"     VALUE(USERNAME) TYPE  USNAM
*"     VALUE(HEADER_TXT) TYPE  BKTXT
*"     VALUE(OACODE) TYPE  CHAR30
*"     VALUE(OAPHOTO) TYPE  CHAR30
*"  EXPORTING
*"     VALUE(RETURNCODE) TYPE  BELNR_D
*"  TABLES
*"      RETURN STRUCTURE  BAPIRET2
*"      ACCOUNTGL STRUCTURE  BAPIACGL09 OPTIONAL
*"      ACCOUNTRECEIVABLE STRUCTURE  BAPIACAR09 OPTIONAL
*"      ACCOUNTPAYABLE STRUCTURE  BAPIACAP09 OPTIONAL
*"      ACCOUNTTAX STRUCTURE  BAPIACTX09 OPTIONAL
*"      CURRENCYAMOUNT STRUCTURE  BAPIACCR09 OPTIONAL
*"      ZCASH STRUCTURE  ZACC_DOCUMENT_EXT2 OPTIONAL
*"      INPUT STRUCTURE  ZOA_INPUT
*"----------------------------------------------------------------------
  tables zoaf.

  data:
    gd_documentheader    like bapiache09,
    gd_customercpd       like bapiacpa09,
    gd_fica_hd           like bapiaccahd,
    it_accountreceivable like table of bapiacar09 with header line,"客户项目
    it_accountgl         like table of bapiacgl09 with header line,"总帐科目项
    it_accounttax        like table of bapiactx09 with header line,
    it_criteria          like table of bapiackec9 with header line,
    it_valuefield        like table of bapiackev9 with header line,
    it_currencyamount    like table of bapiaccr09 with header line,
    it_return            like table of bapiret2   with header line,
    it_receivers         like table of bdi_logsys with header line,
    it_fica_it           like table of bapiaccait with header line,
    it_accountpayable    like table of bapiacap09 with header line,"供应商项目
    it_paymentcard       like table of bapiacpc09 with header line,
    it_ext               like table of bapiacextc with header line,
    it_re                like table of bapiacre09 with header line,
    it_ext2              like table of bapiparex  with header line.

  data  wa like zoa_input.
  data: it_extension2t type standard table of bapiparex with header line.
  data: wa_zext like zacc_document_ext2t.
  data:time(13),temp(23) .
*  data:bdcdatat like bdcdata occurs 0 with header line.
  data: l_type like gd_documentheader-obj_type,
      l_key  like gd_documentheader-obj_key,
      l_sys  like gd_documentheader-obj_sys.

*---------------------------------------------------------------------*
*            * fill_header.                                           *
*---------------------------------------------------------------------*
  gd_documentheader-username   = username.
  gd_documentheader-header_txt = header_txt.               "#EC NOTEXT

  gd_documentheader-comp_code  = bukrs.
  gd_documentheader-doc_type = 'OA'.
  gd_documentheader-fisc_year  = fisc_year.
  gd_documentheader-doc_date   = sy-datum.
  gd_documentheader-pstng_date =  pstng_date.

  gd_documentheader-bus_act    = 'RFBU'.
*---------------------------------------------------------------------* "end header
  data flag .
  read table input with  key bschl = '09' .
  if sy-subrc = 0.
    flag = '1'.
  endif.
  read table input with  key   bschl = '19' .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值