Reverse Posting Code
Reverse Posting Code
DATA:
lv_prev_month TYPE c LENGTH 2,
lv_curr_year TYPE c LENGTH 4,
lv_prev_year TYPE c LENGTH 4,
lv_date TYPE sydatum.
IF sy-subrc <> 0.
" Check : Bookings present for entered period
APPEND VALUE #(
%msg = new_message( id = lc_message_class
number = lc_message_006
severity = if_abap_behv_message=>severity-error )
) TO reported-wbs_bookings.
RETURN.
ENDIF.
SELECT
*
FROM zcats_emp_time_l
WHERE posting_date EQ @lv_date AND
posted EQ @abap_true AND
pspnr <> @lc_empty
INTO TABLE @DATA(lit_wbs_bookings_l).
SELECT
stblg AS rev_doc, " Reversal document
xreversal AS rev_flag, " Reversal flag : 1-Reversal, 2-
Reversed
belnr, " document no
awkey AS ref_key " reference key
FROM bkpf
INTO TABLE @DATA(lit_acc_doc) " Accounting documents
WHERE
bukrs EQ @lv_company_code AND " Company code
gjahr EQ @lv_fiscal_year " Fiscal year
ORDER BY belnr.
<lfs_wbs_bookings>-changedat = lv_curr_date.
<lfs_wbs_bookings>-changedby = lv_username.
ENDIF.
" Check : if the document is already reversed before reverse posting call
DATA(lv_ref_key) = <lfs_wbs_bookings>-document && lv_company_code. "
reference key => (KB11N document number)(company code)
<lfs_wbs_bookings>-changedat = lv_curr_date.
<lfs_wbs_bookings>-changedby = lv_username.
APPEND VALUE #(
%msg = new_message( id = lc_message_class
number = lc_message_005
severity = if_abap_behv_message=>severity-error )
) TO reported-wbs_bookings.
RETURN.
ENDIF.
lwa_rev_doc_header-co_area = lv_company_code.
" controlling area
lwa_rev_doc_header-doc_hdr_tx = |{ TEXT-000 } { lv_period } ,
{ lv_fiscal_year }|. " reversal description
lwa_rev_doc_header-username = lv_username.
" user initiating reversal
lwa_rev_doc_header-rvrs_no = <lfs_wbs_bookings>-document.
" KB11N reference doc. No
lwa_rev_doc_header-postgdate = <lfs_wbs_bookings>-posting_date.
<lfs_wbs_bookings>-changedat = lv_curr_date.
<lfs_wbs_bookings>-changedby = lv_username.
CLEAR:
lwa_rev_doc_header,
lit_rev_posting_return,
lit_rev_posting_result,
lwa_rev_posting_result.
ENDLOOP.
CONTINUE.
ENDIF.
" Check : if the document is already reversed before reverse posting call
lv_ref_key = <lfs_wbs_bookings_l>-document && lv_company_code. " reference
key => (KB11N document number)(company code)
IF lv_rev_doc EQ lv_rev_indicator.
CONTINUE.
ENDIF.
ENDIF.
lwa_rev_doc_header-co_area = lv_company_code.
" controlling area
lwa_rev_doc_header-doc_hdr_tx = |{ TEXT-000 } { lv_period } ,
{ lv_fiscal_year }|. " reversal description
lwa_rev_doc_header-username = lv_username.
" user initiating reversal
lwa_rev_doc_header-rvrs_no = <lfs_wbs_bookings_l>-document.
" KB11N reference doc. No
lwa_rev_doc_header-postgdate = <lfs_wbs_bookings_l>-posting_date.
IF lwa_rev_posting_return-type EQ lc_error_flag.
" Check : reverse posting BAPI error
APPEND VALUE #(
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = lwa_rev_posting_return-message ) ) TO reported-
wbs_bookings.
RETURN.
ENDIF.
lwa_reversal_doc-original_doc = <lfs_wbs_bookings>-document.
lwa_reversal_doc-reversal_doc = lwa_rev_posting_result-doc_no.
CLEAR:
lwa_rev_doc_header,
lit_rev_posting_return,
lit_rev_posting_result,
lwa_rev_posting_result.
ENDLOOP.
IF sy-subrc <> 0.
" Check : if update of DB successful
APPEND VALUE #(
%msg = new_message( id = lc_message_class
number = lc_message_007
severity = if_abap_behv_message=>severity-error )
) TO reported-wbs_bookings.
ELSE.
" Update WBS bookings
UPDATE zcats_emp_time_i FROM TABLE lit_wbs_bookings.
APPEND VALUE #(
%msg = new_message( id = lc_message_class
number = lc_message_004
severity = if_abap_behv_message=>severity-success )
) TO reported-wbs_bookings.
ENDIF.