SAP FI财务凭证冲销

冲销调用FUNCTION 'FI_REFERENCE_CREATE'实现

主要参数:冲销凭证,会计年度,公司代码。冲销原因,本期冲销还是上期冲销期间的选择。

FUNCTION ZFIFM_XXXX.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_BELNR) TYPE  BELNR_D
*"     VALUE(I_BUKRS) TYPE  BUKRS
*"     VALUE(I_GJAHR) TYPE  GJAHR
*"     VALUE(I_RE_DATE) TYPE  BUDAT OPTIONAL
*"     VALUE(I_REASON_REV) TYPE  STGRD OPTIONAL
*"  EXPORTING
*"     REFERENCE(E_BELNR) TYPE  BELNR_D
*"     REFERENCE(E_BUKRS) TYPE  BUKRS
*"     REFERENCE(E_GJAHR) TYPE  GJAHR
*"     REFERENCE(E_BUDAT) TYPE  BUDAT
*"  TABLES
*"      ET_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------

  DATA:
    LV_BUKRS    TYPE ACCIT-BUKRS,
    LV_GJAHR    TYPE ACCIT-GJAHR,
    LV_BELNR    TYPE ACCIT-BELNR,
    LV_RE_DATE  TYPE BUDAT,
    LT_REVERSAL TYPE BAPIACREV,
    LS_REVERSAL TYPE BAPIACREV,
    LV_OBJ_TYPE TYPE BAPIACREV-OBJ_TYPE,
    LV_OBJ_KEY  TYPE BAPIACREV-OBJ_KEY,
    LV_OBJ_SYS  TYPE BAPIACREV-OBJ_SYS,
    LV_BUS_ACT  TYPE BAPIACHE09-BUS_ACT VALUE 'RFBU',
    LT_RETURN   TYPE STANDARD TABLE OF BAPIRET2,
    LS_RETURN   TYPE BAPIRET2.

  DATA: LS_BKPF TYPE BKPF.

  DATA: LV_BUKRS1 TYPE BUKRS,
        LV_GJAHR1 TYPE GJAHR,
        LV_MONAT1 TYPE MONAT.
  DATA:LV_STR TYPE STRING.
  DATA:LV_TCODE TYPE SY-TCODE.

  CLEAR: LV_BELNR,
         LV_BUKRS,
         LV_GJAHR,
         LV_RE_DATE,
         LV_TCODE.

  LV_BELNR   = I_BELNR.
  LV_BUKRS   = I_BUKRS.
  LV_GJAHR   = I_GJAHR.
  LV_RE_DATE = I_RE_DATE.
  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF LS_BKPF
    FROM BKPF
   WHERE BELNR = LV_BELNR
     AND BUKRS = LV_BUKRS
     AND GJAHR = LV_GJAHR.

  IF SY-TCODE = 'ZFI1143'.
    "ADD BY C-ZHANGQ15 20210910 修正BKPF - TCODE 记录
    IMPORT LV_TCODE = LV_TCODE FROM MEMORY ID 'ZFI1143_TCODE'.
    IF LV_TCODE IS NOT INITIAL.
      SY-TCODE =  LV_TCODE.
    ELSE.
      SY-TCODE = 'ZFI1004'.
    ENDIF.
    FREE MEMORY ID 'ZFI1143_TCODE'.
    "ADD END
  ENDIF.


  CALL FUNCTION 'FI_REFERENCE_CREATE'
    EXPORTING
      I_AWTYP           = 'BKPFF'
      I_BUKRS           = LV_BUKRS
      I_GJAHR           = LV_GJAHR
      I_BELNR           = LV_BELNR
*     I_AWKEY           = ' '
    IMPORTING
      E_AWTYP           = LS_REVERSAL-OBJ_TYPE
      E_AWKEY           = LS_REVERSAL-OBJ_KEY
      E_AWSYS           = LS_REVERSAL-OBJ_SYS
    EXCEPTIONS
      OBJECT_TYPE       = 1
      MISSING_PARAMETER = 2.
  IF SY-SUBRC = 0.
    LS_REVERSAL-OBJ_KEY_R  = LS_REVERSAL-OBJ_KEY.
    LS_REVERSAL-PSTNG_DATE = LV_RE_DATE."gv_rev_data.

*    IF i_reason_rev IS NOT INITIAL.
    IF LV_RE_DATE+0(6) = LS_BKPF-BUDAT+0(6).
      LS_REVERSAL-REASON_REV = '03'."uf05a-stgrd.
      LS_REVERSAL-PSTNG_DATE = LS_BKPF-BUDAT.
      E_BUDAT = LS_BKPF-BUDAT.
    ELSE.
      "ELSEIF lv_re_date+4(2) > ls_bkpf-budat+4(2).
      LS_REVERSAL-REASON_REV = '04'."uf05a-stgrd.
      E_BUDAT = I_RE_DATE.
    ENDIF.
*    ELSE.
*      ls_reversal-reason_rev = i_reason_rev."uf05a-stgrd.
*    ENDIF.
*     IMPORT BUKRS = LV_BUKRS1 GJAHR = LV_GJAHR1 MONAT = LV_MONAT1 FROM MEMORY ID 'ZFI017A'.
*     IF LV_BUKRS1 IS NOT INITIAL AND LV_GJAHR1 IS NOT INITIAL AND LV_MONAT1 IS NOT INITIAL.
*            LV_STR =  '该公司代码' && lv_BUKRS1 && '年度'&& lv_GJAHR1 && lv_MONAT1 &&'期间'&&'已经执行过月结平台,凭证过账之后请再次执行月结平台!'.
*           MESSAGE W000(ZMSG_FI) WITH  LV_STR.
*          ls_return-type = 'W'.
*          ls_return-id = 'ZMSG_FI'.
*          ls_return-number = '000'.
*          ls_return-message = LV_STR.
*          APPEND ls_return TO LT_RETURN.
*      ENDIF.
*      CLEAR:LV_BUKRS1,LV_GJAHR1,LV_MONAT1.
    CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'
      EXPORTING
        REVERSAL = LS_REVERSAL
        BUS_ACT  = LV_BUS_ACT
      IMPORTING
        OBJ_TYPE = LV_OBJ_TYPE
        OBJ_KEY  = LV_OBJ_KEY
        OBJ_SYS  = LV_OBJ_SYS
      TABLES
        RETURN   = LT_RETURN.
    LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
      EXIT.
    ENDLOOP.
    IF SY-SUBRC <> 0.
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*        EXPORTING
*          wait = abap_true.
      E_BELNR = LV_OBJ_KEY+0(10).
      E_BUKRS = LV_OBJ_KEY+10(4).
      E_GJAHR = LV_OBJ_KEY+14(4).
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.
  ENDIF.

  ET_RETURN[] = LT_RETURN.


ENDFUNCTION.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值