19:31 Uhr
SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen
Im Artikel "Query FI Einzelposten als Belegjournal - Belegsegment (BSEG) und Belegkopf (BKPF) verknüpfen" wurde durch Thomas auf eine Möglichkeit hingewiesen eine Query über eine Zusatztabelle zu erweitern:
Kommentar von Thomas
Wirklich eine Super Anleitung!
Mir hat noch die Kontenbezeichnung gefehlt.
Das lässt sich so realisieren:
SQ02
Zusätze (F5)
Knoten: BSEG
Anlegen
Zusatztabelle -> SKAT
SPRAS = SY-LANGU
KTOPL = 'XXXX' (4stelliger Kontoplan in einfachen Hochkomma)!
Wir arbeiten nur mit einem Kontenplan. Deshalb der Festwert.
SAKNR = BSEG-HKONT
(in diesem Fall noch "intern puffern anhaken"
Jetzt ist die Tabelle unter BSEG eingebunden und das Textfeld (SKAT-TXT20 oder TXT50) kann in das Belegsegment hineingezogen werden.
Gruß
Thomas
Zwischenzeitlich habe ich mich auch ein wenig mehr mit Zusatzfeldern beschäftigt und kann nun die Anforderungen aus 2011 (siehe Artikel "SAP Query Stammdaten PSM / CO Innenauftrag") dank des Codingvorschlages eines Kollegen ebenfalls erfüllen.
Es soll eine Stammdatenliste aus den beiden Modulen CO und PSM-FM (Innenauftrag und Fond) erstellt werden. Hierbei sollen in der Liste Laufzeit des Projektes (Arbeitsbeginn und Arbeitsende aus CO) der Finanzierungszweck (ein Stammdatenfeld aus Fond) und die Information ausgegeben werden, ob dieses Projekt gesperrt ist.
Grundsätzlich sind die Tabellen bekannt in denen diese Informationen stehen. Die Stammdaten der Fonds befinden sich in der Tabelle FMFINCODE und der Innenaufträge in AUFK. Allerdings ist das Feld FMFINCODE-FINCODE (Fond) vom Typ Char mit einer Länge von 10 Zeichen und das Feld AUFK-AUFNR (Auftragsnummer) zwar auch vom Typ Char allerdings mit einer Länge von 12 Zeichen. Somit können beide Felder nicht verknüpft werden, da diese Werte nicht übereinstimmen.
Der Systenstatus ist zwar ebenfalls in einer Tabelle gespeichert (JEST - siehe Artikel "SAP Query: Systemstatus CO Innenauftrag") allerdings sind hier mehrere Datenzeilen je Status vorhnaden und uns interessiert eigentlich nur der Status I0043 für gesperrt. Anders als 2011 vermutet bedarf es bei der Pflege von SAP Query aber keines Entwicklerschlüssel für die Nutzung von ABAP Code, so dass hier eine Möglichkeit besteht per Coding an die relevanten Informationen zu kommen. Die Umsetzung ist in diesem Artikel unter "Zusatzfeld GESPERRT bei gesperrten Innenaufträgen" erläutert.
Verknüpfung von PSM-FM Stammdaten von Fonds und CO Innenaufträgen
Um dieses zu verwirklichen legen wir ein Infoset für die CO Stammdaten an analog der Beschreibung im Artikel "Query Stammdaten CO Kontrolle Verantwortliche". In der späteren Verwendung des Infosets steht jedoch nicht mehr die Kontrolle der Verantwortlichen von Kostenstelle, Profit-Center und Innenauftrag im Vordergrund, sondern die Zusatzinformationen über Systemstatus und Stammdaten aus PSM-FM.Infoset als View über AUFK, CSKS, CSKT, CEPC und CEPCT definieren
Innerhalb der Transaktion SQ02 wird folgendes Infoset definiert. Hierfür wird als Datenquelle ein Tabellen-Join über Tabelle AUFK angelgt.Es werden folgende Tabellen miteinander in Beziehung gesetzt:
AUFK: Auftragsstammdaten
CSKS: Kostenstellenstammsatz
CSKT: Kostenstellenelemente (für die Texte)
CEPC: Stammdatentabelle von Profit Centern
CEPCT: Profit-Center-Stammdaten Texte
Verknüpfungsbedingungen:
Die vorgeschlagenen Verknüpfungsbedingungen seitens SAP sollte hier wieder entfernt werden und folgende Verknüpfungsbedingungen definiert werden.
Folgende Tabellenfelder werden hierbei miteinander verknüpft:
AUFK-KOSTV <-> CSKS-KOSTL
Hierdurch wird die Verantwortliche Kostenstelle des Innenauftrages mit den Stammdaten der Kostenstellen verknüpft.
CSKS-KOSTL <-> CSKT-KOSTL
Hierdurch werden die Stammdaten der Kostenstelle mit der Bezeichnung der Kostenstelle verknüpft.
AUFK-PRCTR <-> CEPC-PRCTR
Hierdurch wird das Profitcenter des Innenauftrages mit den Stammdaten der Profit-Center verknüpft.
CEPC-PRCTR <-> CEPCT-PRCTR
Hierdurch werden die Stammdaten der Profit-Center mit der Bezeichnung der Profit-Center verknüpft.
Etwas ausführlicher (inklusive Verknüpfung "Kostenrechnungskreis" KOKRS und "Datum gültig bis" DATBI sind die Verknüpfungen in folgender Zeichnung dargestellt:

Damit sind alle Verknüpfungen der Tabellen erfolgt. Der Einfachheit halber können nun alle Feldgruppen/Datenfelder übernommen werden. Dieses hat den Vorteil, dass dieses Infoset auch für weitere Queries zur Verfügung steht.
Erweiterung des Infoset über Zusatzfelder
Über die Schaltfläche Zusätze (F5) bzw. innerhalb der Transaktion SQ02 (Pflege des Infosets) über SPRINGEN-> ZUSÄTZE ZUM KNOTEN können nicht nur wie von Thomas erwähnt Zusatztabellen in das Infoset aufgenommen werden sondern auch eigene Felder definiert werden. Hierzu kann im Register Zusätze die Schaltfläche Anlegen ausgewählt werden. Es erscheint eine Maske in der der Name des Zusatzfeldes angegeben werden soll (im folgenden Beispiel FINUSE) und die Art der Zusatzinformation. Neben der schon angesprochenen Zusatztabelle sind dieses: Zusatzfeld, Zusatzstruktur und Coding. In unserem Beispiel soll ein Zusatzfeld mit den Namen FINUSE angelegt werden.
Dieses hat folgende Eigenschaften: Langtext und Überschrift haben beide Finanzierungszweck erhalten. Die Formatangabe wurde über LIKE-Referenz idenitsch zum Feld FMFINCODE-FINUSE gehalten. Damit entspricht dieses Feld den Formatangaben in der Tabelle FMFINCODE (Typ C (Character) Länge 016 Ausgabenlänge 016).
Damit ist das Feld angelegt, hat jedoch nur eine Datendefinition aber noch keine eigene Daten (anders bei der Zusatztabelle, die sich direkt aus der Datenbank einen passenden Datensatz liest.
Nachdem ein Feld jedoch angelegt ist kann über die Schaltfläche "Coding zum Zusatz" ein passendes ABAP Coding für das Feld hinterlegt werden über das wiederum eine Datenbankabfrage erfolgen kann. Hier habe ich dankenswerterweise von einen Kollegen ein passendes Coding erhalten um die Bezeichnung des Fonds (FMFINT-BEZEICH), Gültigkeitsdatum des Fond (FMFINCODE-DATAB und FMFINCODE-DATBIS) sowie Schlüssel/Nummer des Fond (FMFINCODE-FINCODE) zu erhalten, sofern ein Fond angelegt ist. Dieses Coding hatte ich mir als Vorlage genommen um auch den Finanzierungszweck auszulesen.
Zusatzfeld PSM-FM Finanzierungszweck aus Fond
Das Coding für das Feld FINUSE sieht dabei wie folgt aus (wobei statt BUK natürlich Ihr Buchungskreis im Coding hinterlegt sein sollte):
* Lokale Variablen definieren
DATA: L_FINZWECK type FMFINCODE-FINUSE.
DATA: L_FOND type FMFINCODE-FINCODE.
DATA: L_AUFTRAG type AUFK-AUFNR.
* Zuweisung von Variablen aus der Selektion
L_AUFTRAG = AUFK-AUFNR.
* Verschieben des gespeicherten Wertes in der Tabelle AUFK um 4 Zeichen
* HINTERGRUND:
* Das Fekd AUFK-AUFNR hat insgesamt 12 Zeichen.
* Die achtstellige Auftragsnummer wird mit 0000 aufgefüllt
* Durch die Verschiebung ist die Auftragsnummer direkt in der
* lokalen Variable gepseichert.
SHIFT L_AUFTRAG BY 4 PLACES LEFT.
L_FOND = L_AUFTRAG.
* Über die Selektabfrage hat nun das Feld Fond die richtige Länge
SELECT SINGLE finuse FROM fmfincode INTO L_FINZWECK
WHERE fikrs = 'BUK'
AND fincode = L_FOND.
* Abfangen eines Fehlers und Wertzuweisung in Zusatzfeld
IF sy-subrc <> 0.
CLEAR finuse.
ELSE.
finuse = L_FINZWECK.
ENDIF.
ACHTUNG: Länge der Auftragsnummer / Fondsnummer beachten!
Im oberen Coding gehen wir davon aus, dass Innenauftrag und Fond jeweils acht Stellen haben. Sollte die Auftragsnummer bzw. Fondcode nur siebenstellig sein ist die Zeile auf
SHIFT L_AUFTRAG BY 5 PLACES LEFT
anzupassen.
Zusatzfeld GESPERRT bei gesperrten Innenaufträgen
Als weitere Anforderung sollte in der Liste auch mitgegeben werden, ob ein Innenauftrag gesperrt ist oder nicht. Hierzu wurde ebenfalls ein Zusatzfeld angelegt. Dieses erhält als Langtext und Überschrift "Gesperrt" und die Eigenschaften Typ C (Character) und Länge, Ausgabelänge 001, da im Ergebnis nur ein X ausgegeben werden soll, wenn der Auftrag gesperrt ist. Das zugehörige Coding lautet wie folgt:
DATA: L_AUFKOBJ type AUFK-OBJNR.
DATA: L_TEMP type AUFK-OBJNR.
L_AUFKOBJ = AUFK-OBJNR.
SELECT SINGLE objnr FROM JEST into L_TEMP
WHERE stat = 'I0043'
AND objnr = L_AUFKOBJ
AND inact = 'X'.
IF sy-subrc <> 0.
GESPERRT = 'X'.
ELSE.
CLEAR GESPERRT.
ENDIF.
Die beiden Zusatzfelder können dann in eine eigene Feldgruppe ins Infoset übernommen werden und stehen damit einer Query zur Verfügung.
Bezüglich des Status eines Innenauftrages können über die ABAP Anweisung
CONCATENATE altenstring neuenstring INTO altenstring.
auch weitere Statuszustände in das Feld übernommen werden. Hierzu würde ein Feld STATUS definiert werden und über eine weitere Schleife über die Bedingung Where STAT = 'I0028' zum Beispiel das Merkmal ABRV in die Variable gespeichert werden. Die Anweisung könnte dann CONCATENATE status ' ABRV ' INTO STATUS. lauten. Dieses war jedoch keine Anforderung für diese Liste. Ferner sind die einzelnen Phasen eines Innenauftrages auch in der Tabelle AUFK hinterlegt und könnten in der Query über ein kundeneigenes Feld verknüpft werden. Lediglich die Sperre des Innenauftrages ist hier nicht mitaufgeführt.
Die für die einzelnen Phasen eines Innenauftrages mittels X = JA markierten Felder sind:
- AUFK-PHAS0 - Phase 'Auftrag eröffnet'
- AUFK-PHAS1 - Phase 'Auftrag freigegeben'
- AUFK-PHAS2 - Phase 'Auftrag technisch abgeschlossen'
- AUFK-PHAS3 - Phase 'Auftrag abgeschlossen'
Berechtigungen für Zusatzfelder mit ABAP Coding
Für die Pflege von Zusatzcoding sind jedoch weiter gehende Basisberechtigungen erforderlich. Hierzu werden die Berechtigungen auf das Berechtigungsobjekt S_DEVELOP und die Berechtigungsfeldwerte Objekttyp PROG, Objektname AQ* sowie die Aktivitäten 01 und 02 geprüft. Da es sich hier um recht weitgehende Berechtigungen handelt, sollten diese auch nur im Entwicklungssystem vergeben werden. Die Berechtigungsprüfung erfolgt ebenfalls, wenn die Query, wie im Artikel "Transport von SAP Queries (DL/UL)" beschrieben, per Dateiupload ins Testsystem oder Produktivsystem transportiert werden soll. Das Infoset selbst lässt sich nach einem erfolgreichen Upload noch bearbeiten, lediglich das Coding ist durch die Berechtigungsprüfung vor weiteren Änderungen geschützt.
Query Stammdatenliste Innnenaufträge und verknüpfte Fonds
Innerhalb der Query werden nun auf folgende Felder der einzelnen Tabellen (bzw. Zusatzfelder) des Infosets Zugriff genommen beziehungsweise in der Grundliste zugewiesen. Hierbei ist L als Listenfeld und S als Selektionsfeld zu verstehen.Die Felder werden hier in der Reihenfolge angegeben, wie diese dann auch in der Query ausgegeben werden sollen:
Auftragsstammdaten AUFK
Auftragsart (S) AUFK-AUART
Auftragsnummer (L,S) AUFK-AUFNR
Kurztext (L) AUFK-KTEXT
Verantwortliche Kostenstelle (L,S) AUFK-KOSTV
Kostenstellentexte CSKT
Beschreibung (L) CSKT-KTEXT
Auftragsstammdaten AUFK
Profitcenter (L,S) AUFK-PRCTR
Profit-Center-Stammdaten Texte (CEPCT)
Allgemeine Bezeichnung (L) CEPCT-KTEXT
Zusatzfelder (die im Infoset angelegt wurden)
Finanzierungszweck (L,S) FINUSE
Auftragsstammdaten AUFK
Arbeitsbeginn (L,S) AUFK-USER7
Arbeitsende (L) AUFK-USER8
Antragssteller (L) AUFK-USER0
Verantwortlicher (L) AUFK-USER2
Abteilung (L) AUFK-USER6
Externe Auftragsnummer (L) AUFK-AUFEX
Zusatzfelder (die im Infoset angelegt wurden)
Gesperrt (L) GESPERRT
lokale Zusatzfelder
Lehreinheit (L)
Erweiterung: Lehreinheit aus Kostenstelle ableiten
Das lokale Zusatzfeld Lehreinheit wird im Artikel "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer" noch beschrieben.
Der Vorteil dieser Query ist, dass in der Selektion nicht nur anhand der Innenauftragsnummer, Auftragsart oder der verantwortlichen Kostenstellen selektiert werden kann sondern auch über den Finanzierungszweck inklusive einer Wertauswahlhilfe (F4), so dass hier direkt die gepflegten Finanzierungszwecke ausgelesen werden können.
Bei den Finanzierungszwecken selbst handelt es sich ebenfalls um Stammdaten die unter
Rechnungswesen > Public Sector Managament > Haushaltsmanagement > Stammdaten > Kontierungselemente > Fonds > Finanzierungszweck > gepflegt werden können (Transakton FM6I - Anlegen, FM6U - Ändern und FM6S Anzeigen).
Erweiterung: Merkmale der Klassifizierung
Eine erhebliche Erweiterung dieser Query ist im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" beschrieben. Hier wird neben den Finanzierungszweck und den CO bzw. PSM-FM Stammdaten auch die Merkmale der Klassifizierung von Haushaltsfonds ausgewertet. Damit sollten alle relevanten Stammdaten von Innenaufträgen und damit verbundenen Fonds ausgewertet werden können.
Erweiterung: Weitere Zusatzfelder
Wie schon erwähnt besteht auch die Möglichkeit weitere Stammdaten aus den Fonds aus PSM - FM im Infoset per Coding aufzunehmen. Einige häufig angefragten Felder habe ich im Artikel "Weitere Zusatzfelder im Infoset mit ABAP Coding zur Verwendung in SAP Query über die Tabellen AUFK und FMFINCODE" beschrieben. Teilweise wurde hier auch das Coding der in diesen Artikel beschriebenen Felder noch optimiert.
Hinweis: Query Stammdaten CO Innenauftrag PSM-FM Fond
Dieser Artikel ist Teil einer Serie um Stammdaten von CO Innenaufträgen und PSM-FM Fonds miteinander zu verknüpfen.- "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen"
- "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer"
- "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM"
- "Weitere Zusatzfelder im Infoset mit ABAP Coding zur Verwendung in SAP Query über die Tabellen AUFK und FMFINCODE"
Eine Erweiterung des hier vorgestellten Coding hin zur Verwendung einer Zusatztabelle für die Einbindung der PSM-FM Stammdaten wie Finanzierungszweck ist im Artikel "Query über COEP, AUFK und FMFINCODE für Einzelposten Istkosten Innnenauftrag mit Stammdaten aus CO und PSM-FM sowie Spalten für Ertrag und Aufwand - Erster Teil Infoset als Datengrundlage" beschrieben.
Hinweis:
Eine kurze Einführung in das Thema SAP Query habe ich im Artikel
"Grundlagen Kurzeinführung und Handbuch SAP Query" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Aktuelle Schulungstermine Rechercheberichte mit SAP Report Painter
unkelbach.link/et.reportpainter/
20:14 Uhr
Berichtslayout beim Report Writer - Nullwerte als Platzhalter ausgeben, wenn keine Buchung (Daten) vorhanden sind dank Formulardruck
Innerhalb eines Berichtes in der Kostenstellenrechnung der Bericht unter
- Kostenstellenrechnung
- Infosystem
- Berichte zur Kostenstellenrechnung
- Plan/Ist Vergleich
- Bereich: Kostenstellen (Transaktion S_ALR_87013612)
Nullzeilenbehandlung
Ein Beitrag auf dv-treff-community.de verwies dafür auf die Möglichkeit der Nullzeilenbehandlung, die im Berichtslayout vorhanden ist. Hierzu kann neben der im Artikel "Mehrjahresvergleich im ReportWriter/Painter mit variabler Spaltenanzahl je Jahr dank Variablen" beschriebenen Möglichkeit der Nullzeilen unterdrücken (im verlinkten Artikel für Nullspalten unterdrücken verwendet) auch die Option Formulardruck verwendet werden.Diese Option ist entweder im Bericht über EINSTELLUNGEN-> BERICHTSLAYOUT oder innerhalb der Berichtserstellung unter FORMATIERUNGEN-> BERICHTSLAYOUT im Register ZEILEN zu finden.
Durch die Option des Formulardrucks werden nicht nur die in der Selektion gewählten Sets (im Beispiel sind dieses Kostenstellen- und Kostenartengruppen) nach vorhandenen Daten (also nur Kostenstellen/Kostenarten auf denen auch gebucht wurde) durchsucht sondern für nicht vorhandene Werte innerhalb der einzelnen Gruppen ein interner Datensatz mit Nullwerten angelegt. Hierdurch erhöht sich die Laufzeit des Berichtes entsprechend und es werden für alle selektierte Daten mindestens ein Nullwert ausgegeben.
Hierdurch hat der Bericht auch bei jedem Aufruf das gleiche Layout braucht dafür aber auch etwas mehr Zeit . Hier zeigt es sich wieder einmal "Gut Ding will Weile haben" gilt auch für die Anforderungen ans Berichtswesen im Controlling....
Da die Aktivierung des Formulardrucks erst nach erneuter Generierung des Berichtes funktioniert, ist dieses in den Standardberichten nicht möglich.
Report Writer Bericht über Transaktion ermitteln
Allerdings kann der zugrundeliegende Report Painter Bericht (im Beispiel der Bericht 1SKL-001 in der Bibliothek 1VK) als Vorlage für einen eigenen Bericht über die GRR1 angelegt werden. Nun ist es auch in diesem Bericht möglich den Formulardruck zu aktivieren. Der zugrundeliegende Bericht kann bspw. durch die Transaktion SE93 anhand der ursprünglichen Transaktion ermittelt werden. In der Transaktion wird die zugeordnete Berichtsgruppe aufgerufen. Alternativ können auch die mit einer Zahl beginnende Berichte innerhalb der passenden Berichtsbibliothek über die Transaktion GRR3 betrachtet werden.Wie im Artikel "Parametertransaktion für Reporwriter" beschrieben kann dann für diesen Bericht eine kundeneigene Transaktion zum Beispiel als. Z_ALR_87013612 angelegt werden. Hierbei könnte die Berichtsgruppe 1SKL als ZSKL angelegt werden und ebenso verwendet werden.
Nachteil Formulardruck: Intervalle werden nicht aufgelöst
Der Nachteil der Verwendung des Formulardrucks ist jedoch, dass eine entsprechende Erstellung von internen Nullwerten nur innerhalb eines Sets (Gruppe) funktioniert. Sobald statt eines Sets (zum Beispiel Kostenstellengruppe) ein Intervall übergeben wird erscheint das Intervall als einzelne Zeile stat die einzelnen Kontierungsobjekte untereinnader darzustellen.Soll also die Lehreinheit 101 mit den Kostenstellen 101000 bis 101004 ausgewertet werden muss eine entsprechende Kostenstellengruppe 101 angelegt werden. Ferner dürfen in dieser Kostenstellengruppe keine Intervalle sondern lediglich Einzelwerte eingetragen sein, da jede Zeile eines Sets auch entsprechend ausgewertet wird. Alternativ könnte man auch die Kostenstellen 101000 bis 101004 als Einzelwerte in der Selektion übernehmen.
Sofern die Kostenstellengruppe 101 die Kostenstellen 101000, 101001 sowie das Kostenstellenintervall 101002 - 101004 enthält aber nur auf den Kostenstellen 101000 und 101002 und 101004 Buchungen würde die Auswertung wie in den folgenden Tabellen dargestellt werden:
| Kostenstelle | Saldo |
|---|---|
| 101000 | 1.000,00 |
| 101001 | 0 |
| 101002 ... 101004 | 2.0000 |
| Summe | 3.0000 |
Hier werden tatsächlich auch Kostenstellen (im Beispiel 101001) ausgegeben, obgleich hier keine Buchung erfolgt ist. Intervalle werden nicht aufgelöst
| Kostenstelle | Saldo |
|---|---|
| 101000 | 1.000,00 |
| 101002 | 1.500,00 |
| 101004 | 500,00 |
| Summe | 3.0000 |
Hier werden nur Kostenstellen ausgegeben auf denen auch tatsächlich gebucht wurde. Intervalle in der Gruppe werden auf ihre Einzelwerte aufgelöst.
Fazit:
Zwar ist die Umsetzung der Berichtsanforderung durchaus möglich, allerdings sollte sich die Nachteile (längere Laufzeit, keine Auflösung von Intervallen) im Vorfeld klar gemacht werden, da andernfalls der Bericht mehr Rückfragen als Antworten liefert.Hinweis:
Eine kurze Einführung in das Thema Report Painter und Report Writer habe ich im Artikel "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Steuersoftware für das Steuerjahr 2024
Lexware TAXMAN 2025 (für das Steuerjahr 2024)
WISO Steuer 2025 (für Steuerjahr 2024)
* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
16:54 Uhr
Mehrjahresvergleich im ReportWriter/Painter mit variabler Spaltenanzahl je Jahr dank Variablen
Dieses funktioniert auch relativ gut, weist aber Probleme auf, wenn man einen Berichtszeitraum größer als fünf Jahre betrachten möchte und möglicherweise manchmal auch weniger Jahre betrachten möchte. Sofern ein Zeitraum von 10 Jahren betrachtet wird ist es immer möglich, dass (zum Beispiel bei der Auswertung von Kostenarten) manche Zeilen nur in einen Jahr dargestellt werden und somit bei einer mehrmaligen Auswertung eines Fünfjahresbericht dieser nicht exakt übereinstimmt, da bestimmte Zeilen in einen Zeitraum nicht ausgegeben werden.
Grundüberlegung:
Es soll ein Zeitrum "von Geschäftsjahr" "bis Geschäftsjahr" ausgegeben werden und dabei für jedes Jahr dazwischen eine Spalte mit den einzelnen Jahreswerten ausgegeben werden. Hierbei sollen auch tatsächlich nur so viele Spalten ausgegeben werden, wie auch Jahre zwischen dem übergegeben "von Geschäftsjahr" und "bis Geschäftsjahr" liegen.
Variablen für Report Writer anlegen
Über die Transaktion GS11 (im SAP Menü unter Infosystem-> Ad-Hoc-Berichte-> Report Painter -> Report Writer -> Variable -> Anlegen (Transaktion GS11)) können eigene Variablen angelegt werden.Bei der Anlage einer Variable bekommen wir die Frage gestellt auf welches Bezugfeld sich die Variable beziehen soll. Hierbei kann es hilfreich sein, sich vorab schon vorhandene Variablen anzusehen. Je nach verwendeter Berichtsbibliothek können wir dabei auf unterschiedliche Tabellen Bezug nehmen. Für die Bibliothek 1VK wäre dieses zum Beispiel die Tabelle CCSS "Berichtstabelle Gemeinkostencontrolling" und das Feld GJAHR "Geschäftsjahr".
Innerhalb der Bibliothel 8A2 wird auf die Tabelle GLPCT "EC-PCA: Summentabelle" und das Feld RYEAR "Geschäftsjahr" Bezug genommen.
Im folgenden Beispiel möchten wir einen Mehrjahresvergleich innerhalb der Profit-Center-Rechnung durchführen. Daher werden alle folgenden Variablen mit Bezugsfeld auf die Tabelle GLPCT und Feldname RYEAR angelegt. Bei allen folgenden Variablen handelt es sich um Formelvariablen. Neben einer Formelvariable kann hier auch eine Wertvariable (für einen festen Wert) oder eine Setvariable angelegt werden (hierdurch können Gruppen hinterlegt werden). Ein Beispiel für eine Setvariable wäre die Variable 6-AUFGR die innerhalb der Tabelle CCSS über das Feld AUFNR eine Auswertung von Innenauftragsnummern ermöglicht.
Variable für aktuellstes Geschäftsjahr über Benutzer-Exit (Userexit)
Die erste Variable die wir anlegen erhält die Bezeichnung ZPJAHR und soll das aktuellste Geschäftsjahr (entspricht "Bis Geschäftsjahr") darstellen. Hierzu haben wir im Einstiegsbild der Transaktion die Variablen ZPJAHR angegeben mit den Bezugsfeld GLPCT (Tabelle) und RYEAR (Feldname) sowie als Variablentyp FORMEL gewählt.Im Folgenden Screen können wir dann die Beschreibung und eine Formel angegeben.
Als Beschreibung nehmen wir "aktuellstes Geschäftsjahr" und als Formel '#S001'.
Durch die Anweisung '#S001' wird das aktuelle Geschäftsjahr über den Benutzer-Exit S001 als Vorschlagswert ausgegeben.
Wertvariable für ältestes Geschäftsjahr
Als nächste Variable legen wir eine Wertvariable (ebenfalls über Tabelle GLPCT und RYEAR) mit der Bezeichnung ZPJAHRE an. Bei einer Wertvariable kann ein Vorschlagswert angegeben werden. Dieser könnte zum Beispiel auf 2007 gesetzt werden. Bei der späteren Verwendung im Bericht wird dann das aktuelle Jahr für die Variable ZPJAHR vorgeschlagen (heute also 2014) und für die Variable ZPJAHRE das Jahr 2007. Dieses kann je nach Einrichtung natürlich auch auf ein anderes sinnvolles Datum gesetzt werden und später auch bei der Ausführung eines Berichtes überschrieben werden.Hiermit haben wir unseren Auswertungszeitraum passend eingeschränkt. Da es aber auch sein kann, dass wir nur ein Jahr auswertn wollen, sei hier schon vorab darauf hingewiesen, dass es sich bei der Variable ZPJAHRE um eine Hilfsvariable handelt, die später im Bericht nur zur Selektion, aber nicht zur Ausgabe genutzt wird.
Formelvariablen für Einzelne Jahre abhängig von der Selektion
Die Überlegung hinter den folgenden Variablen ist, dass im Jahr 1999 keine Buchungen in SAP erfasst sind. Sollten Sie auch in 1999 schon in SAP gebucht haben, wäre hier ggf. das Jahr 1899 eine gute Idee.Alle folgenden Variablen beziehen sich auf die Tabelle GLPCT und den Feldnamen RYEAR, In der folgenden Tabelle sind die Variable, Beschreibung und die dahinterliegende Formel aufgeführt. Die Formel zieht immer 1 von der vorherigen Variable ab, sofern der Abstand zwischen dem auszuwertenden Jahren noch der Bedingung der Variable entspricht. Ich denke, dass die Formeln selbst erklärend sein dürften. Die Variablen sind für 12 Jahre ausgelegt und können durch weitere Variablen natürlich erweitert werden.
| Variable | Beschreibung | Formel |
|---|---|---|
| ZPJAHR | aktuellstes Geschäftsjahr | '#S001' |
| ZPJAHRE | ältestes Geschäftsjahr | Wertvariable (Vorschlagswert 2007) |
| ZPJR-01 | Aktuellstes Geschäftsjahr - 1 | IF (1+'ZPJAHR'-'ZPJAHRE')> 1 THEN 'ZPJAHR' -1 ELSE 1999 |
| ZPJR-02 | Aktuellstes Geschäftsjahr - 2 | IF (1+'ZPJAHR'-'ZPJAHRE')> 2 THEN 'ZPJAHR' - 2 ELSE 1999 |
| ZPJR-03 | Aktuellstes Geschäftsjahr - 3 | IF (1+'ZPJAHR'-'ZPJAHRE')> 3 THEN 'ZPJAHR' -3 ELSE 1999 |
| ZPJR-04 | Aktuellstes Geschäftsjahr - 4 | IF (1+'ZPJAHR'-'ZPJAHRE')> 4 THEN 'ZPJAHR' -4 ELSE 1999 |
| ZPJR-05 | Aktuellstes Geschäftsjahr - 5 | IF (1+'ZPJAHR'-'ZPJAHRE')> 5 THEN 'ZPJAHR' -5 ELSE 1999 |
| ZPJR-06 | Aktuellstes Geschäftsjahr - 6 | IF (1+'ZPJAHR'-'ZPJAHRE')> 6 THEN 'ZPJAHR' -6 ELSE 1999 |
| ZPJR-07 | Aktuellstes Geschäftsjahr - 7 | IF (1+'ZPJAHR'-'ZPJAHRE')> 7 THEN 'ZPJAHR' -7 ELSE 1999 |
| ZPJR-08 | Aktuellstes Geschäftsjahr - 8 | IF (1+'ZPJAHR'-'ZPJAHRE')> 8 THEN 'ZPJAHR' -8 ELSE 1999 |
| ZPJR-09 | Aktuellstes Geschäftsjahr - 9 | IF (1+'ZPJAHR'-'ZPJAHRE')> 9 THEN 'ZPJAHR' -9 ELSE 1999 |
| ZPJR-10 | Aktuellstes Geschäftsjahr - 10 | IF (1+'ZPJAHR'-'ZPJAHRE')> 10 THEN 'ZPJAHR' -10 ELSE 1999 |
| ZPJR-11 | Aktuellstes Geschäftsjahr - 11 | IF (1+'ZPJAHR'-'ZPJAHRE')> 11 THEN 'ZPJAHR' -11 ELSE 1999 |
| ZPJR-12 | Aktuellstes Geschäftsjahr - 12 | IF (1+'ZPJAHR'-'ZPJAHRE')> 12 THEN 'ZPJAHR' -12 ELSE 1999 |
Die dahinterliegende Logik besagt, dass bei jeder Variable geprüft werden soll, ob eine Ausgabe noch erforderlich ist (der Berichtszeitraum sich also noch über die entsprechende Jahre zwischen ZPJAHR und ZPJAHRE erstreckt, oder ob alternativ das Jahr 1999 als Dummy verwendet werden soll.
Verwendung der Variablen im Report Painter
Nachdem diese Variablen definiert worden sind, können diese auch als Spalten im Reportpainter genutzt werden.
Hierfür werden folgende Berichtsspalten in der Bibliothek 8A2 über die Basiskennzahl "Betrag in PCTR-Hauswährung" für das Merkmal Geschäftsjahr angelegt.
Geschäftsjahr (Variable) ZPJAHR und als Beschreibung &ZPJAHR so dass der Variablenwert als Spaltenbezeichnung ausgegeben wird.
Die oben beschriebene Einbindung der Spalte ZPJAHRE für das Endjahr ist obsolet, da durch Bezug der einzelnen Variablen automatisch ZPJAHRE ebenfalls im Bericht mit eingebunden wird und damit im Selektionsbild aufgezeigt wird.
In der nächsten Spalte wird das Merkmal Geschäftsjahr ebenfalls mit Variable markiert und die Variable ZPJAHRE zugewiesen. Hier wird als Beschreibung "&ZPJAHRE ausblenden" festgelegt.
Nachdem die Spalte angelegt wurde kann diese direkt markiert werden (auf die Spaltenüberschrift klicken) und über BEARBEITEN -> SPALTE -> AUSBLENDEN diese Spalte ausgeblendet werden.
Hierdurch wird diese Variable zwar im Selektionsbild erscheinen (um den Berichtszeitraum einzugrenzen) wird aber später in der Berichtsausgabe nicht erscheinen.
Als weitere Spalten legen wir dann für das Merkmal die Variablen ZPJR-01 bis ZPJR-12 mit entsprechender Bezeichnung (Kurz-, Mittel- und Langtext) von &ZPJR-01 bis &ZPJR-12 als einzelne Spalten an.
Insgesamt dürften nun im Report Painter 13 Spalten vorhanden sein, womit wir insgesamt auch 13 Jahre auswerten könnten. Sofern der Berichtszeitraum kürzer ist würde für die hinteren Tabellen kein Wert ausgegeben werden, da im Jahr 1999 (wir erinnern uns, dieses Jahr wurde in der Variable zugewiesen, wenn der Berichtszeitraum kürzer ist) keine Buchungen erfolgt sind.
Damit sind wir dem Berichtswunsch schon sehr nahe, allerdings sind leere Spalten eigentlich nicht sehr informativ. Daher können wir über:
FORMATIEREN-> BERICHTSLAYOUT
im Register Spalten festlegen über den Punkt Nullspaltenbehandlung bestimmen Nullspalten zu unterdrücken.
Fazit
Damit werden die leeren Spalten des Jahres 1999 nicht mehr angezeigt. Somit werden tatsächlich nur so viele Spalten ausgegeben, wie zwischen dem ältestens und den aktuellsten Geschäftsjahr liegen. Eine Ausnahme wäre nur der Fall, wenn mehr als 13 Jahre ausgewertet würden. Allerdings stellt sich auch die Frage, ob eine Jahresangebe von 99 Jahren außer bei bestimmten Gesellschaftsspielen als Altersangabe auch noch ein überschaubarer Zeitraum sein können. Insgesamt handelt es sich hierbei um einen sehr flexiblen Bericht, der sowohl für größere als auch kleinere Zeiträume geeignet ist.Ein weiteres Beispiel kann eine Variable für das Quartal sein. Hier wird nur mit Formelvariablen gearbeitet. Hierbei wird die Variable QUARTAL als Wertvariable definiert und die einzelnen Perioden des Quartals mit folgenden Formeln versehen:
| Variable | Formel |
|---|---|
| QPER1 | ‘QUARTAL’ * 3 - 2 |
| QPER2 | ‘QUARTAL’ * 3 - 1 |
| QPER3 | ‘QUARTAL’ * 3 |
Gerade bei Zeiträumen zeigen solche Variablen einige neue und sicherlich spannende Möglichkeiten auf. Innerhalb des Berichtes müssen dann nur noch die Spalten mit den Variablen QPER1 bis QPER3 versehen werden und beim Berichtsaufruf wird dann im Selektionsbild die Variable QUARTAL abgefragt. In dieser Logik könnte die Variable ZPJAHRE, die wir im Report Painter Bericht ausgeblendet hatten, auch einfach nicht verwendet werden, da die anderen Variablen direkten Bezug zu ihr nehmen und damit diese über eine indirekte Definition ebenfalls abgefragt wird. Als Bonus könnte im Report dann auch noch die Summe von QPER1 bis QPER3 ermittelt werden und das Ergebnis des selektierten Quartals im Bericht mit ausgegeben werden.
Erweiterung für Gemeinkostencontrolling
Sollen statt Profit-Center lieber Innenaufträge oder Kostenstellen (bspw. über die Bibliothek 6o1 "Innenaufträge" oder 1VK "Kostenstellen - Vollkostenrechnung" ausgewertet werden bieten sich vergleichbare Variable mit Bezug auf die Tabelle CCSS "Berichtstabelle Gemeinkostencontrolling" und den Feld GJAHR "Geschäftsjahr" an. Entsprechend bietet es sich an die Variablen dann statt mit ZP für Profit-Center-Rechnung mit ZK oder ZI (gemeinsamer Nenner wäre wohl ZG für Gemeinkosten) beginnen zu lassen. Zwar beziehen sich die Variablen auf eine Tabelle, da diese aber zur reinen Wertermittlung herangezogen werden und dann in einen Merkmal der passenden Berichtstabelle verwendet werden könnten aber auch die ZP* Variablen in den anderen Bibliotheken verwendet werden.Im Buch »Berichtswesen im SAP®-Controlling« bin ich ausführlich auf dies Thema eingegangen.
(01. Juni 2017) Paperback ISBN: 9783960127406
Für 19,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Oder bei Amazon *
Hinweis:
Eine kurze Einführung in das Thema Report Painter und Report Writer habe ich im Artikel "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
16:15 Uhr
Bedingte Formatierung im Report Writer durch Definition von Schwellwerten
Dieses funktioniert über Schwellwertbedingungen innerhalb eines Berichtes möglich. Nach Aufruf des Bericht können über BEARBEITEN->SCHWELLWERT (STRG+F5) Schwellwertbedingungen für Abschnitte definiert werden.
Abhängig von einer Bezugsspalte können zwei Schwellwerte definiert werden.
Nehmen wir an, dass der Bericht aus drei Spalten besteht:
- Erlöse
- Kosten
- Saldo (Ergebnis)
- Nur ausgewählte Zellen drucken (dieses kann hilfreich sein, wenn nur negaitve Ergebnisse ausgedruckt werden sollen)
- Ausgewählte Zellen hevorheben (rot)
- Ausgewählte Zellen hervorheben (grün)
Neben der relativ eingeschränkten Möglichkeit der Formatierung ist ein weiterer Nachteil der Verwendung von Schwellwerten, dass diese nicht im Bericht gespeichert werden können sondern jedes Mal aufs Neue definiert werden müssen. Immerhin können diese nach Aufruf des Berichtes über Einstellungen->Einstellungen sichern für alle User gespeichert gespeichert werden. Hierdurch ist dann nur ein einmaliges Aufrufen der Berichte erforderlich und das entsprechende Sichern der Einstellungern.
Dieses unterscheidet Report Painter / Report Writer Berichte dann doch vom Recherchebericht in dem die Definitionen, wie im Artikel "Formatanzeige im Recherchebericht (Darstellung in 1 EUR)" beschrieben hinterlegt werden können.
Gerade bei umfangreichen Listen kann dieses aber dennoch ein nützliches Instrument sein einen schnellen Überblick zu erhalten. Dafür dürfte diese Funktion auch in anderen Standardberichten (Plan/Ist/Abweichung Kostenstellen und vergleichbare) vorhanden und für eine schnelle Übersicht nutzbar sein. Alternativ bietet sich die Nachbearbeitung in Excel an, wie im Artikel "Excel: bedingte Formatierung mit Pfeilen (Darstellung Tendenzen bei Veränderungen)" beschrieben.
Hinweis:
Eine kurze Einführung in das Thema Report Painter und Report Writer habe ich im Artikel "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
17:39 Uhr
Grundlagen Finanzbuchhaltung - Customizing von Nummerkreis und Belegarten
Während es in der Finanzbuchhaltung immer treu nach dem Motto geht "Keine Buchung ohne Beleg" erfolgt innerhalb SAP keine Buchung ohne eine entsprechende Belegnummer. Je nach Buchungsart (bspw. über die Transaktion FB60 Kreditorenrechnung buchen und der dort intern verwendeten Belegart KR werden entsprechende Belegnummern nach der erfolgreichen Buchung den Beleg zugeordnet. Der Aufbau einer solchen Belegnummer ist im Customizing über Nummernkreise festgelegt, die wiederum einzelnen Belegarten zugeordnet sind.
Belegarten und Nummernkreise im Customizing festlegen
Innerhalb des Customizing (Transaktion SPRO) für die Finanzbuchhaltung werden unter
- Finanzwesen (neu)
- Grundeinstellung Finanzwesen (neu)
- Beleg
- Belegarten
- Belegarten der Erfassungssicht definieren (Transaktion OBA7)
Die einzelnen Nummernkreise werden ebenfalls im Customizing festgelegt und können über die Transaktion SPRO über den Menüpfad
- Finanzwesen (neu)
- Grundeinstellung Finanzwesen (neu)
- Beleg
- Belegnummernkreise
- Belege in Erfassungssicht
- Belegnummernkreis der Erfassungssicht definieren (Transaktion FBN1)
- NR - Nummernkreisnummer
- Jahr - Bis Geschäftsjahr (bis wann ist der Nummernkreis gültig)
- von Nummer - als untere Grenze des Intervalls
- bis Nummer - als obere Grenze des Intervalls
- Nummernstand - aktueller Nummernstand, bei SAP interner Nummernvergabe
- EXT - Kz. für internen (' ') oder externen ('X') Nummernkreis (bei letzteren ist die Belegnummer in jeder Buchung mit anzugeben.Allerdings muss auch hier ein entsprechendes Intervall gepflegt werden.
Da in der Nummernkreispflege auch der aktuelle Nummernstand festgehalten wird ist es empfehlenswert diese Tabelle direkt im Produktivsystem über die Transaktion FBN1 zu pflegen.
Technisch betrachtet sind die Informationen zum Nummernkreis in der Tabelle NRIV - Nummernkreisintervalle hinterlegt. Es handelt sich hierbei um eine Customizingtabelle.
Auf Tabellenebene (über die Transaktion SE12 oder SE16 bzw. über eine Query können die einzelnen Einstellungen zum Nummernkreis auch direkt aus der Tabelle ausgelesen werden.
Hierzu ist das Feld OBJECT "Name des Nummernkreisobjekts" mit RF_Beleg "Nummernkreise für den Buchhaltungsbeleg" und das Feld SUBOBJECT "Wert des Unterobjekts des Nummernkreisobjekts" mit dem entsprechenden Buchungskreis (bspw. BUKR) zu selektieren.
Nun erhält man eine Auflistung der Einstellungen für den Buchungskreis.
Es werden folgende Felder in der Tabelle ausgegeben:
- NRRANGENR "Nummernkreisnummer"
- TOYEAR "Bis-Geschäftsjahr"
- FROMNUMBER "Von-Nummer"
- TONUMBER "Bis-Nummer"
- NRLEVEL "Nummernkreisstand"
- EXTERNIND "Kz. für internen (' ') oder externen ('X') Nummernkreis"
Bei der Vergabe von externen Intervallen ist entweder eine Angabe von Zeichen oder Zahlen möglich. Somit kann dieser Nummernkreis 000001 bis 999999 oder AAAAAA bis ZZZZZZ nicht aber AAAAAA bis 999999 umfassen.
Sofern jahresabhängig Nummernkreise gepflegt werden, sind diese im Rahmen des Geschäftsjahreswechsel jedes Jahr aufs Neue im Customizing zu hinterlegen.
Nummernkreise im Controlling pflegen
Ebenso wie Belege in der Finanzbuchhaltung sind auch die Belegnummern im Controlling einem Nummernkreis zugeordnet. Technisch betrachtet sind diese im Objekt RK_BELEG BUCH "Nummernkreise CO-Beleg" hinterlegt. Diese Nummernkreise sind für einzelne Vorgänge im Controlling vorgesehen und sind im Customizing vergleichbar zu den Nummernkreise in der Finanzbuchhaltung aufgebaut.Die Pflege der Nummernkreise für CO Belege ist im Customizing (Transaktion SPRO) unter
- Controlling
- Controlling Allgemein
- Organisation
- Nummernkreise für CO-Belege pflegen (Transaktion KANK)
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt


2 Kommentare - Permalink - SAP