### BAPI-ACC-DOCUMENT-POST 结构字段扩展
#### 概述
在SAP系统中,`BAPI_ACC_DOCUMENT_POST` 是一个重要的业务应用程序接口(BAPI),用于执行财务凭证的过账处理。但在实际应用过程中,可能会遇到现有BAPI无法完全满足特定业务需求的情况,比如需要额外的字段来存储特定的信息。这时候就需要对现有的BAPI进行字段扩展,以增加新的数据字段来满足业务需求。
#### 字段扩展的具体步骤
##### 步骤1:创建新结构
在SE11中创建一个新的结构,这个结构需要包含必要的组件以支持扩展需求。例如,在本案例中,创建的结构需要包含`ITEMNO_ACC`组件,这是因为`BAPI_ACC_DOCUMENT_POST`需要通过行项目号来定位特定的行项目。这里以`ITEMNO_ACC`为例,实际上可以根据具体的业务需求添加更多的字段。
##### 步骤2:实现BADI增强
接下来,需要实现BADI增强(Business Add-In)以支持字段扩展。具体来说,需要实现`ACC_DOCUMENT` BADI中的`CHANGE`方法。在这个方法中,将`BAPI_ACC_DOCUMENT_POST`的参数表`EXTENSION2`传入系统表中。这一步骤可以通过以下步骤完成:
1. 打开SE19,并选择`ACC_DOCUMENT` BADI进行增强。
2. 双击`CHANGE`方法并编写相应的ABAP代码。例如,下面是一个示例代码片段:
```abap
DATA: wa_extension TYPE bapi_parex,
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( 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 'ITEMNO_ACC' 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.
```
这段代码主要实现了以下功能:
- 遍历`EXTENSION2`表中的每一项。
- 创建一个指向当前扩展结构的引用。
- 将扩展字段的值合并到一个变量中。
- 根据`ITEMNO_ACC`读取会计行项目的表`c_accit`。
- 如果读取成功,则更新该行项目的数据。
##### 步骤3:编写测试代码
最后一步是编写测试代码以验证字段扩展是否按预期工作。下面是一个示例测试代码:
```abap
DATA: g_date LIKE sy-datum.
DATA: gheader LIKE bapiache09,
gcurrency LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,
gaccount LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,
gt_accountreceivable LIKE TABLE OF bapiacap09 WITH HEADER LINE,
greturn LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: IT_EXTENSION2 TYPE STANDARD TABLE OF bapi_parex WITH HEADER LINE.
DATA: WA_ZSTR1 LIKE ZSTR1.
*****
WA_ZSTR1-ITEMNO_ACC = 1."凭证行项目
WA_ZSTR1-KIDNO = 'KIDNO测试付款参考'.
WA_ZSTR1-RSTGR = 'A01'."凭证行项目原因代码
IT_EXTENSION2-STRUCTURE = 'ZSTR1'."自建的表结构必须大写
IT_EXTENSION2-VALUEPART1 = WA_ZSTR1.
APPEND IT_EXTENSION2.
***** 抬头
gheader-BUS_ACT = 'F-02'.
gheader-COMP_CODE = '9000'.
gheader-DOC_DATE = '20141209'.
gheader-PSTNG_DATE = '20141209'.
gheader-FISC_YEAR = '2014'.
gheader-DOC_TYPE = 'ZB'.
gheader-USERNAME = sy-uname.
*** 金额行项目1
gheader-REF_DOC_NO = 'gt_bapi-verkf'.
gcurrency-CURRENCY = 'CNY'.
gcurrency-AMT_DOCCUR = 1000.
gcurrency-CURR_TYPE = '00'.
gcurrency-ITEMNO_ACC = 1.
APPEND gcurrency.
*** 金额行项目2
gcurrency-AMT_DOCCUR = -1000.
gcurrency-CURR_TYPE = '00'.
gcurrency-ITEMNO_ACC = 2.
gcurrency-CURRENCY = 'CNY'.
APPEND gcurrency.
*** 行项目1
gt_accountreceivable-ITEMNO_AC
```
这段测试代码主要完成了以下几个动作:
- 定义了所需的变量和数据结构。
- 创建了一个包含扩展字段的新结构`IT_EXTENSION2`。
- 设置了凭证抬头信息。
- 设置了金额行项目信息。
- 准备了行项目信息。
通过以上步骤,可以有效地扩展`BAPI_ACC_DOCUMENT_POST`以满足特定的业务需求,同时确保系统的稳定性和完整性。这种扩展方式不仅可以增加新的字段来存储特定的信息,还可以提高系统的灵活性和适应性。
评论0
最新资源