程序创建
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bef441bdd9d54cfb9c90966861e35365.png)
代码
&---------------------------------------------------------------------*
*& Report Z_TEST_CANCEL_ACC_DOCUMENT_LHY
*&---------------------------------------------------------------------*
*& Type:Report
*& Description:测试冲销会计凭证,BAPI:BAPI_ACC_DOCUMENT_REV_POST
*& Create On:2024年7月30日
*& Creater:LiuHongyu
*&---------------------------------------------------------------------*
REPORT z_test_cancel_acc_document_lhy.
TABLES:bseg.
*-----------------变量定义Variable START $ ---------------*
DATA: l_reversal TYPE bapiacrev.
DATA: obj_key TYPE bapiacrev-obj_key.
DATA: gt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA:i_return TYPE bapiret2.
*----------------变量定义Variable END $ ---------------*
*----------------选择屏幕 START $ ---------------*
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR bseg-bukrs OBLIGATORY NO INTERVALS,
s_gjahr FOR bseg-gjahr OBLIGATORY NO INTERVALS,
s_belnr FOR bseg-belnr OBLIGATORY NO INTERVALS.
SELECTION-SCREEN END OF BLOCK bk1.
*----------------选择屏幕 END $ -----------------*
*--------------------------Logic START $ ---------------------------------------------*
"查询会计凭证是否存在
SELECT SINGLE * FROM bkpf INTO @DATA(l_bkpf) WHERE bukrs IN @s_bukrs
AND belnr IN @s_belnr
AND gjahr IN @s_gjahr
AND xreversal = ''. "指定是否凭证被冲销或已被冲销
IF sy-subrc <> 0.
MESSAGE '该会计凭证不存在或者已经被冲销' TYPE 'E'.
ENDIF.
* bapi 参数赋值
l_reversal-obj_type = l_bkpf-awtyp.
l_reversal-obj_key_r = l_bkpf-awkey.
l_reversal-pstng_date = l_bkpf-budat.
l_reversal-fis_period = l_bkpf-budat+4(2).
* l_reversal-fis_period = p_datum+4(2).
l_reversal-comp_code = l_bkpf-bukrs.
l_reversal-reason_rev = '04'.
"取得逻辑系统 LOGICAL SYSTEM
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = l_reversal-obj_sys.
"调用BAPI冲销凭证
CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'
EXPORTING
reversal = l_reversal
bus_act = l_bkpf-glvor
IMPORTING
* OBJ_TYPE =
obj_key = obj_key
* OBJ_SYS =
TABLES
return = gt_return.
READ TABLE gt_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
"提交凭证过账
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = i_return.
IF i_return IS INITIAL.
MESSAGE '会计凭证冲销成功' TYPE 'S'.
COMMIT WORK AND WAIT.
ELSE.
MESSAGE '过账失败,请用事务代码ST22查看详细信息' TYPE 'E'.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE '会计凭证冲销失败,'&& i_return-message TYPE 'E'.
ENDIF.
*--------------------------Logic END $ ---------------------------------------------*
运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/786b5bbac9184335ae22d3e70287c903.png)