Sebastian Wey,

FS-CD Zahlplan-SST

Ü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

Zurück zur Liste Kontextmenü im ALV-basierten Kontenstand >