“功能描述:根据传输过来数据创建会计冲销凭证,并返回消息和状态
*”———————————————————————-
““本地接口:
*” IMPORTING
*” VALUE(IW_ZTFKCX0010) TYPE ZTFKCX0010
*” EXPORTING
*” VALUE(E_JSON) TYPE STRING
*”———————————————————————-
DATA : l_bkpf TYPE bkpf.
DATA : l_reversal TYPE bapiacrev,
-
l_bus_act TYPE bapiache09-bus_act, l_obj_key TYPE bapiacrev-obj_key,
-
gt_return TYPE TABLE OF bapiret2 WITH HEADER LINE, lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE, lw_return TYPE bapiret2.
-
i_return TYPE bapiret2.
DATA:BEGIN OF ls_msg,
type TYPE bapi_mtype, “
message TYPE bapi_msg, “END OF ls_msg.
DATA:lt_msg LIKE TABLE OF ls_msg.
-
获取数据
*验证是否已创建过会计凭证
CLEAR: ls_msg,l_bkpf.
SELECT SINGLE * FROM bkpf INTO CORRESPONDING FIELDS OF l_bkpf WHERE bukrs = iw_ztfkcx0010-awkey+10(4)
AND belnr = iw_ztfkcx0010-awkey+0(10)
AND gjahr = iw_ztfkcx0010-awkey+14(4)
AND xreversal = ‘’.
IF sy-subrc <> 0.
ls_msg-type = ‘W’.
CONCATENATE iw_ztfkcx0010-awkey ‘之前已冲销过,请确认!’ INTO ls_msg-message.
APPEND ls_msg TO lt_msg.
e_json = /ui2/cl_json=>serialize( data = lt_msg ).RETURN.
ENDIF.
-
bapi 参数赋值
l_reversal-obj_type = l_bkpf-awtyp.
l_reversal-obj_key_r = l_bkpf-awkey.
l_reversal-pstng_date = iw_ztfkcx0010-bldat.”冲销日期
l_reversal-fis_period = iw_ztfkcx0010-bldat+4(2).”冲销期间
l_reversal-comp_code = iw_ztfkcx0010-awkey+10(4).”公司代码
l_reversal-reason_rev = iw_ztfkcx0010-stgrd.”冲销原因代码 03 -
取得系统 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_key = l_obj_key
TABLES
return = lt_return. -
S 成功,E 错误,W 警告,I 信息,A 中断
LOOP AT lt_return INTO lw_return WHERE type = ‘E’
OR type = ‘A’.EXIT.
ENDLOOP.
-
创建成功
IF sy-subrc <> 0.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.CLEAR ls_msg.
ls_msg-type = ‘S’.
ls_msg-message = l_obj_key.
APPEND ls_msg TO lt_msg.
*存表ZTFKCX0010
iw_ztfkcx0010-bukrs = iw_ztfkcx0010-awkey+10(4).”新赋值
iw_ztfkcx0010-gjahr = iw_ztfkcx0010-awkey+14(4).”新赋值
iw_ztfkcx0010-belnr = iw_ztfkcx0010-awkey+0(10).”新赋值
iw_ztfkcx0010-awkey = l_obj_key.”对此字段从新赋值冲销凭证号
iw_ztfkcx0010-createdby = sy-uname.”创建人
iw_ztfkcx0010-cr_date = sy-datum.”创建日期
iw_ztfkcx0010-cr_time = sy-uzeit.”创建时间
iw_ztfkcx0010-mod_by = sy-uname.”修改人
iw_ztfkcx0010-mod_date = sy-datum.”修改日期
iw_ztfkcx0010-mod_time = sy-uzeit.”修改时间
MODIFY ztfkcx0010 FROM iw_ztfkcx0010.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
LOOP AT lt_return INTO lw_return WHERE type = 'E'.
CLEAR ls_msg.
ls_msg-type = 'E'.
ls_msg-message = lw_return-message.
APPEND ls_msg TO lt_msg.
ENDLOOP.
ENDIF.
- **内表->JSON
e_json = /ui2/cl_json=>serialize( data = lt_msg ).
***测试数据
*IW_ZTFKCX0010-XBLNR = ‘付款申请单号’.
*IW_BKPF-XREF1_HD = ‘付款交易流水号’.
*IW_BKPF-MTYPE = ‘1’.
*IW_BKPF-WRBTR = ‘700’.
*IW_BKPF-STGRD = ‘03’.
*IW_BKPF-BLDAT = ‘20220723’.
*IW_BKPF-RESON = ‘ceshi’.
*IW_BKPF-AWKEY = ‘150000000652002020’.
**