Andreas Unkelbach
Werbung


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


Montag, 24. April 2017
18:48 Uhr

Grundlagen: Selektionstext für Selektionsfelder bei SAP Query ändern

Im Rahmen der in den Artikeln "Query Abrechnungsvorschriften Innenauftrag" und "Abrechnungsvorschriften von Innenaufträgen auf identische verantwortliche Kostenstelle und empfangende Kostenstelle per Query mit Ampelfunktion prüfen" vorgestellten Query zur Auswertung der Abrechnungsvorschriften von CO Innenaufträgen wurde anfangs nur die Auftragsnummer und die Planversion als Selektionsmerkmale definiert.

Zur Erinnerung Query und Infoset zur Abrechnungsvorschrift:

Um die Abrechnungsvorschriften mit einer Query auszuwerten werden die beiden Tabellen AUFK für die Auftragsstammdaten und COBRB - "Aufteilungsregeln Abrechnungsvorschrift Auftragsabrechnung" über das Feld OBJNR Objektnummer miteinander verknüpft.

Exkurs Objektnummer oder Partnerobjektnummer

Die Objektnummer ist auch schon im Artikel "SAP Query: Einzelpostenliste KAMV für Umbuchung in Planversion" näher beschrieben worden. Hierbei werden Kostenstellen mit führenden KS* und Innenaufträge mit OR* abgebildet. Um nun aus den beiden Objekten Kostenstelle oder Innenauftrag als Nummer und die Art des CO Objektes auszuwerten muss dieser String in einzelne Bestandteile aufgeteilt werden.

Hierzu kann im ersten Schritt zum Beispiel über das lokale Feld KTRA in einer Query bestimmt werden ob es sich um eine Kostenstelle oder einen Innenauftrag handelt und in den Feldern KTR_IA beziehungsweise KTR_KS fallweise dann die Nummer der Kostenstelle bzw. der Innenaufträge ausgegeben werden.

Dies Methode ist im Artikel "Query Einzelpostenliste IST über CO Objekte (Auflösen von Innenauftrag, Kostenstelle) sowie Benutzerstammdaten und Erfassungsdatum" ausführlich beschrieben worden und sei hier nur der Vollständigkeit noch einmal erwähnt.

Die Grundliste der Query zur Auswertung der Abrechnungsvorschriften sieht derzeit wie folgt aus:

Auftragsstammdaten AUFK
Auftragsnummer (L,S) AUFK-AUFNR
Kurztext (L) AUFK-KTEXT

Aufteilungsregeln Abrechnungsvorschrift Auftragsabrechnung COBRB
Version (L,S) COBRB-VERSN
Kontierungstyp (L) COBRB-KONTY
Empfangende Kostenstelle (L) COBRB-KOSTL
Auftragsnummer (L) COBRB-AUFNR
Abrechnungsart (L) COBRB-PERBZ
Ursprungszuordnung (L) COBRB-URZUO
Gültig ab Periode (L) COBRB-GABPE
Gültig ab Jahr (L) COBRB-GABJA
Gültig bis Periode (L) COBRB-GBISP
Gültig bis Jahr (L) COBRB-GBISJ

Nun können als Empfänger die beiden Felder
  • Empfangende Kostenstelle (L) COBRB-KOSTL
  • Auftragsnummer (L) COBRB-AUFNR
in einer Abrechnungsvorschrift gepflegt werden und werden entsprechend mit in der Liste ausgegeben.

Senderauftrag und Empfängerauftrag in der Selektion zur Auswertung eintragen

Für bestimmte Fragestellungen kann es jedoch interessant sein, welche Innenaufträge auf eine bestimmte Kostenstelle oder auf einen bestimmte Innenauftrag abgerechnet worden sind. Ein Beispiel wäre wenn mehrere Innenaufträge auf einen Sammelauftrag Vollkostenprojekte, Weiterbildung, Vermietung und Verpachtung oder auch Erlösaufträge für einzelne Fachbereiche oder andere vergleichbare CO Objekte abgerechnet werden um später dann nur eine Erlösumlage nur über diese Erlösaufträge durchzuführen.

Daher werden beide Felder ebenfalls als Selektionsfelder in der Grundliste aktiviert.

Leider haben sowohl das Tabellenfeld COBRB-AUFNR als auch AUFK-AUFNR die Bezeichnung Auftragsnummer, so dass in der Selektionsmaske der Query an zwei Stellen ein Feld Auftragsnummer einen entsprechenden Wert erwartet.

