这个例子比较杂 有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' .