Andreas Unkelbach
Logo Andreas-Unkelbach.de

Artikel zum Stichwort ABAP

Alle folgende Artikel sind unter den angegeben Stichwort (TAG) einsortiert. Sollte der gesuchte Artikel nicht dabei sein kann hier auch die Artikelsuche weiter helfen.

Oft sind aber auch die aktuellen Artikel in der jeweiligen Kategorie im Menü interessant.
Espresso Tutorial - die digitale SAP Bibliothek

SAP Fachliteratur ist unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.



Montag, 24. Juli 2017
21:28 Uhr

Grundlagen SAP Query Variablen über Selektionsfelder mit Werten füllen Eingabe auf Selektionsbild oder Abgrenzungsparameter

Manchmal kann es hilfreich sein im Selektionsbild einer Query einen Wer zu übergeben um mit diesen dann innerhalb der Query zu arbeiten.

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 Abgrenzung

Hierzu 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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Samstag, 27. Mai 2017
17:44 Uhr

Query zur Auswertung von Klassifizierungsmerkmale PSM Fonds zu CO Innenauftrag und Datumsfelder mit Konvertierung von FLOAT zu DATUM

Das Thema Klassifizierung scheint etwas zu sein, dass gerade im Modul PSM-FM (Public Sector Management - Funds Management / Haushaltsmanagement) zur Erweiterung von Stammdaten genutzt werden kann und von mir in den Grundlagen im Artikel "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM" inklusive eines kurzen Exkurs zum Anlegen von Klassen und Merkmalen beziehungsweise allgemein zum Thema Klassifizierung beschrieben worden ist.

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:

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).

Damit kann durch Zuweisung eines Zahlenwertes die Position ab der die Projektnummer gespeichert ist direkt ermittelt werden.

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
Datum als Float
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.

Das lokale Feld JAHR hat nun die Eigenschaften Textfeld mit vier Zeichen und folgende Berechnungsvorschrift:
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
Felder zum Auswertung AUSP-ATFLV
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
Query zur Auswertung ATFLV1 aus FLOW wird DATE
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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Samstag, 13. Mai 2017
21:38 Uhr

Neue Wertgrenze für Investitionen bei Finanzstatistik oder Abfrageparameter in SAP Query zur Übernahme von Werten aus Selektionsbild

Neben der Verwendung von Zusatzfeldern in SAP Query besteht auch die Möglichkeit über Abgrenzungen einen Parameter anzulegen und hierdurch mit einen übergegeben Wert in einer Query zu arbeiten. Um die Vorzüge dieser Methode zu geben möchte ich vorab die Ausgangslage zu beschreiben die hier eine Notwendigkeit für die Übergabe eines Wertes und Arbeiten mit eben diesen Wert erforderlich gemacht hat. Das einfachste Beispiel wäre nun wohl die Angabe eines Stundenlohnes für eine bestimmte Personengruppe zu übergeben um bei einer Summentabelle über Kostenarten für diese Beschäftigtengruppe die hinter den Personalkosten liegenden Stunden festzulegen. Allerdings möchte ich als Beispiel ein etwas umfangreicheres Thema aus der Auswertung von Investitionen zu verwenden.

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)
zu finden. Für einen Jahresbericht ist es allerdings erforderlich passend zu  einzelnen Fächergruppen (um beim Beispiel der Hochschulfinanzstatistik zu bleiben) die einzelnen Kontengruppen (SYF Codes) auszuwerten. Entsprechend ist hier eine Umbuchung zwischen den einzelnen Konten erforderlich.

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
In die Feldliste der Query. Sofern noch nicht geschehen werden wir im Menü unter
  • BEARBEITEN
  • KURZBEZEICHNUNGEN
  • Ein/ausschalten
wählen.

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
Somit können wir nun mit diesen Feldern in der Query direkt arbeiten.

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
möglich.

1. Lokales Feld SYF (Wertgrenze)

Das erste Feld erhält die Bezeichnung Kurzbezeichnung SYF und folgende Eigenschaften
Feldbezeichnung / Ü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 / Überschrift
CHK 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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Dienstag, 4. April 2017
18:48 Uhr

MS Word als Editor für Langtexte bei CO Innenauftrag und Kostenstelle sowie SAP Script und Smart Forms festlegen