Dabei ist das Feld COBRB-AUFNR als Empfänger und AUFK-AUFNR als Sender gedacht.

Hier bietet es sich daher an in der Pflege der Query im Bild Selektionen (dieses ist über die Transaktion SQ01 in der Pflege der Transaktion über SPRINGEN > FELDAUSWAHL > SELEKTIONEN zu erreichen. Den Selektionstext des zweiten Feld Auftragsnummer in empfangende Auftragsnummer analog zur empfangenden Kostenstelle umzubenennen.

Auf diese Weise kann sowohl von Seiten der Sender als auch Empfänger eine Stammdatenauswertung erfolgen.
 

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, 22. April 2017
09:29 Uhr

Grundlagen: Abschnitte in Report Painter und Report Writer und ihre Vorteile bei Officeintegration und Excel

Eine der von mir lange Zeit unterschätzte Funktionen im Report Painter ist das Thema Abschnitte. Um die Vorzüge in diesen Artikel kurz darzustellen möchte ich ein kurzes Beispiel aus einer Anfrage eines Kollegen beschreiben.

Hier sollen sowohl für Kostenstellen als auch für Innenaufträge für einige Kostenartengruppe eine Liste erstellt werden in der dann die Salden je Kostenstelle oder Innenauftrag aufgelistet werden. Eine sehr umfangreiche Variante habe ich unter "Erweiterung Bibliothek 8A2 Ausweis Kostenstelle und Innenauftrag bei Selektion Profit-Center in ReportWriter" beschrieben und gerade beim dynamischen Mehrjahres- oder auch Quartalsvergleich (siehe auch "Mehrjahresvergleich im ReportWriter/Painter mit variabler Spaltenanzahl je Jahr dank Variablen") kann dieses eine sehr spannende Berichtsoption sein.

Für dieses Beispiel soll aber ein einfacher Bericht als Liste der Salden je Kostenstelle und Innenauftrag gestaltet werden.

Die Grundlagen zur Erstellung eines Berichtes sind unter "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" dargestellt, so dass ich hier nur auf die zugeordneten Merkmale unter
  1. Spalten
  2. Zeile
  3. Allgemeine Selektionen
eingehe.

Der folgende Bericht wird über die Transaktion GRR1 in der Bibliothek 6O1 Innenaufträge angelegt, da hier sowohl Kostenstellen als auch Innenaufträge ausgewertet werden können, was nachher noch relevant wird.

Spalte: Merkmal Kosten

Als Spalten werden die Istkosten (oder Erlöse) für einzelne Kostenartengruppen ausgewertet. Hierzu wird als Basiskennzahl KOSTEN ausgewählt und folgende Merkmale je Spalte eingetragen.
 
Zugeordnetes Merkmal Eingetragene Werte
Merkmal Kosten für Spalten
Bewertung 0
Legale Bewertung
Werttyp 4
Ist
Version 0
Plan/Ist - Version
Kostenart Hier wird die Option SET gewählt um eine entsprechende Gruppe
zu hinterlegen. Als Beispiel hier die Gruppe IKR-5 für Erlöse oder IKR-6 für Kosten

Dieses kann dann für mehrere Kostenartengruppen erfolgen.Natürlich können auch Planwerte durch eine Variable für die Version und Werttyp 1 Plan gesetzt werden. So ist auch ein einfacher Plan/Ist Vergleich möglich.

Allgemeine Selektion

Unter BEARBEITEN->ALLGEMEINE SELEKTION werden dann die übergreifenden Merkmale hinterlegt. Kleiner Hinweis vorab, da jedes Merkmal nur einmal zugeordnet werden kann (entweder allgemeine Selektion, Spalte oder Zeile) gilt dieses dann auch für die kommenden Abschnitte. Hier habe ich im Beispiel folgende Merkmale hinterlegt:
 
Zugeordnetes Merkmal Einegtragene Werte
Merkmale für Allgemeine Selektion
KostRechKreis Variable
Geschäftsjahr von und bis als Variable
Periode von und bis als Variable

Durch die Verwendung von Variablen kann dieser Bericht auch für andere Einrichtungen (Kostenrechnungskreise verwendet werden und für unterschiedliche Auswertungszeiträume verwendet werden.

Über BEARBEITEN->VARIATION kann das Geschäftsjahr durch die Option Einzelwert auch in der Navigation des späteren Berichtes als Variation gesetzt werden, so dass hier zwischen den selektierten Jahren hin und her geschaltet werden.

Zeile Kostenstelle oder Innenauftrag

Nun kommt aber der interessante Part.
Als Zeile können wir hier das Merkmal INNENAUFTRAG hinterlegen und dieses ebenfalls als GRUPPE und VARIABLE markieren und eine entsprechnede Variable auswählen.

Ferner ist weiter hinten die Option AUFLÖSEN interessant. Als Option stehen hier Nicht expandieren, Expandieren oder Nur Einzelwerte zur Verfügung.

Sofern eine Auftragsgruppe ausgewertet wird, würde hier diese bei Nicht Expandieren als Summe, bei Expandieren mit Zwischensummen je Untergruppe und bei Einzelwerte die der Gruppe zugeordneten Innenaufträge als Einzelwerteliste aufgelistet werden. Da wir später eine Liste mit Aufträgen haben wollen ist dieses die Option unserer Wahl.

Exkurs: Spezielle Zellendefinition

Ebenfalls bei Summen bzw. der Kombination von Zeile und Spalte ist die Option per Doppelklick einen Wert als SPEZIELLE ZELLENDEFINIITON zu markieren. Auf diese Weise kann später bei Formeln mit der Kombination aus ZEILE und SPALTE gerechnet werden. Ein Beispiel wären hier alle Personalkosten für alle Kostenstellen eines Betriebes als Divsor zur Ermittlung eines Gemeinkostenzuschlagsatzes :-)


Damit haben wir nun also einen Bericht über Kostenartengruppen und Innenaufträgen.

Über BEARBEITEN->ABSCHNITT->NEUER ABSCHNITT können einzelne Abschnitte in einen Bericht eingefügt werden. Bei aktivierter Excel-Integration werden die einzelnen Abschnitte als individuelle Tabellenblätter dargestellt Das Thema Excelintegration ist auch im Artikel "Grundlagen - Berichte von SAP nach Excel exportieren" beschrieben.

Wobei der Tabellenblattname der Bezeichnung des Berichtes entspricht.

Durch die Option "Abschnitt mit Merkmalen und Kennzahlen" kann nun ein weiteres Berichtsblatt erstellt werden. Dabei werden die ALLGEMEINE SELEKTIONEN vererbet es besteht aber die Möglichkeit die oberen Spalten ebenfalls einzufügen und als Zeile dann Kostenstelle als Einzelwerte mit auszugeben.

Im Ergebnis können die Abschnitte dann nach Excel exportiert werden und die Liste an anderer Stelle verarbeitet werden.Hier kann es sinnvoll sein statt Schlüssel und Wert (bspw. Innnenauftragsnummer und Kurztext bzw. Kostenstelle und Kostenstellenbezeichnung) im Berichtslayout die Schlüsselspalte so einzustellen, dass nur der Schlüssel (Kostenstelle, Innenauftragsnumemr) angezeigt wird. Hierdurch können die Daten bspw. in einer Datenbank oder einen externen Tool leichter an die Verantwortlichen der jeweiligen CO Objekte versandt werden.

Auf diese Weise kann in einen Bericht mit mehreren Abschnitten sowohl die Auswertung der Kostenstellen als auch Innenaufträge erfolgen ohne dass ein zweiter Bericht angelegt werden muss.

 

Hinweis:

Eine kurze Einführung in das Thema Report Painter und Report Writer habe ich im Artikel "Grundlagen Kurzeinführung und Handbuch Report Painter Report Writer" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.




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, 8. April 2017
14:32 Uhr

Anzahl Belege Kreditor je Fachbereich oder Abteilung anhand Kostenstelle oder verantwortliche Kostenstelle CO Innenauftrag

Manchmal erweist sich mein Blog tatsächlich auch für mich selbst als "Wissenspool" auf den ich selbst sehr gerne zurück greife um bestimmte Anforderungen direkt erfüllen zu können.

So kam nun die Frage auf, ob es nicht möglich wäre für alle Kostenstellenbereiche (im Hochschulbereich würden hier bspw. Fachbereiche oder auch Abteilungen in Frage) die Anzahl an Rechnungen (Einzelposten Kreditorenrechnungen) auszuwerten.

Kreditoren Einzelposten Liste im Modul FI

Wie schon im Artikel "Auswertung Kreditoren Einzelposten inklusive CO Objekte wie Kostenstelle oder Innenauftrag" sind bei einer Auswertung der Nebenbuchhaltung im Kreditorenbereich in der Kreditoren-Einzelposten Liste zu finden unter:
  • Rechnungswesen
  • Finanzwesen
  • Kreditoren
  • Infosystem
  • Kreditoren Posten
  • Kreditoren Einzelposten Liste ( Transaktion S_ALR_87012103)
zwar die FI Belegdaten (Kreditorenbeleg und Zahlungsbeleg) und damit die beiden Bücher Kreditorenbuchhaltung und Hauptbuchhaltung angezeigt jedoch sind auf beiden Belegen nicht die CO-Objekte des Kostenrechnungsbeleges zu finden.

Query mit CO-Objekten Kostenstelle und Innenauftrag aus der Profit-Center-Rechnung

Entsprechend haben wir hier eine entsprechende Query angelegt, die im Rahmen der Profit-Center-Rechnung eine passende Auswertung bastelt.

Das entsprechende Infoset ist in folgender Abbildung dargestellt:

Infoset Tabellen GLPCA, BSAS, LFA1, BSAK und SKAT

Das Infoset verknüpft dabei die Tabellen GLPCA, BSAS, LFA1, BSAK und SKAT und kann sowohl die Felder  CO Innenauftrag und Kostenstelle ausgewiesen.

Anhand der Kostenstelle kann, dank eines sprechenden Kostenstellenschlüssel innerhalb eines bestimmten Intervalls der Bereich (Abteilung oder Fachbereich) anhand der ersten Ziffern der Kostenstellen (bspw. die zweite und dritte Ziffer einer Kostenstelle) identifiziert werden.
 

Aus Kostenstellenschlüssel den Fachbereich oder Abteilung auslesen

Im Rahmen des Artikel "Query Stammdatenvergleich Profit-Center und Auslesen von Textbestandteilen (Teilstring aus Variable)" hatte ich ja schon einmal eine ähnliche Fragestellung anhand der Auslesung der Kostenstelle aus Profit-Centern festgelegt, allerdings möchte ich in der bestehenden Query nicht nur die Ziffern der Kostenstelle sondern auch zu den Innenaufträgen die verantwortliche Kostenstelle und ggf. den Kurztext des Innenauftrag und weitere Stammdaten aus den CO Innenauftrag übernehmen.

Fragestellung: Wie viele Kreditoreneinzelposten sind im Geschäftsjahr je Bereich angefallen


Danach sollen auch noch anhand der Kostenstelle (wenn auf Kostenstelle gebucht) oder anhand der verantwortlichen Kostenstelle (eines Innenauftrages) und sofern die Kostenstellen innerhalb eines Fachbereiches liegen eine Zwischensumme gebildet werden.

Die Aufgabe wäre nun also:
  1. Ist die Rechnung auf einen Fachbereich / Abteilung gebucht und um welchen handelt es sich?
  2. Welche Kostenstelle (Kostenstelle oder verantwortliche Kostenstelle Innenauftrag) ist betroffen?
  3. Wieviele Buchungen sind je Fachbereich (und je Kostenstelle) angefallen?
Für Frage 3 muss in einer solchen Auswertung also auch noch ein Zähler mit aufgeführt werden.

Ausgehend von der vorhandenen Query, die ich ja schon ausführlich im oberen Artikel beschrieben habe, möchte ich den Lösungsweg zu diesen Punkten gerne eingehen.

Der erste Schritt ist die Frage, wie weitere Stammdaten zum Innenauftrag ergänzt werden.

In der Query sind folgende Felder enthalten:

Kostenstelle (L,S) GLPCA-KOSTL
Auftragsnummer  (L,S) GLPCA-AUFNR

Das bedeutet, dass hier tatsächlich zumindest die Kostenstelle unproblematisch ergänzt werden können.

Infoset über Zusatztabellle erweitern

Im ersten Moment hatte ich nun überlegt, dass ich per ABAP Coding und Zusatzfeldern nun aus der Stammdatentabelle AUFK die notwendigen Daten aus den Auftragsstamm auszulesen und zum Feld GLPCA-AUFNR zu ergänzen.

Im schon vorhandenen Infoset soll die Tabelle AUFK als Zusatztabelle ins Infoset übernommen werden.

Über die Schaltfläche Zusätze (F5) bzw.  über  SPRINGEN-> ZUSÄTZE ZUM KNOTEN  innerhalb der Transaktion SQ02 (Pflege des Infosets) kann nun eine Zusatztabelle eingefügt werden. Hierzu kann im Register Zusätze die Schaltfläche Anlegen ausgewählt werden.
Hierzu tragen wir die den Namen AUFK und als Art der Zusatzinformation Zusatztabelle ein. Nun erfolgt eine Abfrage über SELECT SINGLE * FROM AUFK WHERE ...
in der auch gleich die Bedingung AUFNR  = GLPCA-AUFNR vorgeschlagen wird.

Es wird also die führende Tabelle GLPCA mit der Stammdatentabelle AUFK verknüpft wird.

Danach können einzelne Felder der Stammdatentabelle als eigene Feldgruppe ins Infoset übernommen werden.

HINWEIS Vorteil Zusatztabelle versus Join

Sicherlich hätte ich auch per JOIN die Tabelle einfügen und verknüpfen können, was mich aber tatsächlich an der Lösung der Zusatztabelle angenehm überrascht hatte war dass die Tabellenfelder der Tabelle AUFK einfach leer sind, wenn das Feld GLPCA-AUFNR nicht gefüllt ist sondern die Buchung auf Kostenstelle erfolgte und damit GLPCA-KOSTL gefüllt ist.

Die Alternative wäre sicherlich noch ein Outer Join statt Inner Join (statt 1:1 eine 1:N Verknüpfung)  Definition. :-)

