11:37 Uhr
SAP Query ABAP Coding zum Zusatzfeld Inhalt eines Strings auswerten
Das Beispiel von damals sollte verwnedet werden, damit eine IF Schleife nur bei Zahlenwerten (ohne Buchstaben) erfolgt.
ABAP: Enthält Variable nur Zahlenwerte
Vorab sollte man sich jedoch bewust sein, dass ein Innenauftrag als Schlüsselfeld durchaus alphanumerische Werte enthalten kann. Hier stellt sich also die Frage, wie es möglich ist die Auftragsnummer zu überprüfen, ob tatsächlich nur Zahlenwerte enthalten sind.Hier kann eine Wenn Funktion (IF) mit der vergleichendenen Anweisung CO (contains only) weiter helfen. ABAP hat einige Vergleichsoperatoren, so dass hier Variablen mit Variablen oder aber auch mit bestimmten Werten verglichen werden können. Zu diesen logischen Ausdrücken gehört unter anderen CO (contians only), CN (contains not only) und weitere. Diese liefern ein Wahr wenn der Vergleich erfolgreich war und nur die Zeichen des Vergleichsparameter vorhanden war (CO) oder aber wenn noch weitere Zeichen dabei sind (CN). Interessant ist auch noch die Möglichkeit CS (contains string) womit vergleicht werden kann, ob eine bestimmte Zeichenfolge in einen Wert vorhanden ist.
Ein ausführliches Beispiel wäre
DATA: L_ZAHLEN(10) TYPE c VALUE = '0123456789'.
* L_zahlen enthaelt Zahlenwerte Leerzeichen
DATA: L_innenauftrag type AUFK-AUFNR.
IF L_innenauftrag CO L_ZAHLEN.
* Reine Auftragsnummer
ELSEIF.
* Alphanumerischer Innenauftrag
ENDIF.
Selbstverständlich lässt sich dieses auch ohne Definition einer Konstanten regeln. Hierzu kann folgende Anweisung erstellt werden:
Damit kann nun mit den vorhandenen Zahlenwerten weitergearbeitet werden.IF AUFK-AUFNR CO '1234567890'.
* Innenauftrag hat nur Nummern
ELSEIF.
*Innenauftrag ist alphanumerisch
ENDIF.
Auch sonst wurden hier noch weitere Übersetzungen der Aufrtragsnummer in einen sprechenderen Schlüssel / Text vorgestellt.
ABAP Vergleichsoperatoren
Isa Bodur hat im Artikel "Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel" einige Vergleichsmöglichkeiten mit Erläuterungen vorgestellt.Diese mag ich hier kurz als Tabelle aufführen.
Operator | Bedeutung |
---|---|
CO | Contains Only / Enthält nur … |
CN | Contains Not only / Enthält nicht nur … |
CA | Contains Any / Enthält mindestens eines der folgenden Zeichen |
NA | Contains Not Any / enthält keines der Zeichen |
CS | Contains String / enthält Zeichenkette |
NS | contains No String / enthält Zeichenkette nicht |
CP | Covers Pattern: passend zum Muster |
NP | No Pattern: keine Übereinstimmung zum Muster |
Beim Pattern / Muster ist zu beachten, dass * eine Zeichenkette und + für ein beliebiges Zeichen steht.
Zum besseren Verständnis nehmen wir eine Variable html als Zeichenkette und geben hier HTML Code als Inhalt.
DATA html TYPE string.
html ='Dieser Text ist <i>kursiv</i>.'
Hier ist das HTML Tag <i> und </i> für kursive Schrift verantwortlich.
In der Prüfung kann nun per
IF html CP '*<*>*'.
darauf reagiert werden, dass die Variable html HTML Code enthält.
Praxisbeispiel CS enthält Zeichenkette
Die CO Innenaufträge sind sowohl über das zugeordnete Profitcenter als auch über die verantwortliche Kostenstelle weiteren Bereichen zugeordnet.Abhängig vom zugeordneten Profitcenter soll nun eine weitere Information (zum Beispiel der im Kostenstellenschlüssel hinterlegte Abteilung) mit in einer Stammdatenliste ausgegeben werden. Dies soll aber nur bei solchen Innenaufträgen erfolgen die zu bestimmten Buch-Profitcentern gehören ausgegeben werden.
Hier sind die Profitcenter B-SAP, B-OFFICE, B-BWL jeweils für eine bestimmte Sparte von Büchern unseres Verlages hinterlegt.
Nun haben wir ein Zusatzfeld ZABTEILUNG (Type C, Länge 030, Ausgabelänge 030) angelegt und werden hier durch folgendes Coding eine Prüfung durchführen.
Schritt 1:
Leeren der Variable ZABTEILUNG:
CLEAR ZABTEILUNG.
Schritt 2:
Ist das zugeordnete Profitcenter keines mit der Zeichenkette 'B-' soll als Wert NR ausgegeben werden:
IF AUFK-PRCTR NS 'B-'.
ZABTEILUNG = 'NR'.
ENDIF.
Schritt 3:
Enthält das Profitcenter doch B- soll anhand der verantwortlichen Kostenstelle der sprechende Schlüssel übersetzt werden:
IF AUFK-PRCTR CS 'BS-'.
Schritt 4:
Die Übersetzung des Kostenstellenschlüssels soll jedoch nur bei numerischen Kostenstellen erfolgen:
IF AUFK-KOSTV CO '1234567890'.
Schritt 5:
Diverse Bedingungen (IF Schleife) zur Übersetzung des Kostenstellenschlüssels, wobei die Kostenstelle hier mit führenden 0 auf zehn Zeichen geprüft wird.Die Unterscheidung der Abteilungen ist anhand der ersten Ziffer der Kostenstellenummer zu sehen:
- 1 = Verwaltung
- 2 = Einkauf
- 3 = Gebäude
- 4 = Redaktion
- 5 = Produktion
IF
AUFK-KOSTV BETWEEN '0001000000' AND '0001999999'.
ZABTEILUNG = 'Verwaltung'.
ELSEIF
AUFK-KOSTV BETWEEN '0002000000' AND '0002999999'.
ZABTEILUNG = 'Einkauf'.
ELSEIF
AUFK-KOSTV BETWEEN '0003000000' AND '0003999999'.
ZABTEILUNG = 'Gebäude'.
ELSEIF
AUFK-KOSTV BETWEEN '0004000000' AND '0004999999'.
ZABTEILUNG = 'Redaktion'.
ELSEIF
AUFK-KOSTV BETWEEN '0005000000' AND '0005999999'.
ZABTEILUNG = 'Produktion'.
ENDIF.
Schritt 6:
Die Prüfung des Intervalles der Kostenstelle ist damit abgeschlossen und wir schließen beide IF Schleifen (Nummernschlüssel Kostenstelle und Profitcenterprüfung)
ENDIF.
ENDIF.
Dieses Zusatzfeld kann nun in der Grundliste der Query mit aufgenommen werden.
Das vollständige Coding zum Zusatzfeld lautet also:
CLEAR ZABTEILUNG.
IF AUFK-PRCTR NS 'B-'.
ZABTEILUNG = 'NR'.
ENDIF.
IF AUFK-PRCTR CS 'BS-'.
IF AUFK-KOSTV CO '1234567890'.
IF
AUFK-KOSTV BETWEEN '0001000000' AND '0001999999'.
ZABTEILUNG = 'Verwaltung'.
ELSEIF
AUFK-KOSTV BETWEEN '0002000000' AND '0002999999'.
ZABTEILUNG = 'Einkauf'.
ELSEIF
AUFK-KOSTV BETWEEN '0003000000' AND '0003999999'.
ZABTEILUNG = 'Gebäude'.
ELSEIF
AUFK-KOSTV BETWEEN '0004000000' AND '0004999999'.
ZABTEILUNG = 'Redaktion'.
ELSEIF
AUFK-KOSTV BETWEEN '0005000000' AND '0005999999'.
ZABTEILUNG = 'Produktion'.
ENDIF.
ENDIF.
ENDIF.
Weitere Beispiele ABAP Code im Zusatzfeldcoding
Ein umfangreicheres Beispiel inklusiver einer SELECT Abfrage über alle passenden Ergebnisse zur Abfrage über die verantwortliche Kostenstelle des CO Innenauftrags und eines Feld innerhalb der Kostenstellenstammdaten ist im folgenden Coding zu sehen. Dabei sind im folgenden Code die Regeln als Kommentar mit vorangestellten * im Coding hinterlegt.Zusatzfeld VLE (Typ C und Länge 030).
DATA: L_CSKSTELTX type CSKS-TELTX.
* Regel 1 Für das Intervall der Kostenstellen 10000000 bis 12345678
IF AUFK-KOSTV => '0010000000' AND AUFK-KOSTV =< '0012345678'.
* Regel 1.1 Die ersten Ziffern der Kostenstelle ohne führende 00
WRITE AUFK-KOSTV(6) TO VLE NO-ZERO .
* Regel 1.2 Sonderfälle einzelner Kostenstelle
ELSEIF AUFK-KOSTV => '0011110000' AND AUFK-KOSTV =< '0011119999'.
VLE = '1111BE'.
ELSEIF AUFK-KOSTV = '0012340000'.
VLE = '1234BE'.
* Regel 2 Verantwortliche Kostenstelle ohne führende 00
ELSE.
WRITE AUFK-KOSTV TO VLE NO-ZERO .
ENDIF.
* Regel 3 Feld Teletexnummer (Stammdaten Kostenstelle - Tabelle CSKS) ist gefüllt
SELECT teltx FROM csks INTO L_CSKSTELTX up to 1 rows
WHERE kokrs = AUFK-KOKRS
AND kostl = AUFK-KOSTV
and datbi >= SY-DATUM
and teltx ne space.
ENDSELECT.
IF sy-subrc = 0.
VLE = L_CSKSTELTX.
ENDIF.
Eine inhaltliche Erläuterung 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" im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle, sofern nicht in einem anderen Feld ein Wert steht" erläutert.
Gerade im Berichtswesen ist es hilfreich, sich einige Werkzeuge zum Reporting und ihre Möglichkeiten näher anzusehen.
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 *
Dabei sind SAP Query und Report Painter für mich noch immer praktische Tools um Berichte zu erstellen.
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.
17:59 Uhr
HCM Organisationsmanager (Transaktion PPOSE) Suchbereich und Auswahlbereich zu sehr verkleinert - Standardlayout wiederherstellen
- Personal
- Organisationsmanagement
- Aufbauorganisation
- Organisation und Besetzung
- Anzeigen (PPOSE)
Ausgangslage: Suchbereich zu sehr verkleinert, so dass die Größe nicht mehr zurücksetzbar ist
Beim Aufruf dieser Transaktion wird im linken Beeich der Suchbereich sowie der Auswahlbereich mit den Suchergebnisen angezeigt. Hier kann nach Organisationseinheit, Planstelle, Stelle, Person und andere Objekte gesucht werden.
Wie auch bei anderen SAP Fenstern kann dieser Bereich auch kleiner gezogen werden, so dass die Bildgröße individuell angepast wird.
Nun hatten wir aber den Fehler, dass dieser Suchbereich so klein gezogen worden ist, dass er sich nicht mehr in der Größe hat anpassen lassen (der Mauszeiger hatte kein "⇔"), so dass die Fenstergröße nicht mehr anpassbar und ein Arbeiten nicht mehr möglich war.
Die Fenstereinstellung wird im HCM nach gewählter Sicht benutzerspezifisch gespeichert, so dass auch beim nächsten Aufruf der Transaktion PPOSE die Größe der Bildbereiche sowie die letzte Objektauswahl erhalten bleibt.
Glücklicherweise lassen sich diese benutzerspezifischen Einstellungen durch den ABAP Report (aufrufbar über die Transaktion SA38) RH_DELETE_OM_USER_SETTINGS wieder zurücksetzen.
Hierzu kann die Benutzerkennung des Users eingetragen werden und als Einstellungen
- Suchvariante löschen
- Attribute des Objektmanagers löschen
Innerhalb der PPOSE selbst können die User selbst ihre Benutzereinstellungen leider selbst nicht löschen, so dass hier dieser Report entweder durch einen berechtigten User (Poweruser, Keyuser, Anwendungsbetreuung) oder aber durch die SAP Basis ausgeführt werden sollte.
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt
14:52 Uhr
Update zu Schulungsunterlagen und Bücher rund um ABAP (Programmiersprache SAP) und die Rolle von Keyuser im SAP Umfeld
ABAP als Programmiersprache im SAP Umfeld
Das Thema ABAP ("Advanced Business Application Programming") ist die Programmiersprache in der der Großteil der Anwendungen in SAP geschrieben sind. Auch wenn das Programmieren eher im Bereich der Entwicklung zu sehen ist dürften die Grundlagen von ABAP auch für KeyUser von Interesse sein. Persönlich nutze ich teilweise ABAP Code sehr gerne um innerhalb SAP Query ein wenig Coding zu hinterlegen gerade weil dadurch auch die Möglichkeit gegeben ist Auswertungen um Zusatzinformationen zu erweitern.
Vor einigen Jahren (2006) hatte ich an der VHS Offenbach eine Weiterbildung zum Thema "SAP R/3 Grundlagen der ABAP Programmierung" besucht und kann auf diese Grundlagen auch in der normalen Arbeit mit SAP immer wieder erfolgreich zurückgreifen da es manchmal doch hilfreich ist sowohl ABAP Code zu verstehen als auch das Konzept der Datenbanken (Strukturen, View, transparente Tabellen, logische Datenbanken, ...) zu verstehen.
Aktuelle Schulungsunterlagen rund um ABAP
Im Artikel "ABAP Schulungsdaten" hatte ich ja schon einmal Bücher rund um ABAP empfohlen und auch über den Transaktionscode ABAPDOCU können Beispiele und eine Dokumentation zu ABAP innerhalb eines SAP Systems aufgerufen werden. Dieses funktioniert auch innerhalb MINISAP.Trotzdem sind seit einigen Jahren hier aktuelle Bücher veröffentlicht worden, so dass ich auf diese gerne hinweisen mag.
Hier bietet die digitale SAP-Bibliothek von Espresso Tutorials (siehe "SAP Know How") nicht nur eBooks zum Thema sondern auch Schulungsvideos die ein sechsteiliges Videotutorial zum Thema ABAP Einstieg an.
Die Videotutorials beinhalten die folgenden Basis-Kurse für Einsteiger:
- Programmieren lernen mit SAP (4 Stunden)
- Komplexe Datenarten und Debugging (3 Stunden)
- Kontrollstrukturen, Modularisierung (2,5 Stunden)
- Das Data Dictionary (3 Stunden)
- Datenbanken & Code Inspector (2 Stunden)
- Dynamische Programmierung (2,5 Stunden)
Hier sind sicherlich die beiden Bücher:
Eine ausführliche Beschreibung ist unter Buchempfehlungen unter SAP-Praxishandbuch - ABAP Teil 1: Konzeption, Entwicklung, Debugging
Paperback ISBN: 978-3945170410
Für 29,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Oder bei Amazon
Eine ausführliche Beschreibung ist unter Buchempfehlungen unter SAP-Praxishandbuch ABAP - Teil 2: Performance, Erweiterungen und Transportwesen
Paperback ISBN: 978-3945170656
Für 29,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Oder bei Amazon
interessant. Allerdings hat der Verlag mittlerweile auch entsprechende Bücher zu ABAP Object ("Schnelleinstieg in SAP ABAP Objects: 2. Auflage" *) als auch zum Thema ABAP mit S/4 HANA ("ABAP-Programmierung unter SAP HANA" *).
Auch diese Bücher sind natürlich als eBooks in der SAP Flatrate enthalten, so dass hier weiterhin mit neuen Büchern und damit aktuellen Wissen rund um SAP gearbeitet werden kann.
Daneben bietet aber auch das berater-wiki.de von René Eberstein immer wieder eine spannende Anlaufstelle sei es zum Thema Namenskonventionen oder auch zum ABAP Editor bzw. Objekt Navigator über die Transaktion SE80.
Neben Entwicklerinnen und Entwicklern sollten, meiner Meinung nach, aber auch Key-User zumindest grundlegende Kenntnisse rund um ABAP bzw. Datenbank im SAP Umfeld haben.
Die Rolle der Keyuser im SAP Umfeld
Während durch die SAP die Userytpen Limted, Professional, Develeoper ... etc aus lizenzrechtlicher Sicht definiert ist auch für ein Unternehmen entscheidend welche Rolle und welche Anforderungen an Keyuser / Poweruser oder auch an die Anwendungsbetreuung gestellt werden soll.Definition Keyuser, Poweruser aus Wikipedia
Laut Wikipedia werden "als Power-User werden in der Informations- und Kommunikationstechnik Benutzer bezeichnet, die über besondere Kenntnisse und Fähigkeiten im Vergleich mit durchschnittlichen Nutzern verfügen[1] und/oder die Systeme besonders stark auslasten." während Keyuser hier folgende Aufgaben zugewiesen werden "Der Key-User ist jener Anwender, der sich in seinem Bereich auf die dort eingesetzte Software bzw. entsprechende Software-Module spezialisiert. Ein Key-User unterstützt den Ausbau und die Integrationstiefe und vertritt die fachlichen Interessen des Fachbereiches im Projektteam. Er fungiert zudem als Ansprechpartner für die Kollegen in der eigenen Abteilung, den Software-Anbieter und die Projektleiter. Ein Key-User kann eigenverantwortlich erforderliche Schulungen für seine Kollegen durchführen. "
Dr. Andreas Prieß unterscheidet im Buch "SAP-Berechtigungen für Anwender und Einsteiger" * (ebenfalls bei Espresso Tutorials und damit in der Flatrate enthalten) die unterschiedlichen Usertypen nach Anwender, Keyuser, Anwendungsbetreuer, Benutzerverwalter und Systemadministratoren. Diese Sicht ist natürlich auch sehr stark durch die Brille der Berechtigung gemünzt (wofür das Buch tatsächlich eine lesenswerte Empfehlung ist.
Im Rahmen eines Key-User-Konzeptes haben die Keyuser eine Schlüsselfunktion innerhalb eines Unternehmens und weitreichende Kenntnisse (und Berechtigungen) für eines oder mehrere der eingesetzten SAP-Module oder Teilmodule. Sie arbeiten dabei eng mit den Anwendungsbetreuern zusammen und dienen hier als fachliche Ansprechpartner. Die Anwendungsbetreuung ist dabei zum Beispiel im Hochschulumfeld beim SAP Einsatz an ein Competenc Center gebunden in den gemeinschaftlich technische Lösungen und Entwicklungen gebündelt sind.
Aufgaben für die Rolle Key-User im SAP Umfeld
Entsprechend der Betreuungsvereinbarung sind hier auch die Anforderungen an Keyuser je nach Unternehmen sehr unterschiedlich. Dieses kann beim SAP Modul Controlling von der Konzeption der Kostenstellenstruktur über die Entwicklung von Umlagezyklen bis hin zum Customizing oder auch tatsächlich Entwicklungen von Berichten wie im Artikel "Unterschiedliche Auswertungsmöglichkeiten im Controlling (Report Writer, Recherchebericht, SAP Query) und natürlich Excel ;-)". Im SAP Modul PSM-FM (Public Sector Management - Fundsmanagement / Öffentliche Verwaltung - Haushaltsmanagement) würde ich hier tatsächlich Rechercheberichte oder auch die Pflege der FMDERIVE ebenso wie das Thema Budgetierung (sei es die klassische Budgetierung siehe "SAP PSM-FM klassische Budgetierung mit unterschiedlichen Budgetversionen" oder BCS siehe "PSM Haushaltsmanagement Budgetverwaltungssystem BCS oder klassische Budgetierung") als relevante Kenntnisse betrachten.
Themen wie eCatt bzw. LSMW können gemeinsam mit der SAP Basisbetreuung erarbeitet werden. Vergleichbar sehe ich dieses bei Fragen um die Entwicklung und Kenntnisse in der Programmierung. Ein Grundverständnis der Möglichkeiten bzw. der Zusammenhänge sehe ich durchaus als hilfreich für die tägliche Arbeit an, aber für vertiefende Anforderungen sind Entwickler, externe Berater oder auch Kolleginnen und Kollegen von der SAP Basis sicherlich die besseren Ansprechpartner.
Alternativ verweise ich hier auch gerne auf die Artikel "Grundlagen Kurzeinführung und Handbuch SAP Query", "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" oder auch "Massenstammdatenpflege mit LSMW oder SECATT dank Transaktionsaufzeichnung - Handbuch erweiterte computergestützte Test-Tool (eCATT) und LSMW" welche hier ebenfalls als Grundlagen eine gute Anlaufstelle anbieten.
Durch die Veränderungen der Anforderungen gerade im SAP Umfeld dürfte das Thema "lebenslanges Lernen und Weiterbildung" weiterhin ein wichtiger Punkt sein, der neben der Besetzung einer Stelle als Keyuser auch gleichzeitig die Notwendigkeit einer Zusammenarbeit und Möglichkeit der Weiterentwicklung im Rahmen der Tätigkeiten als Keyuser fordert.
Entsprechend positiv sehe ich auch, dass sich Competence Center nicht nur um die technische Betreuung eines SAP Moduls kümmern sondern auch aktiv ein Schulungskonzept ausarbeiten wodurch auch Key-User aktuell die Möglichkeit der Fortbildung haben.
Gerade übergreifende Themen wie Berechtigungskonzepte oder auch Berichtstools können hier ein Wissenaustausch über die Anforderungen aber auch vorhandenen Kenntnisse an den einzelnen Einrichtungen fördern und den eigenen Horizont sowohl fachlich als auch technisch erweitern.
Weiterbildung und Dokumentationen - die Bedeutung von guten Handbüchern
Aus meiner beruflichen Erfahrung im Hochschulbereich ist tatsächlich ein wichtiger Punkt, insbesondere bei technischen Weiterentwicklungen, der Austausch mit anderen Hochschulen. Dabei können abseits von Arbeitsgruppen zu einzelnen übergreifenden Themen auch zwischen einzelnen Hochschulen (oder Einrichtungen) ein Austausch über neue Berichtsmöglichkeiten oder Entwicklungen stattfinden, so dass nicht mehrere Einrichtungen parallel das Rad neu erfinden müssen.Zum Austausch im SAP Umfeld dienen aber auch externe Möglichkeiten der Weiterbildung genutzt (eBooks, Schulungsvideos oder auch SAP Fachforen wie HERUG, DSAG oder FICO Infotage).
Aber auch innerhalb der eigenen Einrichtung sind ein regelmäßiger Austausch zwischen Keyuser, Poweruser und SAP Basisbetreuung eine hilfreiche Sache gerade bei Themen wie Auswertungen oder Entwicklungen von Berichten oder auch Berechtigungsfragen.
Gerade da viele Einstellungen innerhalb SAP auch Auswirkungen auf andere Module haben sollte hier ein regelmäßiger Austausch auf der fachlichen und technischen Ebene im Interesse aller Beteiligten sein.
Desweiteren dürften aber Onlineforen, Seiten im Internet zu SAP oder auch Blogs wie dieses weiter helfen. Nicht zu vernachlässigen, insbesondere bei der Entwicklung von Berichten ist auch das Thema der Dokumentation.
Dieses kann technisch direkt im System erfolgen (wie im Artikel "Fachliche und technische Dokumentation von Selektionsvarianten und individuelle Berichte in SAP identifizieren" oder "Dokumentation von Berichtsgruppe und Berichtsdokumentation bei Report Painter und Writer Berichten" aber auch außerhalb des Systems sind Dokumentationen und Handbücher gerade bei Neubesetzung von Stellen neben einer ordentlichen Einarbeitung der neuen User ein Schatz der tatsächlich im Laufe des Arbeitsalltag angelegt werden kann.
Sicherlich ist das Anlegen eines Handbuchs oder die Dokumentation von Berichten mit Aufwand verbunden, aber oftmals ist man auch selbst sehr dankbar darüber, wenn zu einen späteren Zeitpunkt hier noch einmal ein Blick in die eigenen Aufzeichnungen geworfen werden kann um sich an die Bedeutung bestimmter Einstellungen oder entwickelte Berichte zu erinnern. Mittlerweile würde ich auch dieses Blog hier als persönliches Nachschlagewerk und nützlichen Werkzeugkosten betrachten. :-)
Fazit
Neben aktuellen Buchempfehlungen dürften gerade in der Beratung und Schulung von Keyusern eine der größeren Herausforderungen für Unternehmen stecken. Sowohl das Thema Wechsel zu S/4 HANA als auch die Weiterentwicklung des eigenen Berichtswesen und Ausbau der Kenntnisse im SAP Umfeld ist auch in Zukunft eine große Herausforderung und zeigt, dass neben reinen Wissen auch die Fähigkeiten sich in neue Themen einzuarbeiten aber auch Anforderungen zu erkennen bzw. mit fachlich Verantwortlichen zu kommunizieren einen ebenso hohen Stellenwert haben sollten.* Amazon Partnerlink
Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
Smartwatch -Smarte Geräte (Wearable) am Handgelenk
13:34 Uhr
ABAP Anweisung WRITE zum Umwandeln von Variablen und Werten wie FLOAT (Gleitpunktzahl, Fließkommazahl)
Das Feld ATFLV hat als Eigenschaften Datentyp FLTP (interner Fließkomma-Wert) in der Länge von 16.
Zur Verdeutlichung des Problems rufe ich noch einmal die Ausgangslage des Problems in Erinnerung und habe ein Merkmal als Datum definiert und den gespeicherten Wert in der Tabelle AUSP näher angesehen:
Datum | Wert als Float AUSP-ATFLV |
---|---|
01.01.2018 | 2,0180101000000000E+07 |
14.05.2017 | 2,0170514000000000E+07 |
13.07.2017 | 2,0170713000000000E+07 |
Nun stellt sich für die Query die Frage, wie aus den FLOAT Wert ein Datumswert ermittelt werden kann.
Hierzu hatte, nach der Nutzung von Funktionsbausteinen und verschiedenen anderen Methoden Wolfgang per Kommentar noch eine alternative Lösung gebracht.
Hallo Herr Unkelbach,
zu der Umwandlung von Float in Date gibt es noch eine weitere Alternative:
DATA: zlv_float type f value '2.006123100000000E+07',
text(10) type c.
write zlv_float to text Exponent 0.
Das Ergebnis ist dann ' 20161231'.
Wichtig das Ergebnisfeld muss 10 stellig sein.
Gruß Wolfgang
Vielen Dank an Wolfgang für diesen aber auch schon einige andere Hinweise zu Artikeln hier im Blog. Tatsächlich steckt in der Write Anweisung auch die Möglichkeit Werte umzuwandeln.
Die Anweisung EXPONENT legt den Exponenten bei der Aufbereitung von Gleitpunktzahlen bzw. einer Fließkommazahl fest. Wenn die Anweisung Exponent den Wert 0 enthält, wird kein Exponent erzeugt und somit die originäre Zahl erzeugt.
Matheamtisch enthält die Gleitpunktzahl gleichzeitig eine Information zur Anzahl der Nachkommastellen beziehungsweise der dargestellte wird mit 10Exponent multipliziert.
In unseren Fall wäre dieses also 2,018010100000000 * 107 was wieder 20180101 ergibt.
Die Verwendung der WRITE Funktion zur Umwandlung von Zahlenwerten in das gewünschte Format hatte ich auch im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle sofern nicht in einen anderen Feld ein Wert steht" 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" behandelt.
Durch den Zusatz NO-ZERO werden die vorrangestellten 000 eines Wertes entsprechend entfernt, so dass später mit der reinen Zahl ohne führender 0 gearbeitet werden kann.
Hierbei ist es jedoch hilfreich vorab zu prüfen, ob der Wert tatsächlich nur aus Zahlen besteht. Dieses ist im Artikel "Drittmittelstatistik nach LOMZ über Recherchebericht und SAP Query" durch die Anweisung
IF AUFK-AUFNR CO '1234567890'.
im Abschnitt "LOMZ relevante Drittmittel" beschrieben worden.
Gerade beim Umgang mit Programmiersprachen gibt es oft mehrere Wege um ein Ergebnis zu erhalten und gerade die obige WRITE Anweisung eignet sich auch hervorragend dazu als Werte statt Text gespeicherte Klassifizierungsmerkmale wieder aufzulösen und entsprehcend lesbar in der Ausgabe zu machen.
Somit kann auch eine einfache WRITE Anweisung wesentlich mehr als
WRITE 'HELLO WORLD'.
Grundsätzlich ist das Thema ABAP Programmierung aber tatsächlich noch ein Punkt den ich gerne ausbauen würde und wo bei mir noch ein zwei Bücher im RUB stehen.
Für kleinere ABAP Anweisungen zum Beispiel im Rahmen einer SAP Query hilft oft schon der Austausch in Onlineforen, mit Kolleginnen und Kollegen und ein wenig die Webempfehlungen oder andere Blogs.
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.
21:28 Uhr
Grundlagen SAP Query Variablen über Selektionsfelder mit Werten füllen Eingabe auf Selektionsbild oder Abgrenzungsparameter
Hierzu möchte ich zwei Möglichkeiten vorstellen ohne tiefer auf die Beispiele einzugehen sondern nur um die Herangehensweise zu schildern.
Im Ergebnis kann beim Ausführen einer Query über ein Selektionsfeld ein Wert mitgegeben werden und dieser weiter verarbeitet werden. Diese Weiterverarbeitung ist noch einmal ein Thema für sich, aber die Arbeit mit Abfrageparametern innerhalb einer SAP Query kann für viele Berichtsanforderungen nützlich sein. Dieses ist der Grund, dass ich die beiden Möglichkeiten hier gerne festhalten möchte.
1. Möglichkeit: SAP Query und Lokales Feld Eingabe auf dem Selektionsbild
Handelt es sich um ein Feld in das lediglich eine Eingabe erfolgen soll (Wert eingetragen) oder wenn das Selektionsfeld auch in der Liste der Query selbst genutzt werden soll, bietet sich ein LOKALES FELD an, dass statt einer Berechnungsvorschrift die Option "Eingabe auf dem Selektionsbild" erhält. Dadurch landet das Feld in der Selektionsmaske und es kann ein entsprechender Wert eingetragen werden.Sofern das Feld eine Referenz über "gleiche Eigenschaften wie Feld" erhält kann hier auch die F4-Werthilfe zum Auswahl eines Feldes genutzt werden.
Denkbar ist hier die im Artikel "Abrechnungsvorschriften von Innenaufträgen auf identische verantwortliche Kostenstelle und empfangende Kostenstelle per Query mit Ampelfunktion prüfen" beschriebene Ursprungszuordnung zu verwenden und statt ZUK direkt in der Berechnungsvorschrift zu verknüpfen durch das lokale Feld hier Ursprungszuordnung ZUK im Selektionsfeld einzutragen und die Übereinstimmung der verantwortlichen Kostenstelle des Innenauftrag und das Feld empfangende Kostenstelle (COBRB-KOSTL) zu überprüfen.
Wird ZUK nicht eingegeben (das Selektionsfeld bleibt leer) erfolgt dann die Prüfung mit allen Abrechnungsvorschriften. Um dieses zu umgehen kann auch die Option OBLIGATORISCH gesetzt werden, wodurch eine Eingabe auf jeden Fall erfolgen muss.
2. Möglichkeit Infoset Definition von Abgrenzungsparameter und Zusatzfeld
Statt in der Query per lokales Feld besteht auch die Möglichkeit ein Zusatzfeld innerhalb eines Infoset mit einer Selektion zu versehen. Hierzu kann die Möglichkeit der AbgrenzungHierzu sind jedoch zwei Schritte erforderlich.
Abgrenzungsparameter anlegen
Im Infoset (Transaktion SQ02) können über die Schaltfläche ZUSÄTZE nicht nur Zusatztabellen und Zusatzfelder angelegt werden sondern es besteht auch die Möglichkeit über das Register Abgrenzung eine Abgrenzung für das Infoset anzulegen.Vergleichbar zum Zusatzfeld kann nun ein Name vergeben werden und als Optionen stehen Selektionskriterium und Parameter zur Verfügung. Als Selektionskriterium kann direkt Bezug auf ein Tabellenfeld genommen werden und auch mehrere Werte selektiert werden.
Für dieses Beispiel soll jedoch ein einzelner Wert eingetragen werden (bspw. Kontengruppenname oder ein anderes Stammdatumsmerkmal, dass nicht in der Query selbst, aber innerhalb einer Prüfung einer Berechnungsvorschrift in der späteren Query eingebunden ist).
Daher kann hier die Option PARAMETER gewählt werden. Als Name soll ZP_SYF gewählt werden.
Nachdem NAME und die Option PARAMETER gewählt worden ist, können die Eigenschaften des Parameterfeldes definiert werden.
Natürlich kann hier neben Bedeutung und Selektionstext auch das Format TYP und LÄNGE definiert werden, aber auch per LIKE Bezug auf ein Tabellenfeld genommen werden.
Exkurs Hilfstabellen und Zusatzfelder per Userexit
In diesem Beispiel haben wir eine Hilfstabelle ZHFS_SYF für Systemfinanzierungscodes der Hochschulfinanzstatistik und das Feld ZSYF in der die einzelnen Systemfinanzierungscodes gepflegt sind.
Diese Hilfstabelle wird als kundeneiegenes Zusatzfeld ist für die Kostenart über den Userexit COOMKA01 genutzt (siehe Artikel "Stammdatenerweiterung von CO-Objekten am Beispiel ergänzende Kostenstelle beim Innenauftrag").
Im Artikel "Auswertung per CMOD eingeführter kundeneigener Felder Kostenart, Kostenstelle und Innenauftrag per Stammdatenverzeichnis und SAP Query" habe ich auch die Auswertung dieser Felder per Query beschrieben.
Um diese Tabelle später zu pflegen, oder zu erweitern kann diese über die Transaktion SM30 gepflegt werden. Hier hat RZ10.de jedoch eine wesentlich komfortablere Lösung vorgestellt, die im Artikel "Wie Sie eine Parametertransaktion für die SM30 anlegen" beschrieben ist.ABAP Grundlagen Tabelle anlegen
In seiner Serie zum Thema ABAP Grundlagen erläutert Denis Reis im Artikel "Wie Sie eine SAP Tabelle anlegen" sehr ausführlich, wie kundeneigene Tabellen angelegt werden.
Dieses aber nur am Rande und als kleine Leseempfehlung und Exkurs.
In unseren Fall geben wir also den Parameter per LIKE die gleichen Eigenschaften wie das Tabellenfeld Z_HFS_SYF-ZSYF (Feld ZSYF der Tabelle Z_HFS_SYF).
Damit ist das Feld als Selektionsfeld beim Infoset verfügbar und per F4 können die einzelnen SYF-Codes (Werte aus der Tabelle Z_HFS_SYF für das Feld ZSYF) selektiert werden.
Als Bedeutung und Selektionstext wählen wir die "SyfCode Auswertung (Variante)"
Nun soll aber mit den selektierten Wert in der Query weiter gearbeitet werden.
Zusatzfeld mit Bezug zu Abgrenzungsparameter
Nachdem der Abgrenzungsparameter ZP_SYF angelegt worden ist, kann ein Zusatzfeld angelegt werden, dass den Wert des Paramteres erhalten soll.
In unseren Fall ist dieses ein Zusatzfeld mit den Namen ZSEL_SYF und ebenfalls LIKE Z_HFS_SYF-ZSYF . Wobei hier nur die Feldeigenschaften vererbt werden. Als Langtext und Überschrift soll dieses "Syf Code Auswahl" erhalten.
Über die Schaltfläche CODING wird nun folgendes Coding hinterlegt:
CLEAR ZSEL_SYF.
ZSEL_SYF = ZP_SYF.
In der ersten Zeile wird der Inhalt des Zusatzfeldes geleert und danach mit den Inhalt des Abgrenzungsparameter gefüllt. Dieses Zusatzfeld kann in der Query dann als Selektionskriterium wie auch andere Zusatzfelder verwandt werden. Der Vorteil dabei ist, dass hier, obgleich der SYF Code an keiner anderen Stelle eingebunden ist, mit diesen Selektionsfeld gearbeitet werden kann und es auch als Bedingung für lokale Felder in der Query genutzt werden kann.
Natürlich kann dieses Feld auch für andere Zwecke genutzt werden. Denkbar ist es hier im Coding eines Zusatzfeldes per Parameter einen Preis je Stunde zu übergeben und über die Auswertung eines Sachkonto mit Personalkosten zum Beispiel für eine bestimmte Personengruppe hier aus den gebuchten Personalkosten die geleisteten Stunden zu berechnen.
Fazit
Beide vorgestellten Methoden haben ihre Vorteile und Nachteile. Während die Eingabe auf Selektionsfeld für lokale Felder schnell umgesetzt ist, ist die Option per Parameter und Zusatzfeld wesentlich flexibler und ermöglicht einige andere Möglichkeiten der Auswertung.So ist es auch nicht weiter verwunderlich, dass bestehende Query und Infoset durch solche neu entdeckten Möglichkeiten tatsächlich weiterentwickelt werden können.
Gerade im Berichtswesen ist dies einer der Punkte, die eine Weiterentwicklung gleichzeitig auch sehr spannend macht und zeigt, dass auch im Berichtswesen vieles sich weiter zu entwickeln vermag.
Persönlich freue ich mich immer wieder darüber, wenn ein Austausch in diese Richtung möglich ist und sich das gegenseitige Lernen und der Austausch von Wissen und Erkenntnisse so im beruflichen Alltag bewährt.
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.
Zum Beispiel mit Amazon Alexa - Möglichkeiten neu durchdacht mit Amazon und Alexa *
* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
17:44 Uhr
Query zur Auswertung von Klassifizierungsmerkmale PSM Fonds zu CO Innenauftrag und Datumsfelder mit Konvertierung von FLOAT zu DATUM
Hier hatte ich über ein Zusatzfeld OBJNFOND aus Finanzkreis und FOND eine Auswertung der Klassifizierungsmerkmale beschrieben, so dass die einzelnen Felder der Tabelle CABN
In diesen Artikel habe ich über ein Zusatzfeld OBJNFOND aus Finanzkreis und einen Zusatzfeld FONDS, dass aus der CO-Innenauftragsnummer die Nummer des PSM Fond bildet, die PSM Objektnummer erstellt um hier einzelne Merkmale aus den Tabellen CABN "Merkmal" in der die einzelnen Merkmale gespeichert sind und AUSP "Ausprägungswerte der Sachmerkmale" in der zum Objekt (Fond) die Werte der einzelnen Merkmale gespeichert sind auswertete.
Im Rahmen des 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" hatte ich das Coding und die Zusatzfelder noch ein wenig optimiert allerdings war hier noch der Nachteil vorhanden, dass die entstandene Query fest den Finanzkreis hinterlegt hatte und so nicht an andere Einrichtungen übertragen werden konnte.
Daher möchte ich in diesen Artikel noch einmal das Thema Verknüpfung von CO Innenauftrag und PSM Fonds sowie die Auswertung der Klassifizierung angehen um danach auf eine Besonderheit einzugehen, sofern es sich beim Merkmal um ein Datumsfeld handelt.
Verknüpfung von CO Innenauftrag und PSM Fond
Statt wie im ersten Artikel beschrieben ein kompliziertes Feld OBJNFOND anzulegen ist es wesentlich leichter mit den Zusatzfeld ZAUFNR zu arbeiten. Dieses hat gleichzeitig den Vorteil, dass die Stammdaten des Fonds problemlos als Zustztabelle eingebunden werden können.Wie schon in den anderen Artikeln erwähnt sind die beiden Stammdatentabellen von CO Innenaufträgen (AUFK) und PSM Fonds (FMFINCODE) nicht über die Auftragsnummer beziehungsweise Fond verknüpfbar. Hintergrund ist, dass das Feld AUFK-AUFNR in der Datenbank als Character mit 12 Zeichen und das Feld FMFINCODE-FINCODE als Character mit 10 Zeichen definiert ist.
Im zweiten Artikel wurde hierfür das Zusatzfeld ZAUFNR angelegt um aus der Innenauftragsnummer eine kompatibles Feld zum Fond zu machen.
Hierzu wurde das Zusatzfeld ZAUFNR mit per LIKE-Referenz FMFINCODE-FINCODE erstellt was in den folgenden Abschniten als Hilfsfeld genutzt werden kann. Nun muss "nur" noch die Auftragsnummer in dieses Feld zugewiesen werden.
Da auf Fond und Innenauftrag Drittmittelprojekte abgebildet werden, ist es das Ziel die Projektnummer vom Innenauftrag auch als Fond zu verwenden. Dazu möchte ich zwei Möglichkeiten für das Zusatzfeldcoding darstellen.
ZAUFNR mit fester Länge der Projektnummer des Innenauftrag
Für eine achtstellige Projektnummer (Innenauftrag) lautet das Coding wie folgt:ZAUFNR = AUFK-AUFNR+4(8).
Hierbei bedient sich das Coding der Technik eines Offsets.
Durch die optionalen Angaben eines Offsets +<o> und eine Länge (<l>) direkt hinter dem Feldnamen <f>, wird der Teil des Felds, der auf Position <o>+1 beginnt und die Länge <l> hat, als eigenes Datenobjekt angesprochen. In unseren Fall wird also für die Variable ZAUFNR das Feld AUFK-AUFNR (wir erinnern uns die zwölfstellige Auftragsnummer) eingelesen und ab der vierten Stelle insgesamt acht Stellen eingelesen. Da in der Datenbank die Auftragsnummer mit führenden 0000 hinterlegt wird erhalten wir also statt des Datenbankwerte 000012345678 die tatsächliche Auftragsnummer 12345678.
ZAUFNR mit festzulegender Länge der Projektnummer
Sollten Sie eine andere Länge bei den Aufträgen oder Fonds definiert haben ist das Coding natürlich entsprechend anzupassen.Damit hier nicht selbst die Länge und Position für die Offsetermittlung errechnet werden muss habe ich hier das Coding wie folgt angepasst:
Damit kann durch Zuweisung eines Zahlenwertes die Position ab der die Projektnummer gespeichert ist direkt ermittelt werden.DATA L_AUFNR type i.
DATA L_OFFSET type i.
* Tragen Sie hier die Länge ihrer Projektnummer ein
* Standard: 8 stellige Auftragsnummer
L_AUFNR = 8.
* Nun wird die Position im Feld AUFK-AUFNR ermittelt
* ab der die Projektnummer ohne 0 gespeichert ist.
L_OFFSET = 12 - L_AUFNR.
* Maximial 12 Zeichen sind in AUFK-AUFNR vorhanden
ZAUFNR = AUFK-AUFNR+L_OFFSET(L_AUFNR).
Grundsätzlich könnte die Länge der Projektnummer als Variable L_AUFNR natürlich auch als Abfrageparameter, vergleichbar zum Artikel "Neue Wertgrenze für Investitionen bei Finanzstatistik oder Abfrageparameter in SAP Query zur Übernahme von Werten aus Selektionsbild" abgefragt werden, jedoch muss für das spätere Ergänzen der Klassifizierungsmerkmale hier ohnehin das Coding angepasst werden und in der Regel ändert sich die Länge der Projektnummer nicht, so dass diese als Selektionsparameter nur zur Verwirrung und möglichen Fehler führen würde.
Stammdaten Fond ergänzen per Zusatztabelle FMFINCODE
Durch das Zusatzfeld ZAUFNR ist es uns nun wesentlich einfacher möglich die Stammdaten der Fonds aus der Tabelle FMFINCODE ergänzend zur CO Stammdatnetabelle AUFK für die Innenaufträge mit ins Infoset aufzunehmen.Ein wichtiger Punkt ist dabei die Reihenfolge der Codingabschnitte.
Beim Hinzufügen eines Zusatzfeldes oder einer Zusatztabelle kann am Punkt Reihenfolge des Codeabschnitts gewählt werden. Auch wenn die Hilfe nicht in diese Richtung zu lesen ist, verstehe ich den Punkt so, dass wenn man Bezug auf vorab definierte Zusatzfelder nehmen möchte die hier nutzenden Felder im nachgeordneten Codeabschnitt liegen sollten.
Da ich in beiden kommenden Fällen mit den neu angelegten Feld ZAUFNR gearbeitet werden soll, werden beide kommenden Fälle im Codabschnitt 2 hinterlegt.
Zusatztabelle FMFINCODE
Anstatt eines Zusatzfeld kann im Register Zusätze über die Schaltfläche ANLEGEN auch eine ganze Tabelle eingefügt werden. Hierzu tragen wir als Name FMFINCODEfür die Stammdatentabelle der Fonds ein und wählen als Art der Zusatzinformation die Option ZUSATZTABELLE..Im Feld "Reihenfolge des Codeabschnitts" wird nun eine 2 aus den geschilderten Gründen eingetragen.
Hintergrund ist dass erst das Feld ZAUFNR definiert sein soll, bevor Sie mit der Zusatztabelle arbeiten.
Nun erfolgt eine Abfrage über SELECT SINGLE * FROM FMFINCODE WHERE ...
in der folgedene (hervorgehobene) Bedingungen erfüllt sein sollen.
WHERE FIKRS = AUFK-BUKRS
da Finanzkreis und Buchungskreis identisch sind, können hier beide Felder sowohl in der Tabelle AUFK als auch FMFINCODE verwendet werden.
AND FINCODE = ZAUFNR
Hierdurch werden dann tatsächlich Fonds und Innenauftrag miteinander verknüpft und es steht die gesamte Tabelle FMFINCODE im Infoset zur Verfügung.
Klassifizierungsmerkmal aus AUSP auswerten
Bisher bin ich bei Klassifizierungsmerkmalen so verfahren, dass ich anhand ATINN den gespeicherten Merkmalswert aus der Tabelle AUSP ausgelesen habe und entsprechend mit ausgegeben habe.Welche Merkmale sind vorhanden?
Die einzelnen Merkmale sind in der Tabelle CABN hinterlegt und werden über das Feld ATINN mit der Tabelle AUSP mit entsprechenden Inhalten verknüpft.Entsprechend ist es Möglich für jedes Merkmal ein eigenes Zusatzfeld anhand der Merkmalsnummer (ATINN) zu erstellen.Die entsprechenden Einzelmerkmale können hierbei bspw. mit der Transaktion SE16 und der Auswertung der Tabelle CABN betrachtet werden.
Eines dieser Merkmale ist die Projektbewertung PBW.
Hierzu wird ebenfalls ein Zusatzfeld mit der Bezeichnung PBW für Projektbewertung mit Langtext und Überschrift Projektbewertung erstellt.
Dieses hat als Eigenschaften eine LIKE-Referenz auf AUSP-ATWRT.
Ferner wird im unteren Abschnitt des Fenster bei Reihenfolge des Codeabschnitts ebenfalls eine 2 eingetragen.
Danach wird als Coding zum Zusatzfeld ein passendes Coding zum Zusatzfeld hinterlegt, dass aus der Variable (Zusatzfeld) ZAUFNR und den Buchungskreis bzw. Finanzkreis eine Objektnummer erstellt, die dem Feld AUSP-OBJEK. entspricht.
AUSP-OBJEK Objektnummer mit vorgegebenen Finanzkreis
Unter der Annahme eines dreistelligen Finanzkreis KRK und dass das Merkmal die Interne Merkmalsnummer (Feld ATINN) folgenden Wert hat 0000000022 hat wird folgendes Coding zum Feld hinterlegt:DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_MERKMALPBW type AUSP-ATWRT.
CONCATENATE 'KRK ' ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATWRT INTO L_MERKMALPBW FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000022' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR PBW.
ELSE.
PBW = L_MERKMALPBW.
ENDIF.
Im Ergebnis enthält nun das Feld PBW die in der Klassifizierung hinterlegte Projektbewertung des Fond.
Objektnummer aus Buchungskreis identisch zum Finanzkreis ermitteln
Wesentlich eleganter ist es jedoch, sofern Finanzkreis und Buchungskreis übereinstimmen, diesen aus der Stammdatentabelle AUFK auszulesen.Hierzu habe ich das Coding an einer Zeile angepasst.
DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_MERKMALPBW type AUSP-ATWRT.
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATWRT INTO L_MERKMALPBW FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000022' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR PBW.
ELSE.
PBW = L_MERKMALPBW.
ENDIF.
Durch die Codingzeile:
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
wird der Buchungskreis unter Berücksichtigung von Leerzeichen mit den Zusatzfeld ZAUFNR verknüpft, so dass hier von dreistellige ebenso wie vierstellige Finanz- bzw. Buchungskreise berücksichtigt werden.
Datentyp beim Klassifizierungsmerkmal Unterschied AUSP-ATWRT und AUSP-ATFLP
Sofern die einzelnen Klassifizierungsmrerkmale in der Merkmalsverwaltung als Datentyp ZEICHENFORMAT definiert sind, kann hier das Thema schon abgeschlossen werden und die Query kann direkt genutzt werden.
Seitens einer anderen Hochschule bin ich jedoch darauf angesprochen worden, dass das Tabellenfeld AUSP-ATWRT leer ist und bei IHnen das Feld AUSP-ATFLP gefüllt ist. Dieses liegt daran, dass Sie als Klassifizierungsmerkmal den Datentyp DATUM gewählt haben um hier ein Datum zu hinterlegen.
Hierzu muss man wissen, dass die Tabelle AUSP "Ausprägungswerte der Sachmerkmale" die einzelnen Merkmalswerte in zwei Feldern speichert, je nachdem welcher Art die Daten sind.
Die Characterwerte (Zeichenformat) werden wie in oberen Beispiel beschrieben im Tabellenfeld AUSP-ATWRT "Merkmalswert" als Character mit 30 Zeichen gespeichert.
Handelt es sich jedoch um einen nummerischen Wert werden diese als Fließkommazahl (FLOAT) in das Tabellenfeld AUSP-ATFLV als Gleitpunktzahl mit 16 Stellen gespeichert.
Das Problem ist nun aus diesen Wert wieder ein Datumsfeld zu erhalten.
Gleitpunktzahl FLOAT in Datum (DATE) konvertieren
Zur Verdeutlichung des Problems habe ich einmal ein Merkmal als Datum definiert und den gespeicherten Wert in der Tabelle AUSP näher angesehen:Datum | Wert als Float AUSP-ATFLV |
---|---|
01.01.2018 | 2,0180101000000000E+07 |
14.05.2017 | 2,0170514000000000E+07 |
13.07.2017 | 2,0170713000000000E+07 |
Nun stellt sich für die QUery die Frage, wie aus den FLOAT Wert ein Datumswert ermittelt werden kann.
Im ersten Schritt legen wir ein Zusatzfeld mit ATFLV1 an um den Wert zum Merkmal 0000000043 welches als Datentyp Datum definiert bekommen hat auszulesen. Analog zum ATWRT lautet das Coding im Abschnitt 2 dann wie folgt:
DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_ATFLVDATUM1 type AUSP-ATFLV.
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATFLV INTO L_ATFLVDATUM1 FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000043' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR ATFLV1.
ELSE.
ATFLV1 = L_ATFLVDATUM1.
ENDIF.
Nun ist also im Feld ATFLV1 das Datum als FLOAT gespeichert. Jetzt gibt es drei Möglichkeiten um daraus ein Datum zu erhalten.
Funktionsbaustein CTCV_CONVERT_FLOAT_TO_DATE
Der Funktionsbaustein CTCV_CONVERT_FLOAT_TO_DATE wandelt einen Datumswert im Gleitpunktformat (Typ F) in das Datumsformat (Typ D) um.Hier kann dann der Aufruf des Funktionsbaustein aus ATFLV1 ein Datum ausgeben.
Hierzu legen wir ein Zusatzfeld DATUM1 vom Typ D an (Länge von 8 wird automatisch vorgegeben) und können über folgendes Coding
DATA : L_datum1 LIKE ausp-atwrt,
L_datumsformat LIKE sy-datum.
CLEAR T_DATUM.
IF AUSP-ATFLV <> 0.
CALL FUNCTION 'CTCV_CONVERT_FLOAT_TO_DATE'
EXPORTING
FLOAT = ATFLV1
IMPORTING
DATE = L_datum1
.
WRITE L_datum1 TO L_datumsformat DD/MM/YYYY.
DATUM1 = L_datumsformat.
ENDIF.
Float in Integer und Integer in Datum umwandeln
Hier kann ATFLP über weitere Hilfsvariablen in ein Datumsfeld umgewandelt werden.Dazu wird ein Zusatzfeld vom Typ D für Datum angelegt und nun mit folgenden Code das ermittelte Feld ATFLV1 umgewandelt. Das Zusatzfeld erhält hier die Bezeichnung DATUM2.
DATA
ZL_integer TYPE I,
ZL_datum TYPE D.
ZL_integer = ATFLV1.
WRITE ZL_integer TO ZL_datum.
DATUM2 = ZL_DATUM.
Beide hier kurz vorgestellte Methoden sind im Formumsbeitrag "Convert float to date" unter https://archive.sap.com/discussions/thread/154147 ausführlicher beschrieben.
Umwandeln ATFLV in Datum durch lokale Felder in Query
Da wir uns bei der Verwendung obiger ABAP Coding nicht sicher waren, ob diese problemlos funktionieren haben wir eine dritte Variante genutzt in der das Feld ATFLP1 als Zusatzfeld im Infoset zur Verfügung gestellt wird und erst in der Query eine Umwandlung erfahren soll.
Hierzu erhält das Feld Datumsmerkmal auch die Kurzbezeichnung ATFLP1 in der Query. Dieses ist in der SQ01 in der Query zum Infoset über
- SPRINGEN
- FELDAUSWAHL
- FELDAUSWAHL
möglich indem über
- BEARBEITEN
- KURZBEZEICHNUNGEN
- EIN/AUSSCHALTEN
diese eingeschaltet werden und das Feld eine entsprechende Kurzbezeichnung erhält.
Nun ist es erforderlich über
- BEARBEITEN
- LOKALE FELD
- ANLEGEN
mehrere lokale Zusatzfelder mit Formeln und Bedingungen anzulegen.
Als erstes wird ein Feld angelegt, dass die Gleitpunktzahl in eine bearbeitbare Zahl verwandelt.
Dazu legen wir das Feld DATUM als Rechenfeld mit 9 Ziffern und 8 Dezimalstellen an.
Als Berechnungsvorschrift erhält es
ATFLV1/100000000
und als Bedingung
ATFLV1<>0
Damit haben wir nun statt
2,0180101000000000E+07
die Dezimalzahl
0,20180101
erhalten.
Mit dieser arbeiten wir nun weiter und legen für die Datumsbestandteile folgende lokale Felder an.
Das lokale Feld DATUMTXT erhält die Eigenschaften Textfeld mit 10 Zeichen.
und als Berechnungsvorschrift
DATUM
bei der Bedingung
DATUM<>0
Hierduch ist aus der Zahl ein String entstanden und dieser String kann wie im Artikel "Query Stammdatenvergleich Profit-Center und Auslesen von Textbestandteilen (Teilstring aus Variable)" ausgelesen werden.
Dieses nutzen wir für drei lokale Felder die Teile der Dezimalzahl verwenden um Jahr, Monat und Tag zu erhalten.
DATUMTXT[3:6]
bei der Bedingung DATUM <>0
Folgerichtig ist das Feld Monat ein Textfeld mit 2 Zeichen und der Formel DATUMTXT[7:8] bei Datum <> 0.
Abschliessend fehlt noch der Tag als Textfeld mit zwei Zeichen und der Formel DATUMTXT[9:10] ebenfalls bei DATUM <>0.
Aus Jahr Monat und Tag lässt sich das Datum zumindest als Zahl ausdrücken.
Hierzu wird das Feld DATUMZAHL als Textfeld mit 8 Zeichen definiert und bekommt folgende Formel JAHR * 10000 + MONAT * 100 + TAG bei DATUM <> 0
Im Ergebnis ist das Datum hier statt 0,20180101 als 20180101 hinterlegt.
Das spannende ist nun aber das Feld DATUMATFLV1 dieses ist als Datumsfeld definiert und hat folgende Formel DATUMZAHL bei Datum<>0.
Zur besseren Übersicht habe ich die einzelnen Felder noch einmal in folgender Tabelle aufgeführt.
Feld | Format | Berechnungsvorschrift | Bedingung |
---|---|---|---|
ATFLV1 | Zusatzfeld aus Infoset entspricht AUSP-ATFLV | ||
DATUM | Rechenfeld 9 Ziffern 8 Dezimalstellen |
ATFLV1/100000000 | ATFLV1<>0 |
DATUMTXT | Textfeld 10 Zeichen |
DATUM | DATUM<>0 |
JAHR | Textfeld 4 Zeichen |
DATUMTXT[3:6] | DATUM<>0 |
MONAT | Textfeld 2 Zeichen |
DATUMTXT[7:8] | DATUM<>0 |
TAG | Textfeld 2 Zeichen |
DATUMTXT[9:10] | DATUM<>0 |
DATUMZAHL | Textfeld 8 Zeichen |
JAHR * 10000 + MONAT * 100 + TAG | DATUM<>0 |
DATUMATFLV1 | Datumsfeld | DATUMZAHL | DATUM<>0 |
Damit ist das Feld ATFLV1 erfolgreich in ein Datum umgewandelt worden.
Der entsprechende Abschnitt der Query (inklusive der Hilfsfelder, die man sonst natürlich nicht mit in der Grundliste übernehmen würde sieht wie folgt aus:
ATFLV1 | DATUM | DATUMTXT | JAHR | MONAT | TAG | DATUMZAHL | DATUMATFLV1 |
---|---|---|---|---|---|---|---|
2,0180101000000000E+07 | 0,20180101 | 0.20180101 | 2018 | 01 | 01 | 20180101 | 01.01.2018 |
2,0170514000000000E+07 | 0,20170514 | 0.20170514 | 2017 | 05 | 14 | 20170514 | 14.05.2017 |
Im Ergebnis ist hier also tatsächlich ein korrekt beziehungsweise lesbares Datum aus den Feld entstanden. Somit können also auch Datumswerte innerhalb der Klassifizierung mit ausgewertet werden. Allerdings sind diese allerdings etwas umständlicher gespeichert. Dafür hat das Erarbeiten einer gemeinsamen Lösung tatsächlich Freude gemacht.
Glücklicherweise haben wir keine als Datum formatierten Merkmale, sonst würde das je Datumsfeld ein etwas umständliches Coding erfordern. Vermutlich würde ich mich dann auch eher mit den oben erwähnten Funktionsbaustein beschäftigen, aber so war dieses für ein einzelnes Datum auch eine praktische Übung beziehungsweise Herausforderung durch die Kollegen an einer anderen Hochschule.
Hinweis:
In der späteren Query bietet es sich dann allerdings tatsächlich an das Feld in der Grundliste mit der Option Feld nur ausgegeben wenn <>0 zu markieren. Andernfalls wird als Dautm 00.00.0000 ausgegeben.
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.
Smartwatch -Smarte Geräte (Wearable) am Handgelenk
21:38 Uhr
Neue Wertgrenze für Investitionen bei Finanzstatistik oder Abfrageparameter in SAP Query zur Übernahme von Werten aus Selektionsbild
Ausgangslage: Änderung Anforderungen Finanzstatistik für Wertgrenze bei Investitionen
Im Rahmen eines Finanzberichtes werden die Investitionsausgaben über Sachkonten in bestimmte Kontengruppe unterteilt. Dabei gibt es für die Investitionsausgaben eine Aufteilung in vier Spalten (oder auch Gruppen). Laut Kontierungsplan sind dabei die zugeordneten Konten so gestaltet, dass diese eine Wertgrenze von bis 5.000 und ab 5.000 seitens der Finanzbuchhaltung zugeordnet bekommen haben.Nun sollen jedoch die sonstigen Investitionsausgaben unterschieden werden in Investitionsausgaben mit einem Anschaffungswert bis 1.000 Euro und solche mit einem Anschaffungswert über 1.000 Euro. Dieses ist jedoch über die reinen Sachkonten nicht möglich, so dass hier eine entsprechende Korrektur im Finanzberichts auf Basis der Einzelposten erfolgen müssen.
In der Gruppe Investitionen bis 1.000 Euro sind durch die Vorgaben der Finanzbuchhaltung (Stichwort Kontierungsrichtlinie oder Kontierungshandbuch) einzelne Sachkonten bis 5.000 Euro zugeordnet (bspw. Lizensen bis 5.000 Euro) und in der Gruppe "Investitionsausgaben mit einen Anschaffungswert über 1.000 Euro" sind nur die Konten hinterlegt die ab 5.000 Euro vorgesehen sind (bspw. Lizensen ab 5.000 Euro).
Entsprechend muss hier tatsächlich anhand der Einzelbelege die Werthöhe betrachtet werden.
Die identifizierten Werte müssen also anhand der Werthöhe gegebenenfalls umgebucht werden. Der fachliche Hintergrund dieser Auswertung bzw. die Anforderungen sind auch im Artikel "Pivottabellen ab Excel 2010 dynamischer filtern mit Datenschnitten am Beispiel Hochschulfinanzstatistik" näher erläutert worden.
Nun stellt sich die Frage, wie diese Werte ausgewertet und eine entsprechende Korrekturbuchung ermöglicht werden könnte. Die Auswertung erfolgt für die Jahressicht durch eine Plankopie, so dass hier ein Planwert auf Profit-Center und Kostenart erfolgt.
Das Thema Auswertung von Investitionen habe ich in den Artikeln "Zusammenfassung Query über Anlagenzugang - Auswertung Investitionen aus Profit-Center-Rechnung" sowohl aus der Profit-Center-Rechnung als auch aus der Anlagenbuchhaltung beschrieben. 2008 hatte ich im Artikel "Kurzanleitung Anlage einer SAP Query Auswertung ANBWA in der Profit-Center-Rechnung über ANBW und GLPCA" schon die Möglichkeit über die Tabelle GLPCA beschrieben. Über die Zuordnung von Tabellen und Identiifikation mag ich daher nicht weiter eingehen.
Für einen Quartalsbericht werden die Anlagenzugänge über die gesamte Einrichtung über die Transaktion S_ALR_87012050 (Anlagenzugänge) im SAP Menü unter
- Rechnungswesen
- Finanzwesen
- Anlagen
- Infosystem
- Berichte zur Anlagenbuchhaltung
- Tagesgeschäft
- International
- Anlagenzugänge (S_ALR_87012050)
Nach ein wenig Diskussion mit Kolleginnen und Kollegen haben wir im Ergebnis dann eine Auswertung anhand der Tabelle GLPCA und einer Übergabe eines Abfrageparameters gefunden.
Die gefundene Lösung mag ich nun hier beschreiben, da diese Anforderung ein schönes Beispiel für die Verwendung von Parametern innerhalb SAP Query ist.
Infoset anlegen zur Auswertung der Profit-Center-Einzelposten
Im Artikel "Kurzanleitung Anlage einer SAP Query Auswertung ANBWA in der Profit-Center-Rechnung über ANBW und GLPCA" hatte ich noch einen Join über die Tabellen GLPCA und TABWT erstellt um zur Anlagenbewegungsart auch direkt den Text dazu zu erhalten. Mittlerweile hat sich aber gezeigt dass in der Grundliste der Query unter Zusatzfelder das Feld "Text:Analagen-Bewgungsart" ( TEXT_GLPCA_ANBWA ) vorhanden ist und so eine Verknüpfung beider Tabellen nicht erforderlich ist.Daher wurde als Datenquelle die Option Direktes Lesen der Tabelle GLPCA gewählt und alle Felder ins Infoset übernommen. Nun wollen wir aber beim Auswerten der Einzelposten der Query anhand unserer Selektion überprüfen, ob eine Umbuchung für die Selektierten Konten erforderlich ist. Dazu möchten wir im Selektionsfeld mit übergeben, welche Konten wir auswerten wollen (über einen dreistelligen SYF-Code (Systemfinanzierungscode) und über diesen dann anhand des Buchungswertes überprüfen ob hier eine Korrektur erforderlich ist.
Zusatzfeldern beim Aufruf einer Query mit Wert versehen
Hierzu sind zwei Schritte erforderlich. Zum einen muss der Wert in der Selektionsmaske mit übergeben werden und zum anderen muss dieser Wert später in einem Zusatzfeld dann in der Query auch verarbeitet werden.Zwar ist bei Zusatzfeldern ohne Probleme möglich weitere Informationen aus Datenbanken anhand der ausgewerteten Daten zu erlangen (siehe zum Beispiel "Query über IBAN und Stammdaten Kreditor oder Debitor (Zusatztabellen in SAP Query)" oder auch "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") aber es ist nicht möglich diese Zusatzfelder als Selektionskriterium für eine Wertübergabe zu verwenden.
Abgrenzungen im Infoset Unterschied Parameter und Selektion
Dieses ist allerdings in der Definition der Query über die Schaltfläche "Zusätze" und hier im Register Abgrenzungen möglich.Über die Schaltfläche anlegen kann nun eine Abgrenzung als Selektionskriterium oder Parameter angelegt werden.
Der Unterschied ist, dass beim Parameter nur ein einzelner Wert während beim Selektionskriterium auch mehrere Werte oder ganze Intervalle hinterlegt werden können.
Für unseren Fall entscheiden wir uns für einen Parameter ZP_SYF da wir ja nur einen Einzelwert (die auszuwertenden SYF Codes hinterlegen wollen).
Als Bedeutung und Selektionstext legen wir "SyfCode Auswertung (Variante)" fest und als Format Typ C (Character) mit einer Länge von 3.
Die Option als Default auf Selektionsbild lassen wir deaktiviert, da diese Abgrenzung nur genutzt werden soll, wenn wir auch mit der Query arbeiten wollen. Somit würde sich hier eine Abgrenzung also auch eignen um in einer Selektionsvartiante noch einen bestimmten HInweis zu hinterlegen der gar nicht weiter beachtet werden soll.
Verwendung der Abgrenzung (Parameter) im Zusatzfeld
Nachdem die Abgrenzung angelegt ist stellt sich noch die Frage, wie mit dieser später in der Query gearbeitet werden kann. Hierzu legen wir im Register Zusätze ein Zusatzfeld an.Dieses Zusatzfeld bekommt die Bezeichnung ZSEL_SYF und als Langtext und Überschrift den Hinweis "Syf Code Auswahl" . Ferner erhält es ebenfalls das Format C und die Länge 3.
Ergänzend erhält es aber über die Taste "Coding zum Feld" noch folgendes Coding
CLEAR ZSEL_SYF.
ZSEL_SYF = ZP_SYF.
Damit wird in der ersten Zeile das Zusatzfeld geleert um es in der zweiten Zeile mit den Wert aus dem Selektionsfeld versehen zu werden.
Dieses Zusatzfeld kann über die Schaltfläche Feldgruppen in eine eigene Feldgruppe übernommen werden.
Zusammenfassung Abgrenzung und Zusatzfelder:
Die Selektionsmaske der späteren Query erhält also den Abgrenzungsparameter und die Query kann später auf das Zusatzfeld zugreifen und damit arbeiten.
Man könnte diese Zusatzfeld-Abgrenzungparameter Kombination mit einen Abfrageparameter in Access für eine Abfrage vergleichen wo dann ebenfalls zur Laufzeit eine Auswertung erfolgen wird.
Nachdem wir nun alle Felder der Tabelle GLPCA sowie das Zusatzfeld in das Infoset übernommen haben kann das Infoset generiert werden.
Das Zusatzfeld haben wir dabei direkt in eine eigene Feldgruppe Zusatzfelder angelegt.
Query anlegen und mit lokalen Zusatzfeldern und Abfrageparametern arbeiten
Bei der Anlage der Query zum eben angelegten Infoset, welche in der gleichen Benutzergruppe zugeordnet sein sollten, springen wir im Menü über- SPRINGEN
- FELDAUSWAHL
- FELDAUSWAHL
- BEARBEITEN
- KURZBEZEICHNUNGEN
- Ein/ausschalten
In unserer Feldgruppe EC-PCA: Ist-Einzelposten (die Tabelle GLPCA) geben wir folgenden Werten eine eigene Kurzbezeichnung.
- Kontonummer: = KONTO
- Betrag in Profit-Center-Hauswährung = BETRAG
Und in der Feldgruppe (Sachgruppe) Zusatzfelder geben wir unseren Zusatzfeld ebenfalls eine Kurzbezeichnung zu:
- Syf Code Auswahl = SEL_SYF
Dazu legen wir zwei lokale Felder an um die Buchung anhand der Werthöhe ggf. anderen SYF Code zuzuweisen.
Dieses ist im Menü über
- BEARBEITEN
- LOKALES FELD
- ANLEGEN
1. Lokales Feld SYF (Wertgrenze)
Das erste Feld erhält die Bezeichnung Kurzbezeichnung SYF und folgende EigenschaftenFeldbezeichnung / Überschrift:
SyF-Code Finanzstatistik
gleiche Eigenschaften wie Feld
SEL_SYF (also unser Zusatzfeld)
Als Berechnungsvorschrift kann nun eine komplexe Berechnung eingefügt werden.
1. BEDINGUNG
(BETRAG < -1000 OR BETRAG > 1000) AND SEL_SYF <> '561'
Formel
'565'
Hintergrund ist, dass nur die SYF Code 562 und 563 eine Wertgrenzenunterscheidung haben. Wenn der Wert 1.000 Euro übersteigt soll der SYF Code 565 genommen werden.
2. BEDINGUNG
SEL_SYF = 565 AND BETRAG <= 1000 AND BETRAG >= -1000
Formel
'563'
Sollte innerhalb der Auswertung zu 565 ein Betrag unter kleiner als 1000 liegen ist eine Korrektur von 565 nach 563 erforderlich.
SONST
SEL_SYF
Sofern keine der oberen Bedingungen erfüllt ist (also die Wertgrenze nicht greift) kann der übergebene Selektionsparameter als Wert für die Buchung beibehalten werden.
2. lokales Feld CHK_SYF (Ampel)
Als nächstes wird das lokale Feld CHK_SYF mit Feldbezeichnung / ÜberschriftCHK SyfCode
angelegt.
Als Eigenschaften soll hier IKONE gewählt werden.
Die komplexe Berechnungsvorschrift lautet einfach:
BEDINGUNG
SEL_SYF = SYF
Formel
ICON_GREEN_LIGHT
SONST
ICON_RED_LIGHT
Nun kann über die Schaltfläche Grundliste mit den einzelnen Feldern gearbeitet werden.
Innerhalb der Query werden nun auf folgende Felder der einzelnen Tabellen Zugriff genommen. Bzw. in der Grundliste zugewiesen. Hierbei ist L als Listenfeld und S als Selektionsfeld zu verstehen.
Die Felder werden hier in der Reihenfolge angeben, wie diese dann auch in der Query ausgegeben werden sollen:
Tabelle GLPCA "EC-PCA: Ist-Einzelposten"
Geschäftsjahr (L,S) GLPCA-RYEAR
Konto (L,S) GLPCA-RACCT
Belegnummer (L) GLPCA-DOCNR
Soll Haben Kennzeichen (L) GLPCA-DRCRK
Profit-Center (L) GLPCA-RPRCTR
Betrag in Profit-Center-Hauswährung (L) GLPCA-KSL
Wenn nur eine Währung im SAP System verwendet wird kann es hier sinnvoll sein die Option kein Währungsfeld zu aktivieren.
Buchungsdatum (L) GLPCA-BUDAT
Anlage-Hauptnummer (L) GLPCA-ANLN1
Anlagenunernummer (L) GLPCA-ANLN2
Anlagen Bewegungsart (L,S) GLPCA-ANBWA
Zusatzfelder
Text:Anlagen-Bewegungsart (L) TEXT_GLPCA_ANBWA
Syf Code Auswahl (L) ZSEL_SYF
Dieses Feld muss tatsächlich nicht als Selektionsfeld markiert werden, da die Selektion ja über den Abgrenzungsparameter erfolgt und keine Abfrage nach ZSEL_SYF erfolgen soll sondern dieses Feld beim Start der Query mit einen Wert versehen wird.
Lokale Zusatzfelder
Nun werden die einzelnen lokalen Zusatzfelder noch übernommen:
SyF-Code Finanzstatistik (L)
CHK Syfcode (L)
Letzteres Feld ist unsere Ampel.
in der Query kann nun das Feld CHK Syfcode auf die Werkzeugleiste SORTIERFELDER gezogen werden (hierbei nicht über die Spaltenüberschrift sondern durch Ziehen aus den Beispieldatensatz.
Die Sortierung kann dann noch absteigend markiert sein und wir erhalten für jede Auswertung nach den einzelnen SYF Codes auch direkt einen Hinweis darauf welche Belege umgebucht werden müssen.
Fazit Anwendbarkeit von Abgrenzungen als Parameter für SAP Query
Mit der Query ist nun eine Auswertung möglich in der durch eine Ampel direkt erkannt werdne kann, welche Korrekturbuchungen für die Statistik in der CO Planversion notwendig sind.Daneben können aber Abgrenzungen als Parameter auch für viele weitere dynamische Anwendungen innerhalb einer Query verwandt werden. Ein Beispiel wurde ja schon genannt um hier als Beispiel einen Stundenlohn zu übergeben um eine Anzahl an bestimmter Personen anhand der Personalkosten zu ermitteln. Ein weiteres Beispiel könnten aber auch Zuschlagssätze sein oder Rechenoperatoren die innerhalb der Query dynamisch gesetzt werden können.
Hier empfinde ich die Möglichkeiten als ähnlich weit gehend wie das Coding innerhalb der Zusatzfelder, wobei beides ja eigentlich auch zusammen gehört. Insgesamt hat das gemeinsame Arbeiten an einer Lösung zur Beachtung einer neuen Wertgrenze aus einer Anforderung einer Finanzstatistik sehr viel Freude gemacht und ein weiteres Anwendungsgebiet und Möglichkeit innerhalb der SAP Query erschlossen.
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.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
18:48 Uhr
MS Word als Editor für Langtexte bei CO Innenauftrag und Kostenstelle sowie SAP Script und Smart Forms festlegen
Langtextpflege zur Beschreibung von Innenauftrag oder Kostenstelle
Hierzu ist die entsprechende Schaltfläche neben der Beschreibung anzuklicken (Langtext anzeigen bzw. pflegen) und es kann für einzelne Sprachen eine ausführliche Beschreibung zum CO Objekt hinterlegt werden.Eventuell muss hier noch die zu pflegende Sprache des Feldes gewählt worden.
Danach können hier im SAP Editor ausführlichere Informationen (zum Beispiel Historie bei sich ändernden Kostenstellenbezeichnungen oder sonstige ausführliche Informationen zum CO Objekt) hinterlegt werden.
Da hier mehr als eine Zeile zur Verfügung steht ist dies eine gerne genutzte Stelle für ausführliche Informationen zum jeweiligen Objekt.
Bisher war hier immer ein Editor in SAP aufgerufen und man konnte über
- SPRINGEN
- EDITOR WECHSELN
MS Word als Editor für SAP Script
Seit SAP ERP [Central Component (ECC)] 6.2 Enhancement Package 42 ist es möglich MS Word als Editor für SAP Script bzw. Smart Forms zu aktivieren. Ab aktuelleren Releases kann nur noch MS Word als Editor für SAP Script bzw. Smart Forms verwendet werden.Grundsätzlich sollte in der Transaktion I18N Internationalisierung unter den Punkt I18N Customizing durch die Option MS Word als Editor möglich auf Word als Editor zu wechseln.
Dieses ist neben SAP Script und Smart Forms auch erforderlich um Standardtexte zum Beispiel in der Transaktion SO10 für den Anmeldehinweis beim Anmeldeschirm von SAP zu bearbeiten (siehe hierzu auch im berater-wiki.de unter "Pflege SAPscript-Textbausteine mit Transaktion SO10 (ID = ST)").
Eine Deaktivierung von MS Word als Editor für SAPscript und Smart Forms scheint allerdings nur noch per ABAP Report möglich zu sein. Hierzu muss mit der Transaktion SA38 der Report RSCPSETEDITOR gestartet werden.
Danach erfolgt eine Auswahl in der für
- SAPScript
- Smart Forms
Sofern diese Option aktiviert oder deaktiviert muss diese Option noch über die Schaltfläche "Aktivieren" aktiviert und damit produktiv geschaltet werden.
Diese Einstellung ist eine laufende Einstellung zu der kein Transportauftrag erstellt wird. Die Einstellung selbst wird in der Tabelle TCP0I "Parametertabelle für i18n-Systemkonfiguration" in den Feld sapscript_editor beziehungsweise. smartforms_editor im Feld Name ("Parameter fuer I18n Systemkonfiguration") und im Feld Value ("Wert für i18n-Systemkonfigurationsparameter (TCP0I-Wert)") mit der Ausprägung MSWord festgealten.
Ferner sind in dieser Tabelle auch letzte Änderer (LASTUSER) und Zeitpunkt der Änderung (TIMESTAMP) festgehalten.
Fazit
Da es bis auf die neue Ansicht kaum Funktionseinschränkungen bei der Nutzung von MS Word zur Pflege der Langtexte gibt und künftig SAP Script nur noch über MS Word gepflegt werden kann, ist es vielleicht tatsächlich empfehlenswert hier sich mit der neuen Oberfläche anzufreunden.Interessant ist aber tatsächlich an welche Stellen SAP Script eingesetzt wird. Mir war die Textpflege bisher nicht bewusst als SAP Script Anwendung aufgefallen, was aber möglicherweise auch daran liegen mag, dass ich bisher nicht bewust mit SAP Script gearbeitet habe. Negativ aufgefallen wäre es mir vermutlich eher, wenn im Report Painter oder bei Rechercheberichten die Pflege der Kopfzeile davon betroffen wäre.
Gerade hier nutze ich, wie auch schon im Artikel "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" sehr gern die Möglichkeit der Arbeit mit weiteren Texten. Zugegeben sind hier aber keine weiteren Sprachversionen zu pflegen. Gleiches gilt auch für andere von mir gerne genutzten Auswertungstool in SAP, die ich aber auch schon im Artikel "Unterschiedliche Auswertungsmöglichkeiten im Controlling (Report Writer, Recherchebericht, SAP Query) und natürlich Excel ;-)" zusammengestellt habe und auf die ich im Verlauf des Jahr 2017 sicher erneut noch einmal zurück kommen werde.
Bis dahin zeigt sich aber gerade an einen solchen Beispiel, wie sinnvoll der Austausch zwischen SAP Basis und den anderen Modulverantwortlichen (Keyusern) sein kann, so dass hier die Verwunderung über eine neue Oberfläche in SAP nicht allzu groß ist.
Werbung:
Nebenbei in der digitalen SAP Bibliothek von Espresso Tutorial (siehe auch SAP Know How) sind auch Bücher wie "Praxishandbuch SAPscript für SAP ERP" oder "Praxisbuch SAP® Interactive Forms und Adobe® LiveCycle Designer" (Amazon Partnerlink) enthalten, so dass sich auch in dieses Thema vertieft werden kann :-)
Aktuelle Schulungstermine Rechercheberichte mit SAP Report Painter
unkelbach.link/et.reportpainter/
20:22 Uhr
Analyse und Abgleich Einzelposten und Summensätze im Haushaltsmanagement PSM-FM am Beispiel Abweichung Reisekostenobligo
Von der Höhe der Werte her war es dann jedoch relativ schnell klar, dass es sich bei den Obligos um nicht abgebaute Reiskostenobligos handelte, die aus einen anderen SAP System übertragen worden sind.
Löschen von Obligos im Haushaltsmanagement
Der erste Gedanke war daher, diese Obligo Belege wie im Artikel "Löschen von fehlerhaften (Obligo)-Belegen im Modul PSM-FM (Haushaltsmanagement)" beschrieben zu löschen.Allerdings waren die Belege hier nicht identifizierbar, so dass diese Belege nicht gelöscht werden konnte. Da aber auch eine andere Einrichtung ein vergleichbares Problem hatte, wurden wir dann ebenfalls auf eine Lösung hingewiesen, auf die ich in diesen Artikel ebenfalls hinweisen möchte.
Analyse Einzelposten und Summensätze im Haushaltsmanagement
Innerhalb des Modul PSM-FM gibt es entsprechende Analysefunktionen, die dann tatsächlich die Ursache finden und entsprechend auch einen Schiefstand beheben können.Im SAP Menü unter:
- Public Sector Management
- Haushaltsmanagement
- Infosystem
- Analysen
Diese sind im Ordner Analysen an folgender Stelle zu finden:
- Obligo und Ist
- Abgleich
- Innerhalb Haushaltsmanagement
- Summensätze zu Einzelposten
Im Ergebnis wird eine Liste erstellt in der alle Positionen aufgeführt werden bei denen die Einzelposten je HHM - Kontierung (Finanzposition, Finanzstelle, Fonds und auch Hauptbuch bzw. CO Objektnummer) nicht übereinstimmen.
Einzelposten und Summensätze in Tabellen FMTOX und FMOIX -> Hinweis auf Query
Diese Auswertung zeigt im Ergebnis dann tatsächlich worin die Ursache der Abweichung von Einzelpostenliste und Summenbericht in Form des Rechercheberichtes.Im Artikel "Salden je Finanzposition mit Unterscheidung Personal oder Sachaufwand aus PSM-FM durch Query über logische Datenbank FMF" wurde schon einmal auf die beiden Tabellen, welche in der logischen Datenbank FMF ausgewertet werden können, FMTOX "Summensätze: Obligo und Ist - Erweitert" und der Einzelpostentabelle FMOIX "Einzelposten - Erweitert" hingewiesen. Der Bericht wertet tatsächlich die Unterschiede zwischen beiden Parteien aus.
Abgleich von Einzelposten und Summensätze im Haushaltsmanagement und Anpassung Summensätze an Einzelposten
Während der Bericht S_ALR_87012636 "Abgleich von Einzelposten und Summen" beziehungsweise der dahinterliegende ABAP Report RFFMRC00 "Abgleich von Einzelposten und Summensätzen für das HHM" aufruft stellt sich nun die Frage, wie die gefundenen Abweichungen korrigiert werden können.Hier ist der ABAP Report RFFMRC04 "Übereinstimmende Einzelposten und Summensätze für HHM" hilfreich. Dieser erweitert die Auswertung um ein Updateflag wodurch tatsächlich die identifizierten Abweichungen korrigiert weden, während der Report das Updateflag auf Anzeige gesetzt hat.
Sofern der Report RFFMRC04 über SA38 gestartet wird kann das Feld "Testlauf" im Abschnitt Steuerung deaktiviert wird der Bericht im Echtlauf ausgeführt und die zugehörigen Summensätze den Einzelposten angepasst, so dass hier sowohl die Auswertung der Einzelposten als auch die Summen im Recherchebericht übereinstimmen.
Beim Ausführen des Reports sollte darauf geachtet werden, dass keine Buchungen durchgeführt werden, da anderenfalls eventuell Fehler korrigiert werden, die gar keine sind.
Das Feld "Testlauf" ist im Report RFFMRC00 nicht vorhanden, wodurch tatsächlich nur die Anzeige in der Transaktion S_ALR_87012636 vorhanden ist.
Statt Aufruf des Report über die Transaktion SA38 kann auch die nicht im SAP Menü hinterlegte Transaktion FMAF "Abgleich Einzelposten Summenposten" aufgerufen werden.
Im Ergebnis sind dann auch die Obligos im Recherchebericht ausgeglichen.
Grundsätzlich kann es sinnvoll sein in regelmäßigen Abständen entweder die Transaktion S_ALR_8701263 zur Analyse auszuführen oder tatsächlich quartalsweise oder wenigstens im Rahmen des Jahresabschlusses durch die Transaktion FMAF ein entsprechender Abgleich der Summensätze und Einzelposten durchzuführen.
Das Thema Obligo ist auch im Controlling relevant. Auf dieses Thema wird im Artikel "Obligo Verwaltung im SAP Modul CO - Customizing, Standardberichtswesen, Report Writer/Painter und SAP Query" behandelt.
An solchen Themen zeigt sich der Vorteil, wenn sich über aktuelle Themen oder Probleme auch übergreifend ausgetauscht wird, so dass hier gemeinschaftlich an einer Lösung gearbeitet werden kann, oder alternativ Lösungen auch untereinander ausgetauscht werden.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
15:09 Uhr
Drittmittelstatistik nach LOMZ über Recherchebericht und SAP Query
Damit werden alle Fonds entsprechend ihres Mittelgebers ausgewiesen. Ergänzend dazu könnten noch einzelne Finanzpositionen ohne Zuordnung eines Finanzierungszweckes ausgewiesen werden, so dass auch Einnahmen die auf Kostenstellen bzw. Finanzstellen oder aber Fond WIPLAN (zur Abbildung des Landeshaushalt) so zum Beispiel Geldspenden ausgewiesen werden.*
Im Artikel "Kundeneigene Transaktionen zu Berichten in PSM FM Haushaltsmanagement zum Beispiel Belegjournal anlegen (Variantentransaktion)" hatte ich schon etwas ausführlicher beschrieben, wie ein solcher Bericht (neben Einzelpostenlisten) in einer vorgegebenen Variante als kundeneigene Transaktion ausgerollt werden kann. Besonders bei Rechercheberichten bietet sich hier auch der Artikel "Parametertransaktion für Recherchebericht" zum Nachlesen an.
Nehmen wir nun aber einmal an, dass ein Finanzbericht über alle Projekte (sowohl Drittmittel als auch diverse Sondermittel) berichtet werden sollen, dann kann es sinnvoll sein hier die Definition von LOMZ fähigen Drittmitteln und andere Projekten nicht nur anhand des Finanzierungszwecks sondern auch über andere Merkmale zu definieren.
Im Anwendungsfall sind Mittel Dritter (Drittmittel) über ein Nummernintervall als für die Drittmittelstatistik relevant festgelegt und eine Teilmenge davon ist als Dienstleistungsprojekt (reine Anwendung gesicherter Erkenntnisse) nicht als LOMZ-relevant identifizierbar. Hierzu wurde in der Klassifizierung ein Merkmal PBW für die Projektbewertung definiert und dieses entsprechend mit den Wert DL versehen. Eine Auswertung von Merkmalen der Klassifizierung ist beispielsweise 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" oder aber mit Grundlagen zur Klassifizierung auch im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" beschrieben.
Sprechende Nummernschlüssel bei Stammdaten
Kleiner Hinweis am Rande, das Thema sprechende Nummernschlüssel wurde sehr ausführlich in unseren Buch
Schnelleinstieg ins SAP-Controlling (CO)Autoren: Andreas Unkelbach, Martin MunzelVerlag: Espresso Tutorials GmbH1. Auflage (01. November 2015)
Paperback ISBN: 9783960126874
Für 19,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Ebook ISBN: 9783960120414
diskutiert und zeigt hier tatsächlich unterschiedlichste Ansätze in der Stammdatenkonzeption, aber dieses nur am Rande.
Um nun über Nummernkreis und Merkmale der Klassifizierung die Drittmittel entsprechend einzuordnen bedarf es drei Zusatzfelder im Infoset.
Vorbedingung: Auswertung PSM und CO Stammdaten
Als erstes müssen, erneut, die Stammdaten von CO mit PSM verknüpft werden.Innerhalb des Abschnitt "Zusatzfeld ZAUFNR (Übernahme AUFK-AUFNR als FMFINCODE-FINCODE" im Artikel "SAP Query innerhalb des SAP Moduls PSM FM beziehungsweise Haushaltsmanagement" wurde nun eine clevere Alternative dargestellt.
Zusatzfeld ZAUFNR zur Verknüpfung von Innnenauftrag und Fond
Hierzu wurde das Zusatzfeld ZAUFNR mit per LIKE-Referenz FMFINCODE-FINCODE erstellt was in den folgenden Abschniten als Hilfsfeld genutzt werden kann.Als erläuternde Überschrift und Langtext kann "Auftragsnummer 10 stellig" genommen werden.
Das in meinen Augen clevere Coding beschränkt sich auf einen Einzeiler in dem dem Feld per Offset die Auftragsnummer aus der Tabelle AUFK zugewiesen wird.
Für eine achtstellige Projektnummer (Innenauftrag) lautet das Coding wie folgt:
Hierbei bedient sich das Coding der Technik eines Offsets.ZAUFNR = AUFK-AUFNR+4(8).
Durch die optionalen Angaben eines Offsets +<o> und eine Länge (<l>) direkt hinter dem Feldnamen <f>, wird der Teil des Felds, der auf Position <o>+1 beginnt und die Länge <l> hat, als eigenes Datenobjekt angesprochen. In unseren Fall wird also für die Variable ZAUFNR das Feld AUFK-AUFNR (wir erinnern uns die zwölfstellige Auftragsnummer) eingelesen und ab der vierten Stelle insgesamt acht Stellen eingelesen. Da in der Datenbank die Auftragsnummer mit führenden 0000 hinterlegt wird erhalten wir also statt des Datenbankwerte 000012345678 die tatsächliche Auftragsnummer 12345678.
Sollten Sie eine andere Länge bei den Aufträgen oder Fonds definiert haben ist das Coding natürlich entsprechend anzupassen.
Im Ergebnis haben wir nun das Feld ZAUFNR, welches die gleichen Eigenschaften wie das Feld FINCODE innerhalb der Tabelle FMFINCODE hat.
Nun kann das Feld für verschiedene Formen der Verknüpfung genutzt werden.
Merkmal aus Klassifizierung zur Projektbewertung mit auswerten
Nehmen wir an, dass im Rahmen der Klassifizierung von Fonds im Modul PSM-FM die Projektbewertung in ein Merkmal festgehalten wird. Dann ist auch die im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" erheblich erleichtert.Hierzu wird ebenfalls ein Zusatzfeld bspw. PBW für Projektbewertung mit Langtext und Überschrift Projektbewertung erstellt.
Dieses hat als Eigenschaften eine LIKE-Referenz auf AUSP-ATWRT.
Ferner wird im unteren Abschnitt des Fenster bei Reihenfolge des Codeabschnitts ebenfalls eine 2 eingetragen.
Danach wird als Coding zum Zusatzfeld ein passendes Coding zum Zusatzfeld hinterlegt, dass aus der Variable (Zusatzfeld) ZAUFNR und den Buchungskreis bzw. Finanzkreis eine Objektnummer erstellt, die dem Feld AUSP-OBJEK. entspricht.
Unter der Annahme eines dreistelligen Finanzkreis KRK und dass das Merkmal die Interne Merkmalsnummer (Feld ATINN) folgenden Wert hat 0000000022 hat wird folgendes Coding zum Feld hinterlegt:
DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_MERKMALPBW TYPE AUSP-ATWRT.
CONCATENATE 'KRK ' ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATWRT INTO L_MERKMALPBW FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000022' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR PBW.
ELSE.
PBW = L_MERKMALPBW.
ENDIF.
Im Ergebnis enthält nun das Feld PBW die in der Klassifizierung hinterlegte Projektbewertung des Fond.
LOMZ relevante Drittmittel
Nun kommt allerdings die Zuordnung über die Projektnummer in Kombination zu der Projektbewertung. Hierzu wird die gleiche Programmlogik verwendet wie im Artikel "Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel" allerdings beschränkt auf einen Nummernkreis der Drittmittelprojekte sowie einen Bezug auf die Projektbewertung über das Feld PBW.Hierzu wurde ein Zusatzfeld LOMZ mit den Eigenschaften LIKE AUSP-ATWRT im letzten Codeabschnitt des Infoset (hier Reihenfolge des Codeabschnitts 4) angelegt.
Das zugehörige Coding zum Zusatzfeld sieht dabei wie folgt aus:
Dieses Zusatzfeld hat nun für die Beispielnummernkreise 32000000 bis 32999999 und 42000000 bis 42999999 eine Überprüfung, ob es sich dabei um LOMZ Drittmittel oder nur DL für Dienstleistungsprojekte handelt. Die in anderen Nummernkreise abgebildeten Projekte sind keine Drittmittel auf die die LOMZ Definition angewandt wird und erhalten daher auch keinen Wert im Zusatzfeld LOMZ (das Feld bleibt daher leer).CLEAR LOMZ.
IF AUFK-AUFNR CO '1234567890'.
IF AUFK-AUFNR => '000032000000' AND AUFK-AUFNR <= '000032999999'.
CASE PBW.
WHEN 'DL'.
LOMZ = 'DL'.
WHEN OTHERS.
LOMZ = 'LOMZ'.
ENDCASE.
ENDIF.
IF AUFK-AUFNR => '000042000000' AND AUFK-AUFNR <= '000042999999'.
CASE PBW.
WHEN 'DL'.
LOMZ = 'DL'.
WHEN OTHERS.
LOMZ = 'LOMZ'.
ENDCASE.
ENDIF.
ENDIF.
Weiterentwicklung Query oder Recherchebericht zur Drittmittelstatistik
Ergänzend zur LOMZ Definition können nun natürlich auch noch die Mittelgeber der jeweiligen Projekte über den Finanzierungszweck identifiziert werden. Gerade für ein zentrales Berichtswesen kann hier eine Gruppierung der einzelnen Finanzierungszwecke, so als Beispiel die einzelnen EU Förderprogramme, zu Gruppen erfolgen, oder eben einfach der Finanzierungszweck ebenfalls mit ausgegeben werden.Diese Methodik ist im Artikel "Gruppierung von Finanzierungszwecken bei Drittmittelprojekten per Zusatzfeldcoding mit IF oder CASE" erläutert worden.
In Kombination mit einen Recherchebericht oder auch direkt einer Einzelpostenliste als SAP Query, wie im Artikel "Query Einzelpostenliste Innenauftrag mit Ausweis Ertrag und Aufwand Zweiter Teil Query zur Datenaufbereitung" kann nun relativ ohne Probleme eine entsprechende Auswertung der Drittmittelstatistik erfolgen. Denkbar wäre auch eine Saldenliste basierend auf der logischen Datenbank FMF in der die Summen je Finanzposition auf Kontierungsobjekt FOND und Finanzstelle ausgewertet werden können. Diese logische Datenbank habe ich bisher für die Auswertung von "Einzelposten Klassische Budgetierung Hierarchiebelge" verwendet denkbar ist hier aber auch die Summensätze der Tabelle FMTOX "Summensätze: Obligo und Ist - Erweitert" in der die Summen je Kontierungsobjekt festgehalten sind. Hier hat ein Kollege einen recht praktischen Extrakt der Summensaldenliste je Finanzposition auf Ebene der Fonds entworfen. Ein Nachteil ist hier nur noch, dass zur Darstellung von Ertrag und Aufwand das Ergebnis erneut summiert werden muss. Jedoch ist dieses über lokale Felder oder Zusatzfelder die die Finanzpositionen gemäß Industriekontenrahmen (Kontenplan) beginnend mit 5*als Ertrag und 6* als Aufwand zuordnen können.
Sind die Berichte fertig erstellt können diese auch per Serienmail versandt werden. Bisher nutzte ich nur die Serienmailfunktion in Winword zum Versand von Serienmails (siehe Artikel "Serienmails über Serienbrieffunktion in Winword per Outlook, Thunderbird oder anderen Mailprogramm versenden") auf Facebook (siehe Beitrag vom 22.10.2016) bin ich jedoch auf zwei Methoden getroffen durch die entweder durch Plugin im Mailer Thunderbrid oder per VBA mit Outlook auch Dateianhänge wie ein Finanzbericht automatisch per Serienmail versandt werden können, so dass diese Berichte nicht zum Beispiel im SAP Business Work Place (siehe Artikel "SBWP: Berechtigungen Allgemeine Ablage") abgelegt werden müssen sondern auch direkt an die Finanzberichtsempfänger versandt werden können.
Innerhalb Excel sind dann natürlich auch graphische Analysen, wie im Artikel "Datentrends für Drittmittelstatistik mit Sparklines ab Excel 2010 darstellen durch Liniendiagramme in Zellen" beschrieben möglich. Wobei dieser Artikel gleichzeitig neben Sparklines auch verschiedene andere Auswertungsmöglichkeiten per Excel darstellt wodurch auch auf einen Blick die Bedeutung der einzelnen Daten hervorgehoben werden können.
Im Buch »Berichtswesen im SAP®-Controlling« bin ich ausführlich auf dies Thema Berichtswesen mit einen Schwerpunkt auf SAP 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 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.
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt
17:55 Uhr
Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel
Sprechender Nummernkreis für CO Innenaufträge
Auch wenn die Verwendung von sprechenden Nummern nicht unumstritten ist (eine entsprechende Diskussion zu diesen Thema findet sich auch im Buch "Schnelleinstieg ins SAP Controlling (CO)" wo sowohl Vorteile als auch Nachteile einer Verwendung von sprechenden Nummern dargestellt werden. Wesentlicher Punkt war hier, dass Auftragsnummern im Nachhinein im Gegensatz zu anderen Stammdaten nicht verändert werden können und hier ein anfangs großzügig vorgesehener Nummernkreis nach einigen jahren eventuell aufgebraucht ist.Auf diese Diskussion gehe ich nun aber nicht weiter ein sondern nehme bestehende Nummernkreisintervalle und Zuordnung zu Bereichen als gegeben hin und möchte nun in einer Query klären in welchen Bereich ein CO Innenauftrag zuzuordnen ist.
Prüfung ob eine Auftragsnummer innerhalb eines Nummernintervall liegt
Innerhalb von Excel kann dieses, wie im Artikel "Prüfung inwieweit ein Wert, bspw. eine Kostenstelle, innerhalb eines Intrevalls (Gruppe) liegt in Excel" beschrieben" durch eine VERWEIS Funktion realisiert werden. Auch Stammdatengruppen, sogenannte Sets können über eine Query (siehe Artikel "Auflösen von Stammdatengruppen nach Einzelwerten - Einzelwerte zu Sets") durch die Verknüpfung zweier Auswertungen zugeordnet werden.
Eine erheblich elegantere Möglichkeit ist es aber in einer Stammdatenauswertung vergleichbar zur Gruppierung von FINANZIERUNGSZWECK auch die Innenauftragsnummernintervalle entsprechend einer Gruppe virtuell zuzuordnen.
Coding von Zusatzfeld für Gruppierungen
Im Artikel "Gruppierung von Finanzierungszwecken bei Drittmittelprojekten per Zusatzfeldcoding mit IF oder CASE" wurde ja schon die Zuweisung von einzelnen Werten je Fall (CASE) mit mehreren Bedingungen (OR) dargestellt, so dass einzelne Finanzierungszwecke zusammengefasst werden konnten. Als Beispiel waren hier die unterschiedlichen EU Rahmenprogramme und die Zuordnung zu EU Mitteln erwähnt.Einen ähnlichen Fall wurde schon im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle sofern nicht in einen anderen Feld ein Wert steht" des 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.
Die Ermittlung der VLE im Infoset anstatt in der Query per lokale Zusatzfelder wie im Artikel "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer" hat den enormen Vorteil, dass hier alle Query die auf dieses Infoset aufbauen auch die Angabe des Bereichs oder die VLE auswerten können ohne selbst in der Query mühsam Felder zu basteln.
Analog zur Excellösung werden hier die vorrangestellten Nullstellen durch NO-ZERO entfernt, so dass danach ein Größenvergleich durchgeührt werden kann. Dabei gehe ich davon aus, dass die Innenauftragsnummern tatsächlich numerisch sind. Andernfalls muss man sich mit der Reihenfolge von alphanumerischen Intervallen beschäftigen.
ABAP: Enthält Variable nur Zahlenwerte
Vorab sollte man sich jedoch bewust sein, dass ein Innenauftrag als Schlüsselfeld durchaus alphanumerische Werte enthalten kann. Hier stellt sich also die Frage, wie es möglich ist die Auftragsnummer zu überprüfen, ob tatsächlich nur Zahlenwerte enthalten sind.Hier kann eine Wenn Funktion (IF) mit der vergleichendenen Anweisung CO (contains only) weiter helfen. ABAP hat einige Vergleichsoperatoren, so dass hier Variablen mit Variablen oder aber auch mit bestimmten Werten verglichen werden können. Zu diesen logischen Ausdrücken gehört unter anderen CO (contians only), CN (contains not only) und weitere. Diese liefern ein Wahr wenn der Vergleich erfolgreich war und nur die Zeichen des Vergleichsparameter vorhanden war (CO) oder aber wenn noch weitere Zeichen dabei sind (CN). Interessant ist auch noch die Möglichkeit CS (contains string) womit vergleicht werden kann, ob eine bestimmte Zeichenfolge in einen Wert vorhanden ist.
Ein ausführliches Beispiel wäre
DATA: L_ZAHLEN(10) TYPE c VALUE = '0123456789'.
* L_zahlen enthaelt Zahlenwerte Leerzeichen
DATA: L_innenauftrag type AUFK-AUFNR.
IF L_innenauftrag CO L_ZAHLEN.
* Reine Auftragsnummer
ELSEIF.
* Alphanumerischer Innenauftrag
ENDIF.
Selbstverständlich lässt sich dieses auch ohne Definition einer Konstanten regeln. Hierzu kann folgende Anweisung erstellt werden:
IF AUFK-AUFNR CO '1234567890'.
* Innenauftrag hat nur Nummern
ELSEIF.
*Innenauftrag ist alphanumerisch
ENDIF.
Damit kann nun mit den vorhandenen Zahlenwerten weitergearbeitet werden.
Sollten auch Nachkommastellen oder Leerzeichen in Ordnung sein, muss der Vergleichsoperator um . und Leerzeichen erweitert werden. Allerdings sind dann neben Währungen oder Zahlen mit Nachkommastellen auch IP Adressen gültig. Als Beispiel ist hier der allzeits beliebte Public DNS (Domain Name System) von Google wie 8.8.8.8 oder 8.8.4.4 gültig. Sollte damit später gerechnet werden, ist das natürlich wesentlich schwieriger jedoch würde es 100 % in das Vergleichsmuster passen.Zugegeben diese Lösung ist nicht so elegant wie die Funktion ISNUMERIC innerhalb VBA (siehe Abschnitt "Negativzeichen hinter Zahlenwert" im Artikel "Office Integration - Excelansicht in SAP und Daten kopieren nach Excel", aber im Ergebnis liefert es in diesen Fall den gewünschten Effekt.
ABAP Prüfung ob Auftragsnummer innerhalb Nummernintervall
Nachdem mit oberen Coding geprüft worden ist, ob es sich bei der Auftragsnummer um eine Zahl handelt kann nun eine Prüfung erfolgen, inwieweit ein Innenauftrag innerhalb eines bestimmten Intervalls liegt und hierzu ein entsprechender Hinweis gegeben werden.Ausgangspunkt ist das Tabellenfeld AUFK-AUFNR mit insgesamt 12 Zeichen. Hierbei sind die Auftragsnummern, sofern sie nicht 12 Zahlen umfassen mit führenden 0 abgespeichert. Nun besteht entweder die Möglichkeit eine Hilfsvariable zu definieren und über die Anweisung:
ohne führenden 0 als ein achtstelligen Wert in die lokale Variable L_Innenauftrag zu speichern. Dieses hat dann aber den Nachteil, dass sofern wir einen mehrstelligen Nummernkreis anlegen diese ebenfalls angepasst werden muss.DATA: L_Innenauftrag TYPE C LENGTH 8.
WRITE AUFK-AUFNR TO L_INNENAUFTRAG NO-ZERO .
Daher ist es eleganter die führenden 0000 bei achtstelligen Innenauftragsnummern im Coding ebenfalls zu berücksichtigen.
Hierzu kann in der Definition des Infoset über die Schaltfläche ZUSÄTZE ein Zusatzfeld im Infoset angelegt werden.
In unseren Beispiel hat dieses folgende Eigenschaften:
Name: ZCOKEY
Langtext / Überschrift: ZCOKEY
Dieses hat den Vorteil, dass wir uns beim Coding leichter den Namen merken können (im Zusatzfeldcoding wird anhand des Namen der Wert zugewiesen.
Als Format bekommt das Feld TYP C (für Character) und eine Länge sowie Ausgabenlänge von jeweils 035 Zeichen.
Damit ist das Feld angelegt und es kann über die Schaltfläche CODING ZUM ZUSATZFELD ein entsprechendes Coding angelegt werden. Da wir nur numerische Innenauftragsnummern verwenden ist die im oberen Abschnitt erwähnte Prüfung ob es sich bei der Auftragsnummer um eine numerische Nummer handelt eigentlich obsolet, dennoch habe ich diese als äußere Klammer im Coding eingefügt.
WICHTIG / Nachtrag: CLEAR ZCOKEY
Es sollte darauf geachtet werden, dass die Variabele ZCOKEY durch die ABAP Anweisung CLEAR erst einmal geleert wird. Andernfalls merkt sich die Query bei mehreren Innenaufträgen den vorherigen Wert, sofern kein neuer Wert zugewiesen wird. Durch die Anweisung CLEAR wird die Variable bzw. das Zusatzfeld auf Initialwert zurückgesetzt. Sofern dieses nicht der Fall ist wundert man sich über die Ergebnisse.
Als einfaches Beispiel werden Buchprojekte auf Innenaufträgen abgebildet. Dabei sind Publikationen zu Office Produkten im Nummernkreis 4021*, SAP Literatur 4022* und BWL Bücher unter 4023* angelegt worden.
CLEAR ZCOKEY.
IF AUFK-AUFNR CO '1234567890'.
IF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040219999'.
ZCOKEY = 'Office Literatur'.
ELSEIF AUFK-AUFNR => '000040220000' AND AUFK-AUFNR <= '000040229999'.
ZCOKEY = 'SAP Literatur'.
ELSEIF AUFK-AUFNR => '000040230000' AND AUFK-AUFNR <= '000040239999'.
ZCOKEY = 'BWL Literatur'.
ENDIF.
ENDIF.
Natürlich ist dieses wesentlich einfacher durch Zuordnung von Profit-Centern wie die vorhandenen Profit-Center OFFICE, SAP, BWL möglich. Im Hochschulbereich könnten das Profit-Center für Landesmittel (L), Drittmittel (D) und Sondermittel (S) sein.
Endziffer Innenauftrag zusätzlich zum Nummernkreisintervall prüfen
Soll nun aber zusätzlich noch unterschieden werden, ob es hier ein gedrucktes Buch ist, eine elektronische Publikation oder die Vorbereitung auf ein Buch und dieses durch die letzte Endziffer des Innenauftrages festgelegt werden kann die IF Anweisung noch um eine weitere Bedingung erweitert werden. Die Endziffer 0 ist dabei für normale Buchprojekte, die Endziffer 1 für Print und 2 für Ebook.CLEAR ZCOKEY.
IF AUFK-AUFNR CO '1234567890'.
IF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040219999' AND AUFK-AUFNR+11(1) = '0'.
ZCOKEY = 'Office Literatur'.
ELSEIF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040219999' AND AUFK-AUFNR+11(1) = '1'.
ZCOKEY = 'Office Literatur PRINT'.
ELSEIF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040219999' AND AUFK-AUFNR+11(1) = '2'.
ZCOKEY = 'Office Literatur Ebook'.
...
ENDIF.
ENDIF.
Durch die Offset Anweisung AUFK-AUFNR+11(1) wird das letzte Zeichen der 12 Stelligen Innenauftragsnummer des Tabellenfeld AUFNR der Tabelle AUFK verwendet.Durch die optionalen Angaben eines Offsets +<o> und eine Länge (<l>) direkt hinter dem Feldnamen <f>, wird der Teil des Felds, der auf Position <o>+1 beginnt und die Länge <l> hat, als eigenes Datenobjekt angesprochen. Diese Möglichkeit haben wir auch im Feld ZAUFNR für den Artikel "SAP Query innerhalb des SAP Moduls PSM FM beziehungsweise Haushaltsmanagement" verwendet um PSM Fonds mit CO innenaufträgen zu verknüpfen.
ACHTUNG: Sobald die IF Bedingung erfüllt ist werden keine weiteren Bedingungen geprüft, daher ist hier entsprechende Sorgfalt zu walten.
Weitere Bestandteile der Innenaufragsnummer als Bedingung prüfen
Entsprechend oberen Codingbeispiel ist es natürlich auch möglich weitere Bestandteile der Innenauftragsnummer als Prüfmerkmal zu verwenden. Insgesamt wären hier acht Bedingungen möglich. Ein anderes Beispiel zu Print und Ebook wären bei Gebäudeinnenaufträgen eine Unterscheidung nach Bewirtschaftung und Bauunterhaltung :-) Vielleicht haben Sie dann noch einen dreistelligen Standort oder eine Organisationseinheit (zum Beispiel einen Fachbereich) innerhalb ihrer sprechenden Auftragsnummer verschlüsselt und wollen diese auflösen.Nummernintervall und Bestandteile der Innenauftragsnummer (hier: Endziffer) per IF und CASE überprüfen
Nehmen wir hierzu wieder das Intervall der SAP Bücher als Beispiel und betrachten folgendes schöne CodingIm ersten Absatz des Coding werden nur Nummern behandelt und alphanumerische Innenaufträge ignoriert. Danach werden anhand des Nummernintervalls das Genre (hier SAP Literatur) festgelegt. Danach wird für die Bücher (hier nur das Intervall SAP Literatur) die Endziffer als Argument in der CASE Anweisung übergeben und die verschiedenen Zustände per WHEN ausgewertet.CLEAR ZCOKEY.
IF AUFK-AUFNR CO '1234567890'.
IF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040219999'.
ZCOKEY = 'Office Literatur'.
ELSEIF AUFK-AUFNR => '000040220000' AND AUFK-AUFNR <= '000040229999'.
ZCOKEY = 'SAP Literatur'.
ENDIF.
IF AUFK-AUFNR => '000040220000' AND AUFK-AUFNR <= '000040229999'.
CASE AUFK-AUFNR+11(1).
WHEN '1'.
ZCOKEY = 'SAP Literatur PRINT'.
WHEN '2'.
ZCOKEY = 'SAP Literatur EBOOK'.
ENDCASE.
ENDIF.
ENDIF.
Ein klein wenig eleganter (da für alle Publikationen) ist das natürlich mit CONCATENATE womit zwei Strings miteinander verbunden werden.
Im Beispiel wären dieses der String 'Ebook' oder 'Print' mit den vorher festgelegten Genre (welches in der Variable COKEY schon über die IF Schleife festgelegt wurde.
Konkret wäre hier also der Abschnitt wie folgt anzupassen.
Die Abap AnweisungIF AUFK-AUFNR => '000040210000' AND AUFK-AUFNR <= '000040239999'.
CASE AUFK-AUFNR+11(1).
WHEN '1'.
CONCENTATE ZCOKEY ' Print' INTO COKEY RESPECTING BLANKS.
WHEN '2'.
CONCENTATE ZCOKEY ' Ebook' INTO COKEY RESPECTING BLANKS.
ENDCASE.
ENDIF.
CONCATENATE altenstring neuenstring INTO altenstring REPSECTING BLANKS.
verkettet getrennte Zeichenfolgen zu einer Zeichenfolge. Durch das Argument RESPECTING BLANKS wird auch das Leerzeichen vor der Art der Publikation ' Print' oder ' Ebook' berücksichtigt.
Alternative Profit-Center-Rechnung
Aus verschiedenen auch eingangs erwähnten Gründen haben wir uns gegen diese Vorgehensweise in unserem Buch entschieden und statt dessen Profit-Center genutzt um die einzelnen Publikationsfelder des im Buch erwähnten Verlages abzudecken.Für 19,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Ebook ISBN: 9783960120414
Sofern Sie aber eine wesentlich feingliedrigere Zuordnung von Innenauftragsnummern zu entsprechenden Nummernbereichen haben, kann hier eine wesentlich feingliedriger Unterscheidung der einzelnen Innenaufträge aus sprechenden Nummern bei extern vergegebenen Auftragsnummern hinterlegt werden. Gerade bei einer Vielzahl von Sondermitteln oder unterschiedlichen Landesmitteln die nur anhand der Nummer unterschieden werden kann es hier für neue Kolleginnen und Kollegen eine Hilfe sein, wenn diese hier eine kurze Erläuterung erhalten um was für eine Art von Projekten es sich dabei handelt.
Verwendung Zustazfeld COKEY für Projektbereich in Query
Sofern nun also das Zusatzfeld in eine Feldgruppe übernommen worden ist besteht auch die Möglichkeit in einer Query auf diese Bezug zu nehmen. Im Ergebnis kann somit die im Artikel "Query Einzelpostenliste Innenauftrag mit Ausweis Ertrag und Aufwand Zweiter Teil Query zur Datenaufbereitung" vorgestellt Query um weitere Informationen wie auch die FINGRUPPE erweitert werden.
Sofern zu einzelnen Innenaufträgen auch die Mittelherkunft anhand eines Ordnungsbegriffes klar definiert ist (siehe "FI-AA Anlagenbuchhaltung: Klassifizierung von Anlagen") kann in einer Quey auch die korrekte Zuordnung von Ordnungsbegriff und Innenauftragsnummernbeeich verglichen werden. Hierzu verweise ich gerne auf den Artikel "Zusammenfassung Query über Anlagenzugang - Auswertung Investitionen aus Profit-Center-Rechnung", aber dieses ist dann auch wieder ein anderes teils auch komplexeres Thema. Grundsätzlich sind aber mit SAP Query nicht nur Stammdatenauswertungen, Analysen und die Darstellung von Bewegungsdaten möglich sondern auch eine Unmenge an Kombination aus vorhandenen Daten und sogar die Neuinterpretation von im System vorhandenen Daten, so dass eine Menge an bisher in Excel erfolgte Schritte nun sozusagen einen Schritt vorverlagert nach SAP gemacht werden können.
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/
14:56 Uhr
Gruppierung von Finanzierungszwecken bei Drittmittelprojekten per Zusatzfeldcoding mit IF oder CASE
Hintergrund: Anwendung Finanzierungszweck im SAP Modul Public Sector Management (PSM)
Innerhalb des Modul Haushaltsmanagement (PSM-FM) können zur Unterscheidung von Drittmittelprojekten als Merkmal sogenannte Finanzierungszwecke genutzt werden. Unerhalb der Fonds können hier einzelne Finanzierungszwecke angelegt, geändert oder auch angezeigt werden. Diese können dann innerhalb der Stammdaten von Fonds im Abschnitt Zusatzdaten ebenso wie Budgetprofile (siehe "Budgetprofil klassische Budgetierung") gepflegt werden. Hierbei handelt es sich um einen alphanummerischen Schlüßel der als Gruppierung und Auswertungsmerkmal für Fonds verwendet werden kann.Die Finanzierungszwecke können unterhalb:
- Rechnungswesen
- Public Sector Management
- Haushaltsmanagement
- Stammdaten
- Kontierungselemente
- Fonds
- Finanzierungszweck
Finanzierungszweck in einer Query einbinden (Zusatzfeld oder Zusatztabelle)
Innerhalb einer Query können Sie diese dann sowohl als Zusatzfelder eingebunden werden (siehe "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen") oder durch Verknüpfung der Tabelle FMFINCODE mit den Stammdaten der Innenaufträge (Tabelle AUFK) als Zusatztabelle (siehe "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") zugeordnet werden.Unterschied CASE WHEN zu IF, ELSEIF Statement
So detailiert entsprechende Finanzierungszwecke abgebildet werden kann es doch auch für das interne Berichtswesen interessant sein mehrere Finanzierungszwecke (FINUSE). Für eine entsprechende Auswertung sollten dann mehrere Finanzierungszwecke zusammengefasst werden wodurch dann zum Beispiel die Fiannzierungszwecke EU/ESF, EU/FRP6, EU/FRP7, EU/FRP8 und andere Mittel der Europäischen Union zu einen gemeinsamen Merkmal "EU" zusammengefasst werden, so dass hier verschiedene Drittmittelprojekte die durch die EU finanziert werden insgesamt zusammengefasst werden.Schon bei der Darstellung im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle sofern nicht in einen anderen Feld ein Wert steht" wurden einzelne Daten ausgelesen und über eine IF Schleife das Zusatzfeld per IF und ELSEIF einen Wert zugewiesen.
Die Besonderheit von IF Statements ist, dass hier besondere Prüfungen vorgenommen werden können. Neben IF gibt es aber auch die Möglichkeit per CASE Anweisung durch ABAP Code den Einzelwert eines Feldes direkt zu prüfen.
Insgesamt können in einer CASE Abfrage bis zu acht Zustände (Bedingungen) überprüft werden.
Der Syntax dazu lautet:
Hierdurch ist die Case Anweisung wesentlich flexibler da mehrere Bedingungen per ODER verknüpft werden können, allerdings muss eine absolute Übereinstimmung mit den Werten vorhanden sein. Sofern mit Platzhaltern * gearbeitet werden soll, ist dann doch eher die Variante von IF und ELSEIF hilfreich.CASE variable.
WHEN bedingung1 OR bedingung2 .
..
Ausgelöste Aktion
..
WHEN bedingung9 OR bedingung10.
..
Ausgelöste Aktion
...
WHEN OTHERS.
..
Kein Fall tritt ein
..
ENDCASE.
IF variable = wert.
..
ausgelöste Aktion
..
ELSIF bedingung.
..
ausgelöste Aktion bei der die Bedingung, die auch komplexer sein darf, zutrifft.
..
ELSE.
..
ausgelöste Aktion, wenn keine Bedingung zutrifft.
..
ENDIF.
Im Grunde ist diese Funktion vergleichbar mit anderen Skriptsprachen. So wäre bei PHP ein vergleichbarer Fall mit IF (siehe "Wenn das Wörtchen if nicht wär...") oder SWITCH (siehe "Hierhin switchen, dahin switchen...") vergleichbar. Dieses ist auch einer der Gründe, warum ich zum Erlernen einer Programmiersprache auch gerne auf PHP und natürlich das Buch "PHP für dich, Version 2014: So einfach war PHP-lernen noch nie!" verweise, da es sehr anschaulich die Grundlagen einer Programmiersprache darstellt und PHP relativ einfach im Bereich Webseiten für eigene Projekte bzw. die private Homepage genutzt werden kann.
Nun aber wieder zurück zur Anwendung der CASE Anweisung bei Fonds und ihren Finanzierungszwecken.
Zur Erinnerung wir haben den Finanzierungszweck entweder über ein Zusatzfeld (und damit in der Variable finuse) oder über eine Zusatztabelle und damit über das Tabellenfeld FMFINCODE-FINUSE vorliegen.
Exkurs Finanzierungszweck über Zusatzfeld finuse
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.
Um nun auf die Variable oder den Finanzierungszweck zuzugreifen legen wir ein neues Zusatzfeld an.
Zusatzfeld FINANZIERUNGSGRUPPE mit CASE Anweisung
Über die Schaltfläche Zusätze (F5) bzw. innerhalb der Transaktion SQ02 (Pflege des Infosets) über SPRINGEN-> ZUSÄTZE ZUM KNOTEN kann ein eigenes Zusatzfeld angelegt 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 FINGRUPPE) und die Art der Zusatzinformation. Neben des schon angesprochenen Zusatzfeldes sind dieses: Zusatztabelle, Zusatzstruktur und Coding. In unserem Beispiel soll ein Zusatzfeld mit den Namen FINGRUPPE angelegt werden.
Dieses hat folgende Eigenschaften: Langtext und Überschrift haben beide Finanzierungsgruppe 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). Dieses sollte, sofern Sie FINUSE per Zusatzfeld definiert haben, in einen tiefergelegten Codingabschnitt hinteregt werden.
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
Hier entscheidet dann die erste Zeile des Coding woran die Bedingungen überprüft werden sollen.
1. Variante Orientierung am Zusatzfeld FINUSE.
Wie in oberen Beispielcoding ersichtlich erhält die Variable finuse ihren endgültigen Wert durch die Anweisung
finuse = L_FINZWECK.
Somit ist die erste Zeile des Coding für unsere FINANZIERUNGSGRUPPE also:
CASE finuse.
2. Variante Einbindung als Zusatztabelle
Sollten Sie die Tabelle FMFINCODE als Zusatztabelle über das Zusatzfeld ZAUFNR eingebunden haben (siehe oben verlinkten Artikel) würde die erste Codingzeile wie folgt lauten:
CASE FMFINCODE-FINUSE.
3. Coding mit Bedingungen
In beiden Fällen kann das Coding nun wie folgt weitergehen, so dass eine entsprechende Ausgabe erfolgen wird.
WHEN 'EU/ESF' OR 'EU/FRP7' OR 'EU/FRP8' OR 'EU/FRP6'.
FINGRUPPE = 'EU-Projekte'.
WHEN 'INDUSTRIE'.
FINGRUPPE = 'Industrie'.
WHEN OTHERS.
FINGRUPPE = 'Andere Projekte'.
ENDCASE.
Insgesamt können je WHEN Zeile acht Varianten als Bedingung gesetzt werden.
Sinnvoller ist es natürlich bei WHEN OTHERS. dann den Finanzierungszweck des Fond auszugeben.
Für die Zusatztabelle wäre hier das Coding:
WHEN OTHERS.
FINGRUPPE = FMFINCODE-FINUSE.
ENDCASE.
und für das Zusatzfeld:
WHEN OTHERS.
FINGRUPPE = finuse.
ENDCASE.
Damit kann dann später noch entschieden werden, was mit einen Finanzierungszweck passieren soll und gegebenenfalls künftig eine weitere Bedingung mit eingebaut werden.
Anwendungsgebiet Finanzierungsgruppe
Während in einer Drittmittelstatistik Daten möglichst ausführlich dargestellt werden sollten kann es für Managementberichte sinnvoll sein vorhandene Daten zusammen zu fassen und so diese Projekte gruppiert darzustellen. Hierzu eigent sich dann tatsächlich die Methode der Finanzierungsgruppe, da hiermit die Ergebnisse einer Auswertung (als Beispiel sei hier der Recherchebericht "Saldenliste für Fonds im Haushaltsmanagement Saldo gegen Ertrag und Saldo gegen Budget" um eine Stammdatenliste ergänzt werden die sowohl CO Stammdaten, Klassifizierungsmerkmale als eben auch die Fiannzierungsgruppe mit ausweisen kann. Für weitere Möglichkeiten einer solchen Query verweise ich gerne auf die Artikelserien:
- "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"
- "Query Einzelpostenliste Innenauftrag mit Ausweis Ertrag und Aufwand Zweiter Teil Query zur Datenaufbereitung"
- "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"
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.
21:34 Uhr
Stammdatenerweiterung von CO-Objekten am Beispiel ergänzende Kostenstelle beim Innenauftrag
Ergänzend zur verantwortlichen Kostenstelle des Innenauftrag soll als weitere Information eine weitere Kostenstelle hinterlegt werden. Hierzu werden mehrere Überlegungen zur Umsetzung angestellt.
Userexit für kundeneigene Zusatzfelder im Stammsatz
Im Wesentlichen ist es möglich über sogenannte Userexits Zusatzfelder zu Stammdaten zu erstellen. Dieses ist über die Transaktion CMOD möglich und zum Beispiel für- Kostenarten:
http://www.consolut.com/s/sap-ides-zugriff/d/e/doc/P-COOMKA01 - Kostenstellen:
http://www.consolut.com/s/sap-ides-zugriff/d/e/doc/P-COOMKS01 - oder auch Innenaufträge:
http://www.consolut.com/s/sap-ides-zugriff/d/e/doc/P-COOPA003
Eine Übersicht aller Userexits ist auch auf der Seite easymarketplace.de möglich.
Im Berater-Wiki ist die Nutzung von CMOD anhand eines Beispiels im Eintrag "Customer-Exits" erläutert.
Alternativ können natürlich auch sonstige freie Felder im jeweiligen Stammdatenblatt verwendet werden. Gerade die Stammdaten eines Innenauftrages haben hier einige Felder, die auf unterschiedliche Weise eine Zuordnung von Daten ermöglichen.
Individuelle Stammdatenfelder ändern
SAP selbst empfiehlt im Customizing die Verwendung von individuellen Stammdatenfeldern, die auch durch entsprechendes Customizing eine eigene Bezeichnung erhalten können.
Das Customizing ist in der Transaktion SPRO im Pfad
Controlling > Innenaufträge > Auftragsstammdaten > Bildschirmgestaltung > "Individuelle Stammdatenfelder ändern" erläutert (Hilfe Schaltfläche)
Folgende Daten des Gruppenrahmen "Allgemeine Daten" können hier umbenannt werden.
Insgesamt stehen hier folgende zehn Felder zur Verfügung:
- Antragsteller (AUFK-USER0 Char 20)
- Telefonnummer des Antragstellers (AUFK-USER1 Char 20)
- Verantwortlicher (AUFK-USER2 Char 20)
- Telefonnumer des Verantwortlichen (AUFK-USER3 Char 20)
- Geschätzte Gesamtkosten des Auftrags (AUFK-USER4 Währung 11)
- Antragsdatum (AUFK-USER5 Datum 8)
- Abteilung (AUFK-USER6 Char 15)
- Arbeitsbeginn (AUFK-USER7 Datum 8)
- Arbeitsende (AUFK-USER8 Datum 8)
- Kennzeichen "Arbeitsgenehmigung erteilt" (AUFK-USER9 Checkbox Char 1)
Verantwortliche und Anfordernde Kostenstelle im CO Innenauftrag
Ein Beispiel für unterschiedliche Verknüpfungen zu anderen CO Objekten ist hier die verantwortliche und die anfordernde Kostenstelle im Register "Zuordnungen". Die verantwortliche Kostenstelle stellt dabei die organisatorische Zuordnung eines Innenauftrages dar und kann unter anderen für Berechtigungen (z.B. Berechtigungsobjekt K_ORDER) verwendet werden. Wird über einen Investitionsauftrag eine Investitionsmaßnahme abgebildet, so wird die anfordernde Kostenstelle für die Anlage im Bau in den Stammsatz der Anlagenbuchhaltung übernommen.Innerhalb der Auftragsart kann über die Objektklasse bestimmt werden, ob es sich beim Innenauftrag um einen Investitionsauftrag handelt oder hier bspw. Gemeinkosten abgebildet werden. Über das Auftragslayout oder die Feldauswahl können hier einzelne Felder ausgeblendet bzw. als Muss/Kann Felder definiert werden.
Ebenso käme hier das Feld "anfordernder Auftrag" in Betracht (um bspw. den Hauptauftrag bei Teilprojekten zu identifizieren. Hier stellt sich dann nur die Frage, ob langfristig nicht doch auch das Investitionsmanagement genutzt werden soll, oder besser um nicht Felder zu verwenden, die eigentlich für eine andere Funktion vorgesehen sind, eine andere Alternative ebenfalls überlegenswert und möglicherweise noch flexibler wäre.
Auf diese und andere Alternative, wie die Nutzung der Klassifizierung, wurde im Buch "Schnelleinstieg ins SAP Controlling (CO)" (ISBN 9783960126874 *) hingewiesen... . Für einen Überblick über die Möglichkeiten im Controlling mit SAP ist dieses tatsächlich ein geeignetes Nachschlagewerk :-) Hier wird auch die Auftragslayoutpflege innerhalb des Customizing zur Auftragsart (Transaktion KOT2_OPA) ausführlich beschrieben.
Leseempfehlungen:
Einige aktuelle Literaturempfehlungen habe ich auch im Artikel "Espresso Tutorial SAP Fachbücher Neuerscheinungen und Katalog 2016" festgehalten, wobei ich aktuell hier auch noch zwei Bücher im RUB stehen habe bzw. derzeit eher am SUB als aktuelle Literatur.
Ergänzend zu den kundeneigenen Zusatzfeldern möchte ich nun aber auch etwas ausführlicher auf die Möglichkeiten der Klassifizierung eingehen.
Anwendungsübergreifende Komponente Klassensystem
Das Klassensystem ermöglicht es innerhalb einer Klasse verschiedene Merkmale zusammenzufassen und diese dann an Stammdaten als weitere Felder zu pflegen.Innerhalb PSM-FM ist dieses bspw. für die Klassen 042 Fonds, 041 Finanzstelle oder auch 043 Finanzpositionen möglich. Sobald eine Klasse entsprechend angelegt ist, kann die Klassifizierung am jeweiligen Objekt gepflegt werden. Die Klassifizierung kann auch im Controlling beispielsweise für die Klassenart 013 Controlling: Aufträge gepflegt werden. Hierzu ist es jedoch erforderlich, dass in der Auftragsart (Transaktion KOT2_OPA) bei den Steuerkennzeichen die Klassifizierung aktiviert wurde.
Hauptanwendungsgebiet der Klassifizierung dürfte jedoch die Verwendung in der Materialwirtschaft sein um entsprechende Stammdaten der Materialien zu erweitern. Aber auch sonst ist die Klassifizierung tatsächlich anwendungsübergreifend und ermöglicht auch die Erweiterung von weiteren Stammdaten, wie auch schon an der Klassenart 010 Lieferantenklasse, 011 Debitorenklasse oder auch 001 Materialklasse zu sehen ist.
CT04 Merkmalverwaltung
Über die Merkmalverwaltung (Transaktion CT04) können einzelne Merkmale definiert werden. Diese können entweder einwertig oder mehrwertig sein und in den Basisdaten auch als erforderlich markiert werden. Im Reiter Werte können auch schon entsprechende Vorschlagswerte festgelegt werden. Hierbei ist zu beachten, dass die Spalte Merkmalswert dann auch der eigentliche Wert des Merkmals enthält und die Bezeichnung eine passende Beschreibung dazu enthält. Andernfalls handelt es sich beim Merkmal um ein Freitextfeld. Innerhalb der Registerkarte Einschränkungen kann dass Merkmal auf eine bestimmte Klassenart (bspw. 042 Fonds) eingeschränkt werden und nur in dieser Klasse verwendet werden.CL02 Klassenverwaltung
Über die Klassenverwaltung (Transaktion CL02) können mehrere Merkmale zu einer Klasse zusammengefasst werden und einer bestimmten Klassenart bspw. 042 für Fonds oder 013 für Innnenaufträge zugeordnet werden.Merkmale im CO Objekt pflegen
Über die Schaltfläche Klassifizierung in der Stammdatenpflege (egal ob nun KO02 für Innenaufträge oder FM5U für Fonds) können die einzelnen Merkmale gepflegt werden. Hierzu muss die Klassifizierung im jweiligen Objekt aktiviert werden.Suche über Klassifizierung
Über eine Stammdatenliste (bspw. Transaktion S_KI4_38000039 für die alphabetische Lsite Fonds) kann über den Knopf Klassifizierung über die entsprechende Klasse und der Klassenart (es besteht somit auch die Möglichkeit für eine Klassenart bspw. Fonds mehrere Klassen anzulegen) entsprechende Objekte in Klassen zu suchen. Im Ergebnis erhält man eine Liste die dann alle entsprechenden übereinstimmende Objekte, die dann als Selektion in die Stammdatenliste übernommen werden können. Alternativ können Sie auch über die Transaktion CL30N eine entsprechende Suche starten.Alle Funktionen zur Klassifizierung sind innerhalb des SAP Menü unter Anwendungsübergreifende Komponenten > Klassensystem zu finden.
Auswertung über Query
Technisch betrachtet sind die einzelnen Merkmalswerte in der Tabelle AUSP "Ausprägungswerte der Sachmerkmale" hinterlegt. Sofern Sie die Zuordnung der einzelnen Merkmale zu den einzelnen Klassenarten auswerten wollen, können Sie hier die Tabelle TCLA "Klassenarten" über die Tabelle INOB "Zuordnung einer internen Nummer zu einem bel. Objekt" über das Feld "KLART" miteinander verknüpfen.Anhand der beiden Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" und "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" (hier im Abschnitt "Merkmal aus Klassifizierung mit auswerten" ) habe ich beschrieben, wie diese Merkmale wesentlich eleganter über eine Query ausgewertet werden können.
Insgesamt sollte das Thema von notwendigen Daten besonders dann überdacht werden, wenn auch die Stammdaten mit anderen Systemen, zum Beispiel Personalabrechnung oder Bestellung per EBP ausgetaucht werden.. Auch hier ist eine gemeinsame Planung zwischen allen Beteiligten und das endgültige Berichtsziel nahezu elementar.
Aktuelle Schulungstermine Rechercheberichte mit SAP Report Painter
unkelbach.link/et.reportpainter/
17:07 Uhr
Syntaxhevorhebung im ABAP Editor durch neuen Frontend Editor (Quelltext-Modus)
Neugierig geworden hatte ich nun ein wenig nach der Ursache dieses Unterschieds gesucht und bin recht angetan von der "neuen" Darstellungsweise.
Vorteil kollegialer Austausch oder Know How Transfer
So ergeben sich eben doch auch überraschende Kenntnisse, wenn Kolleginnen und Kollegen um einen kurzen Überblick zum Thema anfragen. Auch dieses ist ein Grund, warum ich sehr froh bin, dass hin und wieder ein technischer Austausch zwischen den einzelnen Einrichtungen möglich ist. Ein wenig bin ich auf das Thema "kollaboratives Wissensmanagement" ja auch im Artikel "Praktische Nutzung von social media Diensten für meinen Arbeitsalltag" eingegangen. Nun aber zum eigentlichen Thema.
Unterschied Frontend-Editor alt/neu bzw. Quellcode-basiert/Text-basierter ABAP Editor
Die klassische Darstellung entsprach dabei einen Textfeld in dem direkt das Coding eingefügt werden konnte, wie hier am Beispiel der Ausgabe des Zusatzfeld GESPERRT zu sehen ist:Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *
Eine wesentlich moderne Form der Darstellung war dann wie folgt zu sehen.
Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *
Hierbei wird der Frontend Editor (Quelltext-Modus) eingebunden der jedoch vorher aktiviert werden muss. Zumindest war dieses bei mir erforderlich, während neu angelegte User scheinbar direkt den "neuen" Quelltext-Editor gesehen haben.
Die Vorteile sind hier offensichtlich Syntaxthervorhebung, Autovervollständigung, Zeilennummerierung sowie die Möglichkeit des Zusammenklappens von zusammengehörenden Codeblöcken wie im Beispiel die IF-Bedingung.Gerade die Möglichkeit bestehende Codeblöcke zu expandieren oder zu kompromieren (im Beispiel die IF Bedingung verschafft hier einen guten Überblick über das Coding. Durch die Syntaxhervorhebung werden ABAP Schlüsselworte in blau, Bezeichner in schwarz und Zeichenliterale (alphanumerischen Zeichen bzw. Wertzuweisungen) in grün. Sofern ordentlich gecodet wird (und tatsächlich Kommentare mit eingefügt sind) werden Kommentare in Grau dargestellt. Syntaxfehler werden direkt in rot hervorgehoben.
Einstellungen ABAP Editor
Dieser neue Editor kann in einer beliebigen ABAP Workbench-Werkzeug Transaktion, SE38 – ABAP Editor, SE37 – Function Builder, SE24 – Class Builder oder SE80 Object Navigator über das Menü HILFSMITTEL->EINSTELLUNGEN aktiviert werden. Hierzu ist in der Registerkarte "ABAP Editor" im Reiter "Editor" der Punkt "Front-End Editor (neu)" zu aktivieren.Je nach SAP Version kann dieser Punkt auch "Quellcode basierter Editor" und die Alternative als "Text-basierter Editor" bezeichnet sein.
In meinen Fall ist hier der Punkt "Front-End Editor (neu)" wie in der unteren Abbildung abgebildet ausgewählt.
Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *
Alternativ besteht, wie erwähnt die Auswahl zwischen Quellcode und Text basierter Editor (siehe Abbildung).
Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *
Hierdurch wird in allen Coding-Feldern dann auch tatsächlich die moderne Form des Quelltext-Editor im Quelltext-Modus mit allen Vorzügen betrieben. Allerdings ist diese Einstellung benutzerspezifisch, so dass diese für jeden Benutzer selbst vorgenommen werden muss. An der gleichen Stelle können auch die Einstellungen für den Pretty Printer vorgenommen werden, durch den vorhandener ABAP Code nach einer entsprechenden Vorlage formatiert wird. So kann in bestehenden ABAP Code jedes Schlüsselwort/jeder ABAP Befehl in Großbuchstaben geschrieben werden. ABAP selbst unterscheidet nicht zwischen Groß- und Kleinschreibung.
Hinweis EU_INIT, EU_REORG und EU_PUT bei SE80
Sofern Sie die Einstellungen im Object Navigator (Transaktion SE80) vorgenommen haben ist noch auf folgendes zu achten.
Beim erstmaligen Start der Transaktion SE80 (Repository Browser) werden automatisch die drei EU-Jobs erzeugt und, falls der Benutzer über ausreichende Berechtigungen verfügt, freigegeben: EU_INIT (einmaliger Start), EU_REORG (periodisch jede Nacht) und EU_PUT (periodisch jede Nacht).
Diese EU-Jobs dienen dazu, für die ABAP Workbench wichtige Indizes (Verwendungsnachweise, Navigationsindizes, Objektlisten) neu aufzubauen oder zu aktualisieren. Gerade der Job EU_INIT ist dabei entsprechend intensiv auf der Datenbank aktiv, da hier alle Indizes komplett aufgebaut werden. Die beiden anderen Jobs sind dabei weniger "systemauslastend". Nähere Informationen hierzu sind im OSS Hinweis 18023 zu erfahren.
Änderungen "neuer" Frontend Editor
Eine Übersicht über die Änderungen des "neuen" Frontend Editor sind unter anderen im Berater-Wiki Eintrag zum Thema "Neuer Frontend Editor" von René Eberstein (Freiberuflicher SAP-Entwickler) zu finden.Sauberes ABAP Coding dank Namenskonventionen
Anhand oberes Coding ist zwar durch L_ erkenbar, dass es sich um ein lokales Objekt handelt (bzw. um eine lokale Variable) dennoch kann es sehr hilfreich sein sich in einer Programmiersprache an bestimmte Vorgaben zur Namensgebung bei Variablen zu halten.im Developer Blog der exxens GmbH ist dieses Thema im Artikel "Prommmierrichtlinien / Namenskonventionen" recht ausführlich behandelt und kann als Vorlage dienen.
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.
15:00 Uhr
Weitere Zusatzfelder im Infoset mit ABAP Coding zur Verwendung in SAP Query über die Tabellen AUFK und FMFINCODE
Das grundsätzliche Infoset zur Auswertung von Innenaufträgen ist in folgender Darstellung bereits im entsprechenden Artikel erläutert.
Neben den schon erwähnten Feld Finanzierungszweck aus den Stammdaten des Fonds sind auch weitere Felder noch über ein Zusatzfeld und dahinter liegenden Coding zu ermitteln.
Alle hier aufgeführten Coding befinden sich im Codeabschnitt 1. Für die Merkmale der Klassifizierung ist der Codeabschnitt 3 verwendet worden und wird im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM".
In den Folgenden Beispielen wird davon ausgegangen dass sich die PSM-FM Stammdaten alle im Finanzkreis FIK befinden.
Die einzelnen Zusatzfelder werden als erstes mit ihren Verweis auf die Eigenschaften des jeweilige Tabellenfeld definiert. Danach folgt eingerückt das zugehörige ABAP-Coding zum Zusatzfeld.
Zusatzfeld: Ist ein Fond zum Innennauftrag vorhanden?
Es wird das Zusatzfeld FONDS angelegt um in der Tabelle FMFINCODE nach einen mit identischer Nummer zum Innenauftrag angelegten Fond im Modul PSM-FM zu suchen.FONDS like FMFINCODE-FINCODE.
Das entsprechende Coding zum Zusatzfeld sieht wie folgt aus:
DATA: l_fincode TYPE FMFINCODE-FINCODE.
DATA: l_aufnr TYPE aufk-aufnr.
l_aufnr = aufk-aufnr.
SHIFT l_aufnr BY 4 PLACES LEFT.
l_fincode = l_aufnr.
SELECT SINGLE FINCODE FROM FMFINCODE INTO l_fincode
WHERE fikrs = 'FIK'
AND FINCODE = l_fincode.
IF sy-subrc <> 0.
CLEAR fonds.
ELSE.
fonds = l_fincode.
ENDIF.
Zusatzfeld: Bezeichnung des Fond
Sofern ein passender Fond gefunden wurde soll auch die Bezeichnung des Fond mit ausgewertet werden. Hierzu soll das Feld BEZEICH aus der Tabelle FMFINT ausgewertet werden.
BEZEICHNUNG Like FMFINT-BEZEICH
Das entsprechende Coding sieht dabei wie folgt aus:
DATA: l_bezeich TYPE fmfint-bezeich.
DATA: l_fincodebezeichnung Type FMFINCODE-FINCODE.
DATA: l_aufnrbezeichnung TYPE aufk-aufnr.
l_aufnrbezeichnung = aufk-aufnr.
SHIFT l_aufnrbezeichnung BY 4 PLACES LEFT.
l_fincodebezeichnung = l_aufnrbezeichnung.
SELECT SINGLE bezeich FROM fmfint INTO l_bezeich
WHERE fikrs = 'FIK'
AND fincode = l_fincodebezeichnung.
IF sy-subrc <> 0.
CLEAR bezeichnung.
ELSE.
bezeichnung = l_bezeich.
ENDIF.
Zusatzfeld: Gültigkeit des Fond
Neben Arbeitsbeginn und Arbeitsende soll auch die Gültigkeit des Fonds ausgewertet werden.
Hierzu sollen die beiden Felder DATAB und DATBIS der Tabelle FMFINCODE ausgewertet werden. Entsprechend sind hier zwei Zusatzfelder angelegt worden.
DATUM_AB Like FMFINCODE-datab
Das entsprechende Coding lautet:
DATA: l_datab TYPE FMFINCODE-datab.
DATA: l_fincodedatab Type FMFINCODE-FINCODE.
DATA: l_aufnrdatab TYPE aufk-aufnr.
l_aufnrdatab = aufk-aufnr.
SHIFT l_aufnrdatab BY 4 PLACES LEFT.
l_fincodedatab = l_aufnrdatab.
SELECT SINGLE datab FROM FMFINCODE INTO l_datab
WHERE fikrs = 'FIK'
AND FINCODE = l_fincodedatab.
IF sy-subrc <> 0.
CLEAR datum_ab.
ELSE.
datum_ab = l_datab.
ENDIF.
DATUM_BIS Like FMFINCODE-datbis
Das entsprechende Coding lautet:
DATA: l_datbis TYPE FMFINCODE-datbis.
DATA: l_fincodedatbis Type FMFINCODE-FINCODE.
DATA: l_aufnrdatbis TYPE aufk-aufnr.
l_aufnrdatbis = aufk-aufnr.
SHIFT l_aufnrdatbis BY 4 PLACES LEFT.
l_fincodedatbis = l_aufnrdatbis.
SELECT SINGLE datbis FROM FMFINCODE INTO l_datbis
WHERE fikrs = 'FIK'
AND FINCODE = l_fincodedatbis.
IF sy-subrc <> 0.
CLEAR datum_bis.
ELSE.
datum_bis = l_datbis.
ENDIF.
Zusatzfeld: Fondsart
Innerhalb des Haushaltsmanagement können einzelne Fonds einer Fondart zugewiesen werden, die dann für Reportingzwecke verwendet werden können.
Hierzu soll das Tabellenfeld TYPE in der Tabelle FMFINCODE ausgewertet werden.
FONDSART Like FMFINCODE-TYPE
Das Coding lautet dabei wie folgt:
DATA: l_type TYPE FMFINCODE-TYPE.
DATA: l_fincodefondsart Type FMFINCODE-FINCODE.
DATA: l_aufnrfondsart TYPE aufk-aufnr.
l_aufnrfondsart = aufk-aufnr.
SHIFT l_aufnrfondsart BY 4 PLACES LEFT.
l_fincodefondsart = l_aufnrfondsart.
SELECT SINGLE type FROM FMFINCODE INTO l_type
WHERE fikrs = 'FIK'
AND FINCODE = l_fincodefondsart.
IF sy-subrc <> 0.
CLEAR fondsart.
ELSE.
fondsart = l_type.
ENDIF.
Zusatzfeld: Budgetprofil
Über das Budegtprofil lassen sich verschiedene Budgetsteuerungen (bspw. Unterscheidung Jahresbudget, Gesamtbudget oder auch Zeithorizonte) festlegen. Die Customizing-Einstellungen sind im Artikel "Budgetprofil klassische Budgetierung" und die Budgetierung an sich im Artikel "SAP PSM-FM klassische Budgetierung mit unterschiedlichen Budgetversionen" näher vorgestellt. Innerhalb des Infosets soll jedoch nur das zugeordnete Budgetprofil zum jeweiligen Fond mit ausgegeben werden. Dieses ist im Tabellenfeld PROFIL der Tabelle FMFINCODE gespeichert.Entsprechend wurde folgendes Zusatzfeld angelegt:
BUDGETPROFIL Like FMFINCODE-PROFIL
Das dahinter liegende Coding hat dabei folgenden Aufbau:
Soweit wären hier alle relevanten Stammdaten der Transaktion FM5S (Fond anzeigen) aufgeführt. Eine Erweiterung der Stammdaten um einzelne Merkmale der Klassifizierung ist im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" ausführlich beschrieben. Hier sind die einzelnen Zusatzfelder (für die Merkmale der Klassifizierung innerhalb des Abschnit 3 zu hinterlegen, da diese sich auf das Zusatzfeld OBJNFOND im Abschnitt 2 bezieht.DATA: l_profil TYPE FMFINCODE-PROFIL.
DATA: l_fincodebudgetprofil TYPE FMFINCODE-FINCODE.
DATA: l_aufnrbudgetprofil TYPE aufk-aufnr.
l_aufnrbudgetprofil = aufk-aufnr.
SHIFT l_aufnrbudgetprofil BY 4 PLACES LEFT.
l_fincodebudgetprofil = l_aufnrbudgetprofil.
SELECT SINGLE profil FROM FMFINCODE INTO l_profil
WHERE fikrs = 'FIK'
AND FINCODE = l_fincodebudgetprofil.
IF sy-subrc <> 0.
CLEAR budgetprofil.
ELSE.
budgetprofil = l_profil.
ENDIF.
OBJNFOND like AUSP-OBJEK
Die einzelnen Merkmale aus der Tabelle AUSP müssen dann jedoch noch über die Tabelle CABN anhand des Felds ATINN ausgewertet werden. Dieses ist aber im entsprechenden Artikel wesentlich ausführlivher erläutert.CONCATENATE 'FIK ' FONDS INTO OBJNFOND RESPECTING BLANKS.
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"
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.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
14:21 Uhr
SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM
Problematisch ist nur, dass die Merkmale der Klassifizierung nicht in einer Stammdatenliste direkt mit aufgeführt werden können. Entsprechend naheliegend ist es diese ebenfalls in einer Query neben verschiedenen anderen Stammdaten auszuwerten.
Exkurs: Klassensystem
Das Klassensystem ermöglicht es innerhalb einer Klasse verschiedene Merkmale zusammenzufassen und diese dann an Stammdaten als weitere Felder zu pflegen.
Innerhalb PSM-FM ist dieses bspw. für die Klassen 042 Fonds, 041 Finanzstelle oder auch 043 Finanzpositionen möglich. Sobald eine Klasse entsprechend angelegt ist, kann die Klassifizierung am jeweiligen Objekt gepflegt werden.
Die Klassifizierung kann auch im Controlling beispielsweise für die Klassenart 013 Controlling: Aufträge gepflegt werden. Hierzu ist es jedoch erforderlich, dass in der Auftragsart (Transaktion KOT2_OPA) bei den Steuerkennzeichen die Klassifizierung aktiviert wurde.CT04 Merkmalverwaltung
Über die Merkmalverwaltung (Transaktion CT04) können einzelne Merkmale definiert werden. Diese können entweder einwertig oder mehrwertig sein und in den Basisdaten auch als erforderlich markiert werden. Im Reiter Werte können auch schon entsprechende Vorschlagswerte festgelegt werden. Hierbei ist zu beachten, dass die Spalte Merkmalswert dann auch der eigentliche Wert des Merkmals enthält und die Bezeichnung eine passende Beschreibung dazu enthält. Andernfalls handelt es sich beim Merkmal um ein Freitextfeld. Innerhalb der Registerkarte Einschränkungen kann dass Merkmal auf eine bestimmte Klassenart (bspw. 042 Fonds) eingeschränkt werden und nur in dieser Klasse verwendet werden.
CL02 Klassenverwaltung
Über die Klassenverwaltung (Transaktion CL02) können mehrere Merkmale zu einer Klasse zusammengefasst werden und einer bestimmten Klassenart bspw. 042 für Fonds oder 013 für Innnenaufträge zugeordnet werden.
Merkmale pflegen
Über die Schaltfläche Klassifizierung in der Stammdatenpflege (egal ob nun KO02 für Innenaufträge oder FM5U für Fonds) können die einzelnen Merkmale gepflegt werden.
Suche über Klassifizierung
Über eine Stammdatenliste (bspw. Transaktion S_KI4_38000039 für die alphabetische Lsite Fonds) kann über den Knopf Klassifizierung über die entsprechende Klasse und der Klassenart (es besteht somit auch die Möglichkeit für eine Klassenart bspw. Fonds mehrere Klassen anzulegen) entsprechende Objekte in Klassen zu suchen. Im Ergebnis erhält man eine Liste die dann alle entsprechenden übereinstimmende Objekte, die dann als Selektion in die Stammdatenliste übernommen werden können. Alternativ können Sie auch über die Transaktion CL30N eine entsprechende Suche starten.
Alle Funktionen zur Klassifizierung sind innerhalb des SAP Menü unter Anwendungsübergreifende Komponenten > Klassensystem zu finden.
Technisch betrachtet sind die einzelnen Merkmalswerte in der Tabelle AUSP "Ausprägungswerte der Sachmerkmale" hinterlegt. Sofern Sie die Zuordnung der einzelnen Merkmale zu den einzelnen Klassenarten auswerten wollen, können Sie hier die Tabelle TCLA "Klassenarten" über die Tabelle INOB "Zuordnung einer internen Nummer zu einem bel. Objekt" über das Feld "KLART" miteinander verknüpfen.
Ausgangslage:
In unseren Fall möchten wir jedoch die bestehende Stammdatenliste aus Innenaufträge und entsprechende Fonds (wie im Artikel "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck" um bestimmte Merkmale aus der Klassifzierung erweitern.
Zur Erinnerung nocheinmal das Infoset aus den vorherigen Artikel
Bisher haben wir in dieser Query den Finanzierungszweck aus PSM, die Laufzeit aus CO sowie das Sperrkenzeichen und die aus den Kostenstellen abgeleitete Lehreinheit gelistet.
Innerhalb der Tabelle AUSP werden die Kontierungsobjekte (zum Beispiel ein Fond) im Feld OBJEK (Schlüssel des zu klassifizierenden Objektes) gespeichert. Daneben kann die Auswahl auch über das Feld KLART (Klassenart) auf Merkmale der Klassenart 042 eingeschränkt werden.
Problematisch am Aufbau des Feldes OBJEK ist jedoch, dass hier für Fonds der Finankreis gefolgt von der Nummer des Fonds als Identifikator gilt. Dieses hat den Nachteil, dass sofern der Finanzkreis weniger als vier Zeichen enthält hier ein entsprechendes Leerzeichen eingefügt wird.
Als Beispiel wäre das Projekt 40210001 im Buchungskreis FIK als "FIK 40210001" in dieser Tabelle gespeichert.
Wo die Objektnummer im Innenauftrag noch in der Tabelle AUFK im Feld OBJNR gespeichert ist (OR000040210001) befindet sich in der Tabelle FMFINCODE kein entsprechendes Feld.
Hierzu müsste als Feld die Nummer des Fonds mit den Finanzkreis und einen Leerzeichen verbunden werden.
Zusatzfeld Fond aus Innenauftrag ableiten
Das bereits angelegte Infoset soll um zwei weitere Zusatzfelder erweitert werden. In der Pflege des Infosets innerhalb der Transaktion SQ02 (Pflege des Infosets) kann über die Schaltfläche Zusätze (F5) bzw. über SPRINGEN-> ZUSÄTZE ZUM KNOTEN 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 FONDS) und die Art der Zusatzinformation.
Um hier die Nummer des Fond zu erhalten, soll ein Zusatzfeld mit den Namen FONDS angelegt werden.
Dieses hat folgende Eigenschaften: Langtext und Überschrift haben beide Fonds erhalten. Die Formatangabe wurde über LIKE-Referenz idenitsch zum Feld AUFK-AUFNR gehalten. Damit entspricht dieses Feld den Formatangaben in der Tabelle AUFK (Typ C (Character) Länge 012 Ausgabenlänge 012). Damit ist das Feld angelegt, hat jedoch nur eine Datendefinition aber noch keine eigene Daten, da hier ja keine Selektion hinterlegt ist.
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. Dieses Coding entspricht auch den ABAP Code, den ich von einen Kollegen zur Verfügung gestellt bekommen habe. Das Coding für das Feld FONDS sieht dabei wie folgt aus (wobei statt KRK natürlich Ihr Kostenrechnungskreis im Coding hinterlegt sein sollte):
Auch diese Query geht davon aus, dass die Nummer des Innenauftrages und des Fonds identisch sind.DATA: l_fincode1 TYPE FMFINCODE-FINCODE.
DATA: l_aufnr TYPE aufk-aufnr.
l_aufnr = 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. Somit sind die führenden Nullen entfernt
SHIFT l_aufnr BY 4 PLACES LEFT.
l_fincode1 = l_aufnr.
* Durch die Abfrage der Tabelle FINCODE wird die Nummer nur ausgegeben, wenn
* auch tatsächlich ein Fond angelegt ist.
SELECT SINGLE FINCODE FROM FMFINCODE INTO l_fincode1
WHERE fikrs = 'KRK'
AND FINCODE = l_fincode1.
IF sy-subrc <> 0.
CLEAR fonds.
ELSE.
fonds = l_fincode1.
ENDIF.
ACHTUNG: Länge der Auftragsnummer / Fondcode ist entscheidend!
Sollten die Auftragsnummern bspw. siebenstellig sind, ist hier natürlich mittels
das Coding entsprechend anzupassen.SHIFT l_aufnr BY 5 PLACES LEFT.
Per ABAP zwei Strings mit Leerzeichen verknüpfen
Nun haben wir also die Nummer des Fonds (sofern ein entsprechender Fond passend zum Innenauftrag angelegt worden ist im Feld FONDS angelegt. Dieses muss nun mit "FIK " verknüpft werden.Die Abap Anweisung
verkettet getrennte Zeichenfolgen zu einer Zeichenfolge. Hier wäre nun eine Verkettung des Finanzkreises 'FIK ' mit anschliessenden Leerzeichen und des Fonds denkbar. Allerdings werden Leerzeichen innerhalb der Strings ignoriert. Bei Werten des Typs C (Character) besteht aber die Möglichkeit diese Anweisung um den Parameter RESPECTING BLANKS zu erweitern. Dieses ist nur bei Zeichenketten auch Leerzeichen berücksichtigt werden. Ohne diesen Parameter werden Leerzeichen (Zeichen 32 im ASCII Code) einfach entfernt.CONCATENATE altenstring neuenstring INTO altenstring.
Zusatzfeld OBJNFOND aus Fond ableiten
(Finanzkreis und Fond verknüpfen entsprechend AUSP-OBJEK)
Entpsprechend wird ein weiteres Zusatzfeld angelegt. Dieses Feld erhält die Bezeichnung OBJNFOND und per LIKE die gleichen Eigenschaften wie das Feld AUSP-OBJEK.Darüberhinaus wird im Feld "Reihenfolge des Codeabschnittes" statt wie bisher automatisch eine 1 eine 2 eingetragen. Hierdurch wird das Coding zum Feld OBJFOND nach erfolgreicher Wertzuweisung für das Feld FONDS durchgeführt.
Nachdem ein Feld angelegt ist kann über die Schaltfläche "Coding zum Zusatz" ein passendes ABAP Coding für das Feld hinterlegt werden um das Zusatzfeld FONDS mit den Finanzkreis zu verknüpfen.
Hierzu ist folgende kurze Codezeile erforderlich:
Nun ist im Zusatzfeld OBJNFOND der entsprechende Fond entsprechend der Objektnummer im Tabellenfeld AUSP-OBJEK gespeichert.CONCATENATE 'FIK ' FONDS INTO OBJNFOND RESPECTING BLANKS.
Nun können die einzelnen Merkmale (bzw. deren Werte) als Zusatzfeld im Infoset angelegt werden. Als Selektionskriterium kann nun die Merkmalsnummer und die Klassenart verwandt werden.
Welche Merkmale sind vorhanden?
Die einzelnen Merkmale sind in der Tabelle CABN hinterlegt und werden über das Feld ATINN mit der Tabelle AUSP mit entsprechenden Inhalten verknüpft.Entsprechend ist es Möglich für jedes Merkmal ein eigenes Zusatzfeld anhand der Merkmalsnummer (ATINN) zu erstellen.Die entsprechenden Einzelmerkmale können hierbei bspw. mit der Transaktion SE16 und der Auswertung der Tabelle CABN betrachtet werden.
Eines dieser Merkmale könnte dann unter anderen das Merkmal FBINSTITUT für die Angabe des dem Fond zugeordneten Kürzel des Fachbereichs beziehungsweise das Kürzel eines zentralen Institutes oder EInrichtung sein. Alternativ könnte auch die betroffene Branche oder eine ausführlichere Zuordnung für die Bilanz sein (bspw. Unterscheidung nach Auftragsforschung, Dienstleistung, ...).
Merkmalswert aus Klassifizierung von Fonds auswerten
Für unser Beispiel nehmen wir an, dass das Merkmal Branche gepflegt ist und die Interne Merkmalsnummer (Feld ATINN) folgenden Wert hat 0000000001. Nun kann ein weiteres Zusatzfeld mit der Bezeichnung Branche angelegt werden.
Dieses erhält über die LIKE-Referenz die gleichen Eigenschaften wie das Tabellenfeld AUSP-ATWRT (hier ist der Merkmalswert gespeichert).
Beachten Sie, dass der Langtext später in der Query als Feldname genutzt wird und die Überschrift dann als Überschrift für die Spalte genutzt wird. Der technische Name steht dahingehend den Query-Erstellenden nicht zur Verfügung. Dennoch kann es sinnvoll sein den Langtext und den technischen Namen identisch zu halten, insbesondere wenn später noch Anpassungen erforderlich sein sollten.
Darüberhinaus wird im Feld Reihenfolge des Codeabschnitts 3 eingetragen, so dass als erstes das Feld FONDS danach OBJNFOND und abschließend die einzelnen Merkmalsfelder definiert werden können.
Das entsprechende Coding zum Feld würde dann wie folgt lauten:
Entsprechend kann auch für jedes weitere Merkmal verfahren werden.DATA: L_BRANCHE type AUSP-ATWRT.
SELECT SINGLE ATWRT INTO L_BRANCHE FROM AUSP
WHERE OBJEK = OBJNFOND AND ATINN ='0000000001' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR BRANCHE.
ELSE.
BRANCHE = L_BRANCHE.
ENDIF.
Hierbei muss jedoch darauf geachtet werden, dass jedes Feld einzeln mit der entsprechenden ATINN gepflegt werden muss.
Wie bereits erwähnt kann in der Tabelle CABN die ATINN für die einzelnen Merkmale entnommen werden. Es bietet sich daher an in einen zweiten Modus über die Transaktion SE16 sich die Merkmale aus der Tabelle CABN ausgeben zu lassen.
Nachdem alle Felder erfasst sind, können diese in einer entsprechenden Feldgruppe (bspw. PSM-FM Stammdaten) eingefügt werden und damit für eine Query verwendet werden.
Dieses kann einen entsprechend hohen Aufwand verursachen insbesondere dann wenn weitere Merkmale hinzukommen.
Zusatzfelder in Query verwenden
Nun stehen die einzelnen Zusatzfelder (oder Merkmale) als eigene Felder im Infoset zur Verfügung und können so in eine Query eingebunden werden. Da das gesamte Infoset jedoch als Basis die Tabelle AUFK hat und anhand der Innenaufträge eine Selektion der einzelnen Datensätze erfolgt ist es leider nicht möglich über die Merkmale der Klassifizierung eine entsprechende Abfrage zu erstellen. Hier müsste der umgekehrte Weg über die Tabelle AUSP und Verknüpfung FMFINCODE mit AUFK gegangen werden, was jedoch den Nachteil hat, dass reine CO-Innnenaufträge in einer Auswertung nicht mehr ausgewiesen wären.Query Stammdatenliste Innnenaufträge und verknüpfte Fonds sowie Merkmale aus Klassifizierung
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)
Das Feld Lehreinheit wurde dabei aus der verantwortlichen Kostenstelle des Innenauftrages abgeleitet (siehe Artikel "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer".
Nun können die einzelnen Merkmale der Klassifizierung als Listenfelder übernommen werden. Diese sind als Datenfelder unterhalb der Zusatzfelder zu finden und wurden wie beschrieben im Infoset definiert. Als Beispiel wären hier folgende Merkmale bzw. entsprechende Felder denkbar.
Zusatzfelder
Branche (L)
FB/Institut (L)
Geldgeber (L)
Dienstleistung (L)
Auftragsforschung (L)
UST-Pflicht (L)
VoKoR (L)
...
Das Zusatzfeld OBJNFOND muss nicht extra in der Grundliste der Query eingefügt werden, da darauf aus den einzelnen Merkmalen referenziert wird.
Insgesamt könnten damit wesentlich umfangreiche Stammdatenanforderungen aus SAP erfüllt werden. Im Gesamtergebnis kann hier nun aber eine Stammdatenliste zur Verfügung gestellt werden, die einzelne Daten aus den CO-Innenauftrag, Fond des Haushaltsmanagements (PSM-FM) und zusätzlich noch aus der Klassifizierung und das Sperrkennzeichen beinhaltet. Hierdurch ist eine mühsame Ausgabe über die Stammdatenliste der Innenaufträge (Transaktion KOK5), der Klassensuche (Transaktion CL30N) oder der alphabetischen Liste der Fonds (Transaktion S_KI4_38000039) nicht mehr zwingend erforderlich. Zumal die Klassifizierung in der Hauptsache als weiteres Selektionskriterium für eine Stammdatenliste und einzelnen Aufruf der entsprechende Fonds oder direkt im Stammsatz des jeweiligen Kontierungsobjektes genutzt wurde.
Wie schon beschrieben ist es leider nur möglich die Klassifizierungsmerkmale als Listenfelder und nicht als Selektionsfelder zu verwenden. Dennoch können so auch tiefergehende Informationen zum einzelnen Objekt mit ausgegeben werden.
ACHTUNG: Sonderfall Inkonsistenz bei Merkmalspflege
Die nun erstellte Query verhält sich in Bezug auf einen Sachverhalt abweichend zum SAP System. Sofern in der Merkmalspflege (Transaktion CT04) bestimmte Merkmale fest hinterlegt sind (und nicht die Funktion zusätzliche Werte aktiviert wurde um ein Freitextfeld zu ermöglichen) kann es bei Änderung der Merkmale dazu kommen, dass in der Query ein ehemals gepflegter Merkmalswert ausgewertet wird, wohingehend in der Stammdatenklassifizierung das Merkmal ohne Wert angezeigt wird und statt dessen die Schaltfläche Inkonsistenzen (mit Warnglocke) angezeigt wird.Sofern man auf diese Schaltfläche drückt, wird der nicht mehr gültige Wert als Ladefehler beziehungsweise Wertekonflikt ausgegeben.Nehmen wir als Beisspiel das Merkmal BRANCHE. Bisher wurden viele Projekte der Branche IKT = Informations und Kommunikationstechnik zugeordnet. Künftig wird dieser Wert jedoch gelöscht und statt dessen die beiden Werte IT = Informationstechnik und KT = Kommunikationstechnik gepflegt.
Bei alten Projekten (Fonds) wird daher in der Transaktion FM5S beziehungsweise in der Klassifizierung ein Wertekonflikt ausgegeben und das Feld wird ohne Wert angezeigt, wohingehend in der Query noch der alte Wert IKT beim Projekt 40210001 ausgegeben wird, da dieser Fond in der Klassifizierung damals das zulässige Merkmal IKT zugewiesen bekam. Daher sollte beim Ändern der Werte eines Merkmals auch immer darauf geachtet werden, ob vorhandene Klassifizierungen ggf. angepasst werden sollten. Dieses sollte aber kein Problem der Query sondern des Stammdatenmanagement sein.
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"
Insbesondere was die Auswertung von PSM Stammdaten anbelangt (so eben auch Klasifizierung oder Finanzierungszweck) dürfte der Artikel "SAP Query innerhalb des SAP Moduls PSM FM beziehungsweise Haushaltsmanagement" noch eine Menge Potential beschreiben und teilweise auch eine etwas einfachere Variante anbieten.
NACHTRAG: Merkmale der Klassifizierung durch Zusatztabelle
Seit 2014 ist auch wieder ein wenig Zeit vergangen, so dass ich zwischenzeitlich ebenfalls eine Erleichterung bei der Auswertung der Merkmale der Klassifizierung 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" innerhabl des Abschnitt "Merkmal aus Klassifizierung mit auswerten" durch das Zusatzfeld ZAUFNR kann nciht nur FMFINCOE als Zusatztabelle eingebunden werden sondern auch die Verknüpfung zwischen Fond und Klassifizierungsmerkmale ist dank CONCATENATE wesentlich einfacher. Daher möchte ich ausdrücklich auch diese Methode empfehlen. ;-)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.
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.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
17:02 Uhr
Tabellen hinter Transaktionscode oder ABAP Programm über eine SAP Query ermitteln
Neben der Möglichkeit innerhalb eines Feldes über F1 und technische Informationen aus den einzelnen Felddaten Tabellennamen und Feldname zu ermitteln (oder alternativ im Coding nachzuschauen) oder über die Transaktion SE12 in den einzelnen Tabellen des SAP Systems zu suchen besteht auch die Möglichkeit über eine SAP Query die Tabellen D010TAB (Tabelle für Report<->Tabellen-Verwendung) und TSTC (SAP-Transaktions-Codes) innerhalb eines Joins zu verknüpfen und über den hinter der Transaktion liegenden ABAP Programm eine Auswertung die genutzten Tabellen zu ermitteln.
Diese Methode ist im Buch Praxishandbuch SAP Query Reporting von Stephan Kaleske beschrieben und ist hier um die Tabellenart (aus der Tabelle DD02L) sowie der Tabellenbezeichnung (aus der Tabelle DD02T) ergänzt worden.
Als Ergänzung oder mit einen anderen Schwerpunkt kann ich ferner noch das Buch von Martin Peto und Katrin Klewinghaus " Reporting im SAP-Finanzwesen: Standardberichte, SAP QuickViewer und SAP Query" und natürlich meine Einführung in das Thema SAP Query, welche weiter unten im Artikel verlinkt ist.
SAP Query zur Auswertung von Tabellen und Programm hinter SAP Transaktionscode
1. Infoset definieren
Zur Darstellung der gewünschten Daten müssen folgende Tabellen miteinander verknüpft werden:
- D010TAB - Tabelle für Report<->Tabellen-Verwendung
- TSTC - SAP-Transaktions-Codes
- DD02L - SAP-Tabellen
- DD02T - R/3-DD: Texte zu SAP-Tabellen
Folgende Felder werden hierbei miteinander verknüpft.
Verknüpfungen
Hierbei steht <--> für einen normalen Join und >LO< für einen left outer join.
D010TAB-MASTER <--> TSCT-PGMNA
D010TAB-TABNAME <--> DD02L-TABNAME
DD02L-TABNAME <--> DD02T
Schematisch ist hierbei folgendes Infoset geplant.
Die Felder der Tabellen D010TAB und TSTC werden komplett innerhalb der Feldgruppen übernommen. Aus der Tabelle DD02L wird nur das Feld Tabellenart (DD02L-TABCLASS) und aus der Tabelle DD02T die Felder Sprachenschlüssel (DD02T-DDLANGUAGE) und die Tabellenbezeichnung (DD2T-DDTEXT) übernommen. Hierbei werden die Feldgruppen analog der Tabellenbezeichnung angelegt
Der Sprachenschlüssel ist dabei erforderlich, da die Bezeichnungen von Tabellen mehrfach vorkommen je nachdem inwieweit unterschiedliche Sprachversionen gepflegt sind.
2.) Query definieren
Innerhalb der Query werden nun auf folgende Felder der einzelnen Tabellen Zugriff genommen bzw. in der Grundliste zugewiesen. Hierbei ist L als Listenfeld und S als Selektionsfeld zu verstehen.
Die Felder werden hier in der Reihenfolge angeben, wie diese dann auch in der Query ausgegeben werden sollen:
Tabelle für Report<->Tabellen-Verwendung
TCODE (L,S) TSTC-TCODE
Zusatzfelder (werden in der Grundliste zur Verfügung gestellt)
Text:Transaktionscode (L) TEXT_TSTC_TCODE
Tabelle für Report<->Tabellen-Verwendung
ABAP-Hauptprogramm (L,S) D010TAB-MASTER
Tabellenname (L,S) D010TAB-TABNAME
Zusatzfelder (werden in der Grundliste zur Verfügung gestellt)
Text:Tabellenart (L) TEXT_DD02L_TABCLASS
R/3-DD: Texte zu SAP-Tabellen
Kurzbeschreibung von Repository-Objekten (L) DD02T-DDTEXT
Sprachenschlüssel (S) DD02T-DDLANGUAGE
3. Query ausführen
Beim Ausführen der Query kann nun über den Transaktionscode, ein ABAP-Programm oder über den Tabellenname eine Liste mit allen Transaktionen oder Tabellen die mit der jeweiligen Selektion in Verbindung stehen ausgewertet werden.
Sofern eine Auswertung anhand von ABAP-Programmen ohne Transaktionszuordnung erfolgen soll besteht die Möglichkeit die Verknüpfung
D010TAB-MASTER mit TSTC-PGMNA als "left outer join" zu definieren. Entsprechend länger würde hier aber eine Auswertung dauern.
Als beispielhafte Anwendung der Query kann zum Beispiel die Transaktion KS03 (Kostenstelle anzeigen) mit dem Sprachenschlüssel "DE" ausgewertet werden und innerhalb der Query erkannt werden, dass in der "Transparente Tabelle" "CSKS - Kostenstellenstammsatz" die Kostenstellenstammdaten zu finden sind und hinter der Transaktion das ABAP Programm SAPLKMA1 liegt.
Diese Methode kann besonders dann sinnvoll sein, wenn umfangreiche Transaktionen oder ABAP Programme eine Vielzahl von Tabellen verwenden und ein schneller Überblick geschaffen werden soll.
Alternative: Trace über Datenbanknutzung (Transaktion ST05)
Sollte diese Vorgehensweise nicht weiter helfen besteht immer noch die Möglichkeit per Trace eine Auswertung der im Zugriff befindlichen Datenbanktabellen zu starten. Dieser Trace kann über die Transaktion ST05 gestartet werden. Im Artikel "SAP-Tabellen finden – eine minimalistische Anleitung" auf thinkdoforward.com ist dieses ebenso wie im Artikel "Transaktion ST05 (Performance Trace)" auf berater-wiki.de beschrieben. Dennoch nutze ich die beschriebene Query immer wieder gerne, da sie für eine Vielzahl von Transaktionen tatsächlich eine erste Antwort liefert und nicht ganz so umfangreich in der Handhabung wie ein Trace ist. Eine andere Frage ist hier tatsächlich der Einsatz von Trace im Berechtigungswesen. Wie im Artikel "SAP Basis Basic oder dank SU53 oder ST01 Trace fehlende Berechtigungen finden" beschrieben, möchte ich hier auf die Alternative genauer solche Fragen nachzugehen nicht verzichten. :-)Berichtswesen und SAP Query
SAP Query, Rechercheberichte, Report Painter sind noch immer Tools, die gerne von mir im Berichtswesen im SAP Controlling eingesetzt werden. Gerade für SAP Query ist die obige Auswertung hilfreich um zu einer Transaktion die dahinter liegenden Tabellen als ersten Ansatz für eigene Auswertungen nutzen zu können. Aber auch unabhängig davon stellen SAP Query, gerade im Controlling und der Finanzbuchhaltung eine praktische Möglichkeit dar um individelle Berichte erstellen zu können.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 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.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
15:01 Uhr
Anzeige verfügbarer Icons in ABAP
SHOWICON (im Paket SABP - ABAP Runtime Enviroment)
RSTXICON (im Paket STXD - SAP Script)
RLMON_ICONS_DISPLAY (im Paket LMON - Monitoring (Bestandteil von SCM)
lassen sich die verfügbaren SAP-Ikonen als Listen ausgeben.
Alternativ läßt sich auch per SE12 ICON auswerten.
Wer es noch einfacher möchte kann über die Transaktion ICON sich die Liste ausgeben.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
11:48 Uhr
ABAP Dokumentation und Beispiele
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt
16:18 Uhr
Spoolauftrag per ABAP Report in PDF
RSTXPDFT4
* Read spool job contents (OTF or ABAP list) and convert
* to PDF, download PDF
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
07:45 Uhr
ABAPForum / Sap Foren
Weitere Onlineforen zum Bereich SAP:
yaAbb (yet another ABAP bulletin board)
dv-treff-community.de (SAP Communityf)
openbc: SAP (Einladung incl. Premiummonat)
Microsoft Office 365 Abo verlängern
Microsoft Office 365 Home
Microsoft Office 365 Business Premium
Microsoft Office Produkte - Jahreslizenz und Dauerlizenzen
* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
10:17 Uhr
ABAP Schulungsdaten.
Report "SAPBC_TOOLS_GENERATOR_NEW"
bzw. "SAPBC_DATA_GENERATOR"
erstellen.
Literaturempfehlungen zu ABAP:
ABAP-Referenz
von Horst Keller
bei Amazon bestellen.
ABAP Objects - Einführung in die SAP-Programmierung
von Horst Keller, Sascha Krüger
Auf den beigefügten CDs liegt auch eine SAP Testumgebung bei.
bei Amazon bestellen.
Als PDF Schulung hat SAP folgende Dokumente für SAP R/3 4.6b vorliegen:
ABAP als OLE-Automation-Controller
BC - ABAP Dictionary
BC - ABAP Programmierung
BC - ABAP Reporting Tutorial
BC - ABAP Workbench Tutorial
BC - ABAP Workbench: Werkzeuge
RFC-Programmierung in ABAP
Diese sind als PDF auf help.sap.com (direkter Link) zu finden. Mittlerweile sind die zum Stand 4.6b erstellten Unterlagen nicht mehr auf der Seite der SAP verfügbar. Durch die Firma Consolut werden diese als Mirror jedoch weiterhin unter "SAP Online Help PDFs" zur Verfügung gestellt.
Verschiedene Möglichkeiten für einen IDES Zugang sind
im Artikel "IDES Hosting durch Consolut - kein öffentliches IDES System aus lizenzrechtlichen Gründen" innerhalb des Abschnitts "Alternative Möglichkeiten für einen IDES Zugang" vorgestellt worden :-)
Hinweis:
Als Amazon-Partner verdiene ich an qualifizierten Käufen.
Steuersoftware für das Steuerjahr 2023
Lexware TAXMAN 2024 (für das Steuerjahr 2023)
WISO steuer:Sparbuch 2024 (für Steuerjahr 2023)
WISO Steuer 2024 (für Steuerjahr 2023)
* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
Keine Kommentare - Permalink - SAP