In der Stammdatenpflege von CO Innenauftrag (Transaktion KO02), Kostenstelle (Transaktion KS02) oder auch bei Kostenarten (Transaktion KA02) besteht die Möglichkeit neben einer Beschreibung auch für die einzelnen Beschreibungen einen Langtext zu pflegen.

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
auf einen Zeileneditor wechseln. Dieser Punkt ist noch immer möglich, jedoch wird nun statt eines SAP Editor ein in SAP eingebundenes MS Word (Winword) eingebunden mit reduzierten Schaltflächen in dem die Texte bearbeitet werden können.

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
festgelegt werden kann, dass hier MS Word als Editor verwendet werden soll.

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 :-)

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Montag, 13. Februar 2017
20:22 Uhr

Analyse und Abgleich Einzelposten und Summensätze im Haushaltsmanagement PSM-FM am Beispiel Abweichung Reisekostenobligo

Im Rahmen der Jahresabschlussarbeiten wird sich auch immer das Obligo auf einzelne Projekten betrachtet. Nun waren auf einigen Fonds und Finanzstellen innerhalb eines Rechercheberichtes, wie im Artikel "PSM Recherchebericht mit Jahresabgrenzung" beschrieben, noch einige Obligos vorhanden, obgleich diese im Belegjournal eigentlich alle erledigt sind und somit vollständig abgebaut.

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
können verschiedene Abstimmungen zu anderen Komponenten (bspw. zu FI Belegen oder zu Bestellungen aus MM) aber auch innerhalb des Modul Haushaltsmanagement durchgeführt werden.

Diese sind im Ordner Analysen an folgender Stelle zu finden:
  • Obligo und Ist
  • Abgleich
  • Innerhalb Haushaltsmanagement
  • Summensätze zu Einzelposten
beziehungsweise über die Transaktion S_ALR_87012636 ausgeführt werden. Hier können je Geschäftsjahr (auch eingeschränkt nach einzelnen Finanzstellen, Fonds oder auch Werttyp und Periode) die Summen der Einzelposten mit den Jahreswerten abgeglichen werden.

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_8701263 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.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Samstag, 22. Oktober 2016
15:09 Uhr

Drittmittelstatistik nach LOMZ über Recherchebericht und SAP Query

Einer der Vorteile bei der Erstellung einer Drittmittelstatistik auf Basis einer leistungsorientierten Mittelzuweisung (LOMZ) Definition von einzelnen Drittmittelgebern über einen Recherchebericht (siehe "Saldenliste für Fonds im Haushaltsmanagement Saldo gegen Ertrag und Saldo gegen Budget") ist dass hier der Finanzierungszweck ergänzend zu den einzelnen Finanzpositionen (zum Beispiel über alle innerhalb der Hierarchie der Finanzpositionen der Finanzposition ERTRAEGE zugeordneten Finanzpositionen) als einzelnen Spalten definiert werden können. Auf diese Weise können alle Erträge vom Bund (einzelnen Finanzierungszwecke) kombiniert mit den Einnahmen ausgewiesen werden.

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)
Verlag: Espresso Tutorials GmbH

1. Auflage (01. November 2014)

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:

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.

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:
 

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.

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).
 

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.
 

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Dienstag, 23. August 2016
17:55 Uhr

Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel

Neben der Nutzung des Finanzierungszwecks im SAP Modul PSM-FM der entsprechende Fonds zusammenfasst (siehe hierzu Artikel "PSM-FM Grundlagen Finanzierungszweck im Haushaltsmanagement bei Recherchebericht und Selektion") wird im SAP Modul CO ein sprechender Schlüssel für CO Innenaufträge verwendet um hier anhand eines Zahlenintervalls eine Zuordnung zu bestimmten "Projektbereichen" zuzuordnen.

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:

DATA: L_Innenauftrag TYPE C LENGTH 8.
WRITE AUFK-AUFNR TO L_INNENAUFTRAG NO-ZERO .

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.

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 Coding

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.

Im 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.

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.

IF 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.

Die Abap Anweisung

    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.
 
Schnelleinstieg ins SAP-Controlling (CO)
Verlag: Espresso Tutorials GmbH
1. Auflage (01. November 2014)
Paperback ISBN: 9783960126874

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Sonntag, 3. Juli 2016
14:56 Uhr