Als Beispiel habe ich dabei folgende Felder mit übernommen:

  • Auftragsart AUFK-AUART
  • Auftragsnummer AUFK-AUFNR
  • Kurztext AUFK-KTEXT
  • Verantwortliche Kostenstelle AUFK-KOSTV
  • Antragssteller AUFK-USER0
  • Verantwortlicher AUFK-USER2
  • Arbeitsbeginn AUFK-USER7
  • Arbeitsende AUFK-USER8
Im Ergebnis können diese Felder dann in einer Query genutzt werden, nachdem natürlich das Infoset gesichert und generiert wurde.

Query mit lokalen Zusatzfeldern für Ermittlung Fachbereich

Da ich im Rahmen einer anderen Query aus einer virtuellen Lehreinhiet auch Text der Lehreinheit und Fachbereich abgeleitet habe war mein erster Gedanke per ABAP Coding und Zusatzfeld wie im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle sofern nicht in einen anderen Feld ein Wert steht" im Artikel "Query über COEP, AUFK und FMFINCODE für Einzelposten Istkosten Innnenauftrag mit Stammdaten aus CO und PSM-FM sowie Spalten für Ertrag und Aufwand - Erster Teil Infoset als Datengrundlage" beschrieben näher betrachtet

Glücklicherweise bin ich hier aber nur auf den Fachbereich angewiesen, so dass ich innerhalb der Query per lokalen Zusatzfeld mit den beiden Feldern Kostenstelle und verantwortliche Kostenstelle arbeiten kann.

