Debit entry with closed posting period
,
The upstream system can transfer a posting date to FS-CD via the FS-CD payment plan interface. However, if the posting period in FS-CD is already closed, the debit entry terminates with an error message and the document cannot be posted. In this blog post I describe how in a customer enhancement the posting date can be overridden to the next open posting period so that the debit entry can be executed.
Checking the Posting Date
FS-CD contains the function module FKK_BUDAT_CHECK
, which can be used to check whether the posting period for the transferred posting date is open or not. The check must be carried out both for the reconciliation account of the business partner item and for the G/L account of the general ledger item. It should also be noted that the company codes for the two items can be different. It makes sense to check and, if necessary, override the posting date in event V016
, since FS-CD has already determined the G/L accounts at this point.
FUNCTION z_cd_zpp_v016. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(I_PAYPLAN) TYPE SVVSCPOS_DI *" EXPORTING *" REFERENCE(E_PAYPLAN) TYPE SVVSCPOS_DI *" TABLES *" T_ERROR STRUCTURE SVVSCMSG_X *"---------------------------------------------------------------------- e_payplan = i_payplan. lcl_service=>adjust_budat( CHANGING cs_scpos = e_payplan ). ENDFUNCTION.
*----------------------------------------------------------------------* ***INCLUDE LZCD_ZPPD01. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Class lcl_service *&---------------------------------------------------------------------* * Text *----------------------------------------------------------------------* CLASS lcl_service DEFINITION ABSTRACT FINAL. PUBLIC SECTION. CLASS-METHODS adjust_budat CHANGING cs_scpos TYPE svvscpos_di. ENDCLASS. "lcl_service
*----------------------------------------------------------------------* ***INCLUDE LZCD_ZPPP01. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Class (Implementation) lcl_service *&---------------------------------------------------------------------* * If the posting period of the posting date of the payment plan item is * closed, the posting date is overridden to the start of the next open * posting period. *----------------------------------------------------------------------* CLASS lcl_service IMPLEMENTATION. * CLASS-METHODS adjust_budat * CHANGING * cs_scpos TYPE svvscpos_di. METHOD adjust_budat. DATA lv_ccode_op TYPE bukrs. DATA lv_budat TYPE d. DATA lv_year(4) TYPE n. DATA lv_month(2) TYPE n. DATA lv_closed TYPE abap_bool. lv_budat = cs_scpos-budat. " Determine correct company code for partner item IF cs_scpos-opccode IS INITIAL. lv_ccode_op = cs_scpos-ccode. ELSE. lv_ccode_op = cs_scpos-opccode. ENDIF. " Determine posting period CALL FUNCTION 'FI_PERIOD_DETERMINE' EXPORTING i_bukrs = cs_scpos-ccode i_budat = lv_budat IMPORTING e_gjahr = lv_year e_monat = lv_month. DO. lv_closed = abap_false. " Check posting date for partner item IF cs_scpos-bltyp = '20' OR cs_scpos-bltyp = '22'. CALL FUNCTION 'FKK_BUDAT_CHECK' EXPORTING i_bukrs = lv_ccode_op i_budat = lv_budat EXCEPTIONS error_message = 1 OTHERS = 2. IF sy-subrc <> 0. lv_closed = abap_true. ENDIF. ENDIF. " Check posting date for general ledger item IF cs_scpos-bltyp = '20' OR cs_scpos-bltyp = '23'. CALL FUNCTION 'FKK_BUDAT_CHECK' EXPORTING i_bukrs = cs_scpos-ccode i_budat = lv_budat i_hkont = cs_scpos-h_hkont EXCEPTIONS error_message = 1 OTHERS = 2. IF sy-subrc <> 0. lv_closed = abap_true. ENDIF. ENDIF. IF lv_closed = abap_false. " Period is open: Set posting date cs_scpos-budat = lv_budat. RETURN. ENDIF. " Period closed: Check next month ADD 1 TO lv_month. IF lv_month > 12. lv_month = 1. ADD 1 TO lv_year. " Check termination - max. current and following year IF lv_year + 0 > sy-datlo(4) + 1. RETURN. " Do not change posting date ENDIF. ENDIF. lv_budat = lv_year && lv_month && '01'. ENDDO. ENDMETHOD. "adjust_budat ENDCLASS. "lcl_service
Translated with DeepL