Gruppierung von Finanzierungszwecken bei Drittmittelprojekten per Zusatzfeldcoding mit IF oder CASE

Gerade beim Coding von Zusatzfeldern werden Variablen oftmals auch auf ihren Inhalt hin überprüft. Hier bieten sich, wie auch in anderen Skriptsprachen, Bedingen (oder Verzweigungen) an, wie zum Beispiel IF oder CASE Statements im ABAP Coding. Anhand von Gruppierungen des Finanzierungszweck eines Haushaltsfonde (Drittmittelprojekt) soll dieses hier dargestellt werden.

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
gepflegt werden über Anlegen (Transaktion FM5I), Ändern (Transaktion FM6U) oder Anzeigen (Transaktion FM6S).

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:

CASE variable.
WHEN bedingung1 OR bedingung2 .
..
Ausgelöste Aktion
..
WHEN bedingung9 OR bedingung10.
..
Ausgelöste Aktion
...
WHEN OTHERS.
..
Kein Fall tritt ein
..
ENDCASE.

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.

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:

  1. "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"
  2. "Query Einzelpostenliste Innenauftrag mit Ausweis Ertrag und Aufwand Zweiter Teil Query zur Datenaufbereitung"
Oder aber auf:
  1. "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen"
  2. "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer"
  3. "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM"
  4. "Weitere Zusatzfelder im Infoset mit ABAP Coding zur Verwendung in SAP Query über die Tabellen AUFK und FMFINCODE"
Je nach beabsichtigten Berichtszweck dürfen hier auch weitere Mögichkeiten vorahnden sein.
 

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Sonntag, 20. März 2016
21:34 Uhr

Stammdatenerweiterung von CO-Objekten am Beispiel ergänzende Kostenstelle beim Innenauftrag

Ausgangslage:
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 möglich.

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)
Wie beschrieben war das Ausgangsproblem für das Thema kundeneigene Felder die Anfrage, ob eine zweite Kostenstelle ergänzend zur verantwortlichen Kostenstelle des CO Innenauftrages hinterlegt werden kann.Hier bietet sich dann die "anfordernde Kostenstelle" als Feld an.

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.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 28. August 2015
17:07 Uhr

Syntaxhevorhebung im ABAP Editor durch neuen Frontend Editor (Quelltext-Modus)

Während einer von mir angebotenen internen Schulung zu SAP Query (Basis der Schulung war auch die am Ende dieses Artikel verlinkte Einführung ins Thema)  war ich erstaunt über die unterschiedliche Darstellung der Oberfläche zur Erfassung von ABAP Coding bei den Zusatzfeldern, so wie diese zum Beispiel im Artikel "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen" beschrieben wurden.

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:
Front-End Editor Alt
Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *

Eine wesentlich moderne Form der Darstellung war dann wie folgt zu sehen.

Frontend Editor neu
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.

ABAP Editor - Editor - Frontend Editor (neu)
Screenshot © Copyright 2015. SAP SE. Alle Rechte vorbehalten *

Alternativ besteht, wie erwähnt die Auswahl zwischen Quellcode und Text basierter Editor (siehe Abbildung).

ABAP Editor - Editor - Quellcode-basierter Editor
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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 19. Dezember 2014
15:00 Uhr

Weitere Zusatzfelder im Infoset mit ABAP Coding zur Verwendung in SAP Query über die Tabellen AUFK und FMFINCODE

Bisher wurden schon einige Stammdaten der CO Innenaufträge und der PSM-FM Fonds miteinander in Verbindung gesetzt. Bei der Definition der Variablen innerhalb des ABAP Coding ist dabei darauf zu achten, dass diese innerhalb der Zusatzfelder auch entsprechend bei den einzelnen Variablen nicht mehrfach ausgewertet werden. Daher habe ich im Folgenden noch einmal die einzelnen schon im Artikel "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck" erwähnten Zusatzfelder an dieser Stelle noch einmal aufgeführt und im Coding ein wenig angepasst.

Das grundsätzliche Infoset zur Auswertung von Innenaufträgen ist in folgender Darstellung bereits im entsprechenden Artikel erläutert.

Infoset Verknüpfung AUFK und CSKS bzw. CEPC zur Darstellung Innenauftrag, verantwortliche Kostenstelle und Profit-Center
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:

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.

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.

OBJNFOND   like  AUSP-OBJEK

