Sollstellung bei geschlossener Buchungsperiode
,
Über die FS-CD Zahlplanschnittstelle kann das Vorsystem ein Buchungsdatum an FS-CD übergeben. Wenn in FS-CD die Buchungsperiode jedoch bereits geschlossen ist, bricht die Sollstellung mit einer Fehlermeldung ab, und der Beleg kann nicht gebucht werden. In diesem Blogpost beschreibe ich, wie in einer Kundenerweiterung das Buchungsdatum auf die nächste geöffnete Buchungsperiode übersteuert werden kann, so dass die Sollstellung durchgeführt werden kann.
Überprüfung des Buchungsdatums
In FS-CD gibt es den Funktionsbaustein FKK_BUDAT_CHECK
, mit dem überprüft werden kann, ob die Buchungsperiode für das übergebene Buchungsdatum geöffnet ist oder nicht. Die Prüfung muss dabei sowohl für das Abstimmkonto der Geschäftspartnerposition als auch für das Sachkonto der Hauptbuchposition durchgeführt werden. Dabei muss auch beachtet werden, dass die Buchungskreise für die beiden Positionen unterschiedlich sein können. Die Prüfung und ggf. Übersteuerung des Buchungsdatums findet sinnvollerweise im Zeitpunkt V016
statt, da FS-CD die Hauptbuchkonten zu diesem Zeitpunkt bereits ermittelt hat.
FUNCTION z_cd_zpp_v016. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" 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 *&---------------------------------------------------------------------* * Wenn die Buchungsperiode des Buchungsdatums der Zahlplanposition * geschlossen ist, wird das Buchungsdatum auf den Beginn der nächsten * offenen Buchungsperiode übersteuert. *----------------------------------------------------------------------* 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. " richtigen Buchungskreis für Partnerposition ermitteln IF cs_scpos-opccode IS INITIAL. lv_ccode_op = cs_scpos-ccode. ELSE. lv_ccode_op = cs_scpos-opccode. ENDIF. " Buchungsperiode ermitteln 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. " Buchungsdatum prüfen für Partnerposition 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. " Buchungsdatum prüfen für Hauptbuchposition 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. " Periode ist offen: Buchungsdatum setzen cs_scpos-budat = lv_budat. RETURN. ENDIF. " Periode geschlossen: Nächsten Monat prüfen ADD 1 TO lv_month. IF lv_month > 12. lv_month = 1. ADD 1 TO lv_year. " Abbruch prüfen - max. aktuelles und Folgejahr IF lv_year + 0 > sy-datlo(4) + 1. RETURN. " Buchungsdatum nicht ändern ENDIF. ENDIF. lv_budat = lv_year && lv_month && '01'. ENDDO. ENDMETHOD. "adjust_budat ENDCLASS. "lcl_service