首页 > 代码库 > 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强
使用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 Code2、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 ITEMDATA: ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09.*&—CURRENCY ITEMSDATA: CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09.*&—-RETURN PARAMETERDATA: RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE.*&—-it_extension2 ITEMSDATA: IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE.*&—WORKAREA FOR ZEXTENDATA: 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. *执行BAPICALL 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前对相应字段赋值,就行了。
使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。