FI 凭证过账相关增强

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

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_太亿真仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值