Bezeichnungen und mit lokalen Feldern arbeiten

Neben der reinen Auswertung von einzelnen Tabellenfeldern kann innerhalb der Query auch die Ergebnisse verarbeitet werden. Um einzelne Felder weiter zu bearbeiten können Sie über SPRINGEN->FELDAUSWAHL->FELDAUSWAHL über die Funktion BEARBEITEN->KURZBEZEICHNUNGEN ->EINSCHALTEN einzelne Felder eine Kurzbezeichnung zuordnen.

Diese Kurzbezeichnungen sind notwendig, da wir auf diese dann Bezug nehmen, wenn wir ein lokaes Feld mit einer Formel anlegen. Dieses geht über
BEARBEITEN->LOKALES FELD->ANLEGEN.
Dieses Lokale Feld wird dann in der Feldgruppe angelegt, in der wir uns gerade befinden. Elegant wäre es natürlich, wenn wir im Infoset eine entsprechende leere Feldgruppe definiert hätten, es geht aber auch ohne.

Für dieses Feld werden dann entsprechende Eigenschaften festgelegt und über eine Berechnungsvorschrift kann auf andere Felder Zugriff genommen werden.
Nachdem ich hier schon die theoretische Vorgehensweise erläutert habe mag ich direkt zur praktischen Umsetzung gehen.

