1. BAPI :BAPI_ACC_DOCUMENT_POST 相关增强
附加结构需要增强 SE18:ACC_DOCUMENT(BAPI_ACC_DOCUMENT_POST字段扩展)中的方法CHANGE
示例代码:
METHOD IF_EX_ACC_DOCUMENT~CHANGE.
DATA: WA_EXTENSION TYPE BAPIPAREX,
EXT_VALUE(960) TYPE C,
WA_ACCIT TYPE ACCIT,
L_REF TYPE REF TO DATA.
DATA: WA_EXTEN TYPE BAPIPAREX.
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.
ENDMETHOD.
2. 更改会计核算凭证 增强: SE18:AC_DOCUMENT
用到比较多的两个方法:CHANGE_INITIAL 和 CHANGE_AFTER_CHECK
其中CHANGE_INITIAL 是在 替代起作用前调用。
CHANGE_AFTER_CHECK 是在替代程序调用后启用。
示例代码:
method IF_EX_AC_DOCUMENT~CHANGE_INITIAL.
DATA:IT_ACCIT TYPE ACCIT_T.
DATA:WA_ACCIT TYPE ACCIT.
DATA:IT_SUB_T TYPE ACCIT_SUB_T.
DATA:WA_ACCIT_SUB TYPE ACCIT_SUB,
LV_BKTXT TYPE BKTXT.
IT_ACCIT = IM_DOCUMENT-ITEM[].
LOOP AT IT_ACCIT INTO WA_ACCIT WHERE koart = 'K' OR KOART = 'D' OR KOART = 'S' OR
koart = 'A' OR KOART = 'M' .
CHECK WA_ACCIT-bukrs eq '2050' OR WA_ACCIT-bukrs eq '2070' OR WA_ACCIT-bukrs eq '2080' OR WA_ACCIT-bukrs eq '2090'.
MOVE-CORRESPONDING WA_accit to wa_accit_sub .
wa_accit_sub-ZZ00004 = wa_accit_sub-xref1. ”增强字段
wa_accit_sub-ZZ00005 = wa_accit_sub-xref2. ”增强字段
wa_accit_sub-ZZ00006 = wa_accit_sub-xref3. ”增强字段
APPEND wa_accit_sub TO IT_SUB_T.
ENDLOOP.
EX_DOCUMENT-ITEM[] = IT_SUB_T[].
EX_DOCUMENT-HEADER = IM_DOCUMENT-HEADER-BKTXT.
LV_BKTXT = EX_DOCUMENT-HEADER.
EXPORT LV_BKTXT from LV_BKTXT TO MEMORY ID 'LV_BKTXT'. " 压入内存
*&--------------------------------------------------------------*
endmethod.
method IF_EX_AC_DOCUMENT~CHANGE_AFTER_CHECK.
EX_DOCUMENT-HEADER = IM_DOCUMENT-HEADER-BKTXT.
************************************************
* 在此处写具体逻辑
DATA:
l_flag TYPE c,
l_flag1 TYPE c,
l_tcode TYPE sy-tcode,
l_bukrs TYPE bukrs,
l_bwart TYPE bwart,
l_sobkz TYPE sobkz,
l_kzbew TYPE kzbew,
l_str(20) TYPE c,
l_string TYPE string,
l_kzvbr TYPE kzvbr.
CLEAR:
l_flag,
l_tcode,
l_bukrs,
l_bwart,
l_sobkz,
l_kzbew,
l_str,l_string,
l_kzvbr.
*ADD 20161212 只有表ZTYFIT00300进行维护的事务码才进行替代
* 调用自定义函数-凭证文本替换
CALL FUNCTION 'ZTYFM_FI_BADI_JCPZTD'
EXPORTING
i_document = im_document
IMPORTING
e_document = ex_document
e_flag = l_flag
e_tcode = l_tcode
e_bukrs = l_bukrs
e_bwart = l_bwart
e_sobkz = l_sobkz
e_kzbew = l_kzbew
e_kzvbr = l_kzvbr.
endmethod.

这篇博客详细介绍了在FI凭证过账中如何进行BAPI_ACC_DOCUMENT_POST和AC_DOCUMENT的相关增强,包括在SE18中扩展字段和方法,以及在变更方法中处理增强字段的逻辑。示例代码展示了在不同阶段如何操作凭证信息。


被折叠的 条评论
为什么被折叠?



