Relevante SAP-Hinweise:
- 112312 - Einzelposten: Anzeige von Gegenkontoinformationen
- 1034354 - FAGLL03: Anzeige von Gegenkontoinformationen
- 1504612 - Einzelposten: Gegenkontoinformationen(BADI FI_ITEMS_CH_DATA)
Grundlagen
Öfter werde ich von Kunden oder auch Kollegen gefragt, wie denn die Gegenkontoinformationen in den Einzelpostenlisten (FBLxN, FAGLL03 usw.) ermittelt werden und wie man dies ggf. nachvollziehen oder gar beeinflussen kann:
Sofern die Hinweise 112312 bzw. 1034354/1504612 eingebaut wurden, lassen sich in den einschlägigen Einzelpostenanzeigen Gegenkontoinformationen einblenden, bestehend aus Gegenkontoart (S = Sachkonto, K = Kreditor, D = Debitor) und der Nummer des Gegenkontos.
Bei zweizeiligen Belegen ist die Auswahl des Gegenkontos ja eindeutig, d.h. bei einer Buchung
Aufwand 100,-- an Kreditor 100,--
ist die Gegenbuchung natürlich die jeweils andere Belegposition.
Bei drei- und mehrzeiligen Belegen muss ggf. eine Auswahl des Gegenkontos (nach Signifikanz) erfolgen:
Aufwand1 100,--
Aufwand2 200,--
Aufwand3 300,--
Vorsteuer 60,-- an Kreditor 660,--
Für die Ermittlung des Gegenkontos steht in der SAP Standardauslieferung der Funktionsbaustein GET_GKONT zur Verfügung. In diesem sind drei verschiedene Verfahren zur Bestimmung des signifikanten Gegenkontos implementiert - die Auswahl des Verfahrens erfolgt durch den Import-Parameter GKNKZ.
GKNKZ | Beschreibung | Ermitteltes Gegenkonto im o.g. Beispielbeleg (aus Sicht des kreditorischen Postens) |
1 | Es wird nur dann ein Gegenkonto zurückgeliefert, wenn es eindeutig ermittelt werden kann. Automatisch erzeugte Belegzeilen (wie bspw. Steuerzeilen) werden dabei ignoriert. | ./. |
2 | Das betragsmäßig höchste Gegenkonto ohne Berücksichtigung automatisch generierter Belegzeilen wird zurückgeliefert. | Aufwand3 |
3 | Das betragsmäßig höchste Gegenkonto mit Berücksichtigung automatisch generierter Belegzeilen wird zurückgeliefert. | Aufwand3 |
Werden zur Gegenkontoermittlung die weiter oben genannten Hinweise ohne Abwandlung implementiert, greift das Verfahren 3.
Erweiterung der bestehenden Verfahren
In vielen Fällen reicht die oben genannte Logik zur Gegenkontoermittlung aus. Im Einzelfall kann jedoch die Anforderung bestehen, den oben beschrieben Verfahren eigene, ausgefeiltere Methoden hinzuzufügen. Hierzu kann dann der Funktionsbaustein GET_GKONT in den Kundennamensraum kopiert (z.B. als Z_GET_GKONT) und anstelle des Standard-Bausteins an den entsprechenden Coding-Stellen in den Hinweisen 112312 bzw. 1034354 und 1504612 gerufen werden. Hierzu sind natürlich gewisse ABAP-Kenntnisse nötig.
Eine mögliche Anforderung könnte z.B. sein, dass als Gegenkonto von Sachkontenpositionen Kontokorrentpositionen grundsätzlich Vorrang haben sollen, auch wenn sie betragsmäßig kleiner sind als andersartige Gegenpositionen.
Beispiel:
Aufwand1 100,--
Aufwand2 200,--
Aufwand3 300,-- an Kreditor 220,--
Vorsteuer 60,-- Kasse 440,--
Die Standard-Gegenkontoermittlung würde bei Abfrage des Gegenkontos aus Sicht eines der Aufwandskonten das Kassenkonto zurückliefern, weil es betragsmäßig signifikanter ist als die kreditorische Gegenposition. Genau hier soll aber ein „Override“ eingebaut werden, dass die Kontokorrentposition trotzdem Vorrang erhält. Das Verfahren erhält in unserem Beispiel die Kennzeichnung ‚4‘.
Hierzu passen wir die Form-Routine GKONT_ERMITTELN in unserer kundeneigenen Funktionsgruppe geeignet an:
…
*---- NEUES VERFAHREN 4 (wie 3, aber Vorfahrt für Kontokorrente)
WHEN '4'.
IF BSEG-SHKZG = 'S'.
* nur dann neu setzen, wenn Betrag höher ODER ein Kontokorrent daherkommt
* UND nicht schon bereits ein Kontokorrent als Gegenkonto gesetzt ist
IF BSEG-DMBTR > GKSUM_S OR BSEG-KOART CA 'DK' AND KOART_S CN 'DK'.
…
(Haben-Seite analog)
Das Beispielcoding aus den weiter oben genannten Hinweisen ist dann entsprechend anzupassen.
Beispiel-Coding aus Hinweis 1504612:
DATA: wa_items TYPE rfposxext.
LOOP AT ct_items INTO wa_items.
CALL FUNCTION 'Z_GET_GKONT'
EXPORTING
belnr = wa_items-belnr
bukrs = wa_items-bukrs
buzei = wa_items-buzei
gjahr = wa_items-gjahr
gknkz = '4'
IMPORTING
gkont = wa_items-gkont
koart = wa_items-gkart
EXCEPTIONS
belnr_not_found = 1
buzei_not_found = 2
gknkz_not_found = 3
OTHERS = 4.
IF sy-subrc = 0.
MODIFY ct_items FROM wa_items.
ENDIF.
ENDLOOP.
Eine immer wiederkehrende Anforderung in dem Themenkreis „Gegenkonto“ ist, dass zusätzlich zur Art und Nummer des Gegenkontos auch die entsprechende Bezeichnung anzeigbar gemacht werden soll. Hierzu lässt sich der Feldvorrat der Einzelpostenlisten um das Feld „Bez. Gegenkonto“ erweitern. Details dazu siehe hier, Abschnitt "Hinzufügen eigener Felder".
Es ist nun ein leichtes, nach erfolgreicher Gegenkontoermittlung anhand der Kontoart und der Nummer aus den entsprechenden Stammsatztabellen die Bezeichnung zu lesen und bereitzustellen.
Das obenstehende Beispielcoding kann dazu bspw. wie folgt erweitert werden:
…
CALL FUNCTION 'Z_GET_GKONT'
EXPORTING
belnr = wa_items-belnr
bukrs = wa_items-bukrs
buzei = wa_items-buzei
gjahr = wa_items-gjahr
gknkz = '4'
IMPORTING
gkont = wa_items-gkont
koart = wa_items-gkart
EXCEPTIONS
belnr_not_found = 1
buzei_not_found = 2
gknkz_not_found = 3
OTHERS = 4.
CASE wa_items_gkart. "das neue Feld heisse zzgkbez.
WHEN ‚S‘.
SELECT SINGLE txt50 INTO wa_items-zzgkbez FROM SKAT
WHERE KTOPL = <Kontenplan>
AND SAKNR = wa_items-gkont
AND SPRAS = sy-langu.
WHEN ‘K’.
SELECT SINGLE name1 INTO wa_items-zzgkbez FROM LFA1
WHERE LIFNR = wa_items-gkont.
WHEN ‘D’.
SELECT SINGLE name1 INTO wa_items-zzgkbez FROM KNA1
WHERE KUNNR = wa_items-gkont.
ENDCASE.
…
Im S/4 werden die Gegenkontoinformationen automatisch im Zuge der Buchung in die entsprechenden Felder der ACDOCA abgefüllt, so dass eine Anreicherung der Gegenkontoinformationen wie oben beschrieben nicht nötig ist. Hierzu wird im Customizing unter Finanzwesen - Hauptbuchhaltung - Informationssystem - Gegenkontoermittlungsart definieren die gewünschte Gegenkontoermittlung aktiviert (1, 2 oder 3, s.o.)
In den neuen Einzelpostenbrowsern
FBL1H | Kreditoreneinzelposten |
FBL5H | Debitoreneinzelposten |
FAGLL03H | Sachkonteneinzelposten |
sind im Feldvorrat zudem bereits zahlreiche Texte u.a. zu Stammdatenobjekten verfügbar, z.B. die Bezeichnung des Gegenkontos, Kostenstellentexte und so weiter.