In der Feldgruppe zur Tabelle GLPCA "EC-PCA: Ist-Einzelposten" habe ich den Feld "Kostenstelle" die Kurzbezeichnung KS gegeben. Danach habe ich in der Feldgruppe zur Tabelle AUFK den Feld "Verantwortliche Kostenstelle" die Bezeichnung KS_IA gegeben.

Damit kann ich nun also wahlweise mit der Verantwortlichen Kostenstelle des Innenauftrages oder der bebuchten Kostenstelle im Profit-Center-Beleg arbeiten.

Damit das ganze aber auch Sinn macht habe ich noch zwei weitere Felder über "Bearbeiten->Lokales Feld anlegen" angelegt.

Lokales Feld Fachbereich (2. und 3. Ziffer der Kostenstelle innerhalb eines Nummernintervall)

Das Feld  Fachbereich mit den Eigenschaften Textfeld mit ANzahl der Zeichen 10 hat als komplexe Berechnung folgende Bedingungen angelegt:

Bedingung
KS >= 20000000 AND KS < 22000000
Formel
KS[4:5]

Bedingung
KS_IA >= 20000000 AND KS_IA < 22000000
Formel
KS_IA[4:5]

Sonst
''

Sofern also entweder die Kostenstelle oder die verantwortliche Kostenstelle zwischen 20000000  und  22000000 liegt wird in der Berechnungsvorschrift die 4. und 5. Stelle der Kostenstelle (die mit führenden 0 als zehstelliger Wert abgespeichert ist und bei achtstelligen Kostenstellenschlüsseln damit also die zweite und dritte Ziffer der Kostenstelle darstellt)  ausgewiesen.

