冲销调用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.