CONCATENATE  'FIK ' FONDS INTO OBJNFOND RESPECTING BLANKS.

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.

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.
  1. "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen"
  2. "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer"
  3. "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM"
  4. "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. Ein tatsächlich umfangreiches Beispiel ist in der Artikelserie unter "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" zu finden.


 

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 12. Dezember 2014
14:21 Uhr

SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM

Neben den einzelnen Stammdaten besteht auch die Möglichkeit weitere Informationen zu einen Objekt im Wege der Klassifizierung anzulegen um hier über die reinen Stammdaten hinaus noch weitere Informationen zu einzelnen Kontierungsobjekten zu hinterlegen.
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
Darstellung Infoset über die Tabellen AUFK, FMFINCODE sowie Zusatztabellen



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):

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.

Auch diese Query geht davon aus, dass die Nummer des Innenauftrages und des Fonds identisch sind.

ACHTUNG: Länge der Auftragsnummer / Fondcode ist entscheidend!

Sollten die Auftragsnummern bspw. siebenstellig sind, ist hier natürlich mittels

SHIFT l_aufnr BY 5 PLACES LEFT.

das Coding entsprechend anzupassen.

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

CONCATENATE altenstring neuenstring INTO altenstring.

 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.

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:

CONCATENATE  'FIK ' FONDS INTO OBJNFOND RESPECTING BLANKS.

Nun ist im Zusatzfeld OBJNFOND der entsprechende Fond entsprechend der Objektnummer im Tabellenfeld AUSP-OBJEK gespeichert.

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:

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.

Entsprechend kann auch für jedes weitere Merkmal verfahren werden.
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.
  1. "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen"
  2. "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer"
  3. "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM"
  4. "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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Montag, 3. November 2014
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

Ausgangslage:
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:

Darstellung JOIN über AUFK und CO Stammdaten


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.
  1. "SAP Query ABAP Coding im Zusatzfeld für Verknüpfung Innenauftrag und Fond bzw. Finanzierungszweck oder auch Status GESPERRT bei Innenaufträgen"
  2. "Query über verantwortliche Kostenstelle des Innenauftrag - Bestimmung der Lehreinheit im Fachbereich durch Teil der Kostenstellennummer"
  3. "SAP Query - Auswertung Merkmale der Klassifizierung am Beispiel Fonds in PSM-FM"
  4. "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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 14. Juni 2013
17:02 Uhr

Tabellen hinter Transaktionscode oder ABAP Programm über eine SAP Query ermitteln

Ausgangslage

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.

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.

Join über T010TAB, TSTC, DD02L und DD02T

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.
 

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Montag, 4. September 2006
15:01 Uhr

Anzeige verfügbarer Icons in ABAP

Durch die Reports (Transaktion SE38)

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.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 18. August 2006
11:48 Uhr

ABAP Dokumentation und Beispiele

Über die Transaktion ABAPDOCU können Beispiele und eine Dokumentation zu ABAP innerhalb eines SAP Systems aufgerufen werden. Dieses funktioniert auch innerhalb MINISAP.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Mittwoch, 26. Juli 2006
16:18 Uhr

Spoolauftrag per ABAP Report in PDF

ABAP Report über SE38:

RSTXPDFT4

* Read spool job contents (OTF or ABAP list) and convert
* to PDF, download PDF

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 21. Juli 2006
07:45 Uhr

ABAPForum / Sap Foren

Das Abapforum.de ist wieder online verfügbar. Als Betreiber tritt nun das SAP Beratungshaus Apentia auf.

Weitere Onlineforen zum Bereich SAP:
yaAbb (yet another ABAP bulletin board)
dv-treff-community.de (SAP Communityf)
openbc: SAP (Einladung incl. Premiummonat)

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Mittwoch, 23. Februar 2005
10:17 Uhr

ABAP Schulungsdaten.

Die Flugdaten aus den ABAP Schulungen der SAP lassen sich mit folgenden

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: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Hinauf




Werbung


© 2004 - 2017 Andreas Unkelbach
Andreas Unkelbach

Stichwortverzeichnis
(Tagcloud)


Aktuelle Infos (Abo)

Facebook Twitter Google+

»Schnelleinstieg ins SAP Controlling (CO)« und »Berichtswesen im SAP ® ERP Controlling«
Privates

Kaffeekasse 📖 Wunschliste