Damit kann also im Feld Fachbereich direkt von 00 bis 99 jeder Fachbereich oder Abteilung mit ausgewiesen werden. Sofern die Kostenstelle in einen anderen Bereich liegt bleibt dann das Feld Fachbereich leer.

Lokales Zusatzfeld KSIA zum Ausweis jedglicher Kostenstelle

Da ich später nicht nur eine Auswertung nach Fachbereich sondern auch nach der jeweiligen Kostenstelle machen möchte habe ich noch ein zweites lokales Feld angelegt mit der Bezeichnung KSIA.

Auch dieses Feld ist ein Textfeld (mit 10 Zeichen)  und hat als Berechnungsvorschrift
KS + KS_IA

Da entweder die Kostenstelle oder der Auftrag und damit die verantwortliche Kostenstelle gefüllt ist, wird in diesen Feld dann die Kostenstelle ausgegeben.

Grundliste Query Kreditoren Einzelposten mit Gruppierung Bereich und Kostenstellen

Die Grundliste der Query sieht dann wie folgt aus.
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:

lokale Zusatzfeld
Fachbereich  (L)
Kostenstelle KSIA  (L)

EC-PCA: Ist-Einzelposten (GLPCA)
Geschäftsjahr (S) GLPCA-RYEAR
Kontonummer des Lieferanten bzw. Kreditors (L,S) GLPCA-LIFNR
Belegdatum im Beleg  (L,S) GLPCA-BLDAT
Kontonummer des Lieferanten bzw. Kreditors (L,S) GLPCA-LIFNR
Referenzbelegnummer (L,S) GLPCA-REFDOCNR
Belegart (L,S) GLPCA-BLART

Zusatzfelder
Text: Belegart  (L)  TEXT_GLPCA_BLART

EC-PCA: Ist-Einzelposten (GLPCA)
Kontonummer (L,S) GLPCA-RACCT

SKAT
Sachkontolangtext (L) SKAT-TXT50

EC-PCA: Ist-Einzelposten (GLPCA)
Betrag in Buchungskreiswährung (L) GLPCA-HSL
(sinnvoll kann es sein hier als Währungsfeldposition "kein Währungsfeld" zu markieren, sofern nur mit einer Währung bspw. EUR gearbeitet wird)
Positionstext (L) GLPCA-SGTXT
Kostenstelle (L,S) GLPCA-KOSTL
Innenauftrag (L,S) GLPCA-AUFNR

AUFK
Auftragkurztext (L) AUFK-KTEXT
Verantwortliche Kostenstellle (L) AUFK-KOSTV

Damit habe ich dann tatsächlich alle für unsere Auswertung erforderliche Daten vorhanden.

ALV Liste Gruppieren und Zwischensummen

In der ausgeführten Query kann ich dann über die Schaltfläche Zwischensummen für die Felder Fachbereich und Kostenstelle KSIA sowohl Sortierung als auch Zwischensummen  aktivieren und habe damit eine Liste mit Zwischensummen über die gebuchten Beträge.

Sobald eine solche Zwischensumme gebildet wurde, kann aber über den Zauberwürfel (Layout auswählen und hier die Auswahl im Ausklappmenü auf Layout ändern) aus den Spaltenvorrat die nun vorhandene Spalte Zähler mit in die angezeigten Spalten übernommen werden und man hat sowohl für die Kostenstellen (inklusive der verantwortlichen Kostenstelle der Projekte) als auch auf Ebene der Fachbereiche eine Summe aller Buchungen mit ausgewiesen.

Summenaufrissstufen in ALV Liste wählen

Über die Schatfläche Zwischensumme kann das Menü Aufrisssummenstufe gewählt werden und hier eine Zwischensumme auf Ebene
  • 0 Nicht-Summenzeilen
  • 1 Kostenstelle KSIA
  • 2 Fachbereich
gewählt werden. Hier werden je nach Stufe die tieferliegenden Positionen zugeklappt, so dass zum Beispiel bei der Option 2 nur die Anzahl der Belege auf Ebene der Fachbereiche ausgewiesen werden.

Im Ergebnis sieht man nun Buchungsvolumen sowie in Form der Beträge als auch der Anzahl der Buchungen.

Durch die Selektion der Belegart können nun auch Zahlungen (ZP) unberücksichtigt bleiben (ausgefiltert werden) oder auch einzelne Belegarten direkt in der Selektion der Query gewählt werden.

Fazit

Auf diese Weise kann also relativ einfach das Buchungsvolumen betrachtet werden aber gleichzeitig ist dieses auch ein Beispiel dafür, wie ich selbst das Blog hier nutze um aus bestehenden Lösungen auch neue Probleme direkt zu lösen.

Damit trage ich sozusagen zu meinen eigenen SAP KnowHow bei, da ich die Lösung mit den lokalen Zusatzfeldern im ersten Moment auch nciht mehr in Erinnerung hatte. Aber dafür gibt es ja glücklicherweise die Artikelsuche im Blog ;-).

Belege zählen im FI Belegjournal

Selbstverständlich ist die beschriebene Vorgehensweise nur ein Weg um an ein Ergebnis zu kommen. Für die Fragestellung mit Kreditorenbelege war die Vorgehensweise schon durch die vorhandene Query und den gewohnten Umgang mit ihr recht naheliegend. Sollen jedoch alle Belege eines Bereiches gezählt werden würde ich die lokalen Zusatzfelder eher innerhalb der mehr in der Finanzbuchhaltung angesiedelten "Query FI Einzelposten als Belegjournal - Belegsegment (BSEG) und Belegkopf (BKPF) verknüpfen" einbinden und mich hier nicht der Nebenrechnung bzw. des Ledger der Profit-Center-Rechnung widmen.

Analyse sprechender Nummernschlüssel in SAP Query

Grundsätzlich hat die Übersetzung von sprechenden Nummernkreise tatsächlich das Potential innerhalb einer Query eine ausführlichere Analyse zu machen. Unter "Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel" habe ich dieses für Innenauftragsnummern beschrieben und hier auch im Artikel "Drittmittelstatistik nach LOMZ über Recherchebericht und SAP Query" dieses auch für weitere Merkmale genutzt.

Feedback auf meiner Facebook Seite

Das Thema Ausweis Fachbereich werde ich in einen der folgenden Artikeln noch einmal aufgreifen (dann allerdings mit Lehreinheitsbezeichnung) und dabei auch auf das Thema ABAP Code in Excel generieren etwas näher beschreiben. Wobei ich hier schon auf Facebook Ende letzten Jahres (siehe Beitrag auf facebook.com/unkelbach) wirklich hilfreiches Feedback erhalten habe.

Wo ich gerade Facebook anspreche. wer mag kann auch gerne, so auf Facebook angemeldet eine Bewertung für meine Seite abgeben.

 

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


<< Frühere Einträge
Hinauf




Werbung


© 2004 - 2017 Andreas Unkelbach
Andreas Unkelbach

Stichwortverzeichnis
(Tagcloud)


Aktuelle Infos (Abo)

Facebook Twitter Google+

Schnelleinstieg ins SAP Controlling (CO) von Martin Munzel & Andreas Unkelbach
Privates

Kaffeekasse 📖 Wunschliste