21:28 Uhr
Grundlagen SAP Query Variablen über Selektionsfelder mit Werten füllen Eingabe auf Selektionsbild oder Abgrenzungsparameter
Hierzu möchte ich zwei Möglichkeiten vorstellen ohne tiefer auf die Beispiele einzugehen sondern nur um die Herangehensweise zu schildern.
Im Ergebnis kann beim Ausführen einer Query über ein Selektionsfeld ein Wert mitgegeben werden und dieser weiter verarbeitet werden. Diese Weiterverarbeitung ist noch einmal ein Thema für sich, aber die Arbeit mit Abfrageparametern innerhalb einer SAP Query kann für viele Berichtsanforderungen nützlich sein. Dieses ist der Grund, dass ich die beiden Möglichkeiten hier gerne festhalten möchte.
1. Möglichkeit: SAP Query und Lokales Feld Eingabe auf dem Selektionsbild
Handelt es sich um ein Feld in das lediglich eine Eingabe erfolgen soll (Wert eingetragen) oder wenn das Selektionsfeld auch in der Liste der Query selbst genutzt werden soll, bietet sich ein LOKALES FELD an, dass statt einer Berechnungsvorschrift die Option "Eingabe auf dem Selektionsbild" erhält. Dadurch landet das Feld in der Selektionsmaske und es kann ein entsprechender Wert eingetragen werden.Sofern das Feld eine Referenz über "gleiche Eigenschaften wie Feld" erhält kann hier auch die F4-Werthilfe zum Auswahl eines Feldes genutzt werden.
Denkbar ist hier die im Artikel "Abrechnungsvorschriften von Innenaufträgen auf identische verantwortliche Kostenstelle und empfangende Kostenstelle per Query mit Ampelfunktion prüfen" beschriebene Ursprungszuordnung zu verwenden und statt ZUK direkt in der Berechnungsvorschrift zu verknüpfen durch das lokale Feld hier Ursprungszuordnung ZUK im Selektionsfeld einzutragen und die Übereinstimmung der verantwortlichen Kostenstelle des Innenauftrag und das Feld empfangende Kostenstelle (COBRB-KOSTL) zu überprüfen.
Wird ZUK nicht eingegeben (das Selektionsfeld bleibt leer) erfolgt dann die Prüfung mit allen Abrechnungsvorschriften. Um dieses zu umgehen kann auch die Option OBLIGATORISCH gesetzt werden, wodurch eine Eingabe auf jeden Fall erfolgen muss.
2. Möglichkeit Infoset Definition von Abgrenzungsparameter und Zusatzfeld
Statt in der Query per lokales Feld besteht auch die Möglichkeit ein Zusatzfeld innerhalb eines Infoset mit einer Selektion zu versehen. Hierzu kann die Möglichkeit der AbgrenzungHierzu sind jedoch zwei Schritte erforderlich.
Abgrenzungsparameter anlegen
Im Infoset (Transaktion SQ02) können über die Schaltfläche ZUSÄTZE nicht nur Zusatztabellen und Zusatzfelder angelegt werden sondern es besteht auch die Möglichkeit über das Register Abgrenzung eine Abgrenzung für das Infoset anzulegen.Vergleichbar zum Zusatzfeld kann nun ein Name vergeben werden und als Optionen stehen Selektionskriterium und Parameter zur Verfügung. Als Selektionskriterium kann direkt Bezug auf ein Tabellenfeld genommen werden und auch mehrere Werte selektiert werden.
Für dieses Beispiel soll jedoch ein einzelner Wert eingetragen werden (bspw. Kontengruppenname oder ein anderes Stammdatumsmerkmal, dass nicht in der Query selbst, aber innerhalb einer Prüfung einer Berechnungsvorschrift in der späteren Query eingebunden ist).
Daher kann hier die Option PARAMETER gewählt werden. Als Name soll ZP_SYF gewählt werden.
Nachdem NAME und die Option PARAMETER gewählt worden ist, können die Eigenschaften des Parameterfeldes definiert werden.
Natürlich kann hier neben Bedeutung und Selektionstext auch das Format TYP und LÄNGE definiert werden, aber auch per LIKE Bezug auf ein Tabellenfeld genommen werden.
Exkurs Hilfstabellen und Zusatzfelder per Userexit
In diesem Beispiel haben wir eine Hilfstabelle ZHFS_SYF für Systemfinanzierungscodes der Hochschulfinanzstatistik und das Feld ZSYF in der die einzelnen Systemfinanzierungscodes gepflegt sind.
Diese Hilfstabelle wird als kundeneiegenes Zusatzfeld ist für die Kostenart über den Userexit COOMKA01 genutzt (siehe Artikel "Stammdatenerweiterung von CO-Objekten am Beispiel ergänzende Kostenstelle beim Innenauftrag").
Im Artikel "Auswertung per CMOD eingeführter kundeneigener Felder Kostenart, Kostenstelle und Innenauftrag per Stammdatenverzeichnis und SAP Query" habe ich auch die Auswertung dieser Felder per Query beschrieben.
Um diese Tabelle später zu pflegen, oder zu erweitern kann diese über die Transaktion SM30 gepflegt werden. Hier hat RZ10.de jedoch eine wesentlich komfortablere Lösung vorgestellt, die im Artikel "Wie Sie eine Parametertransaktion für die SM30 anlegen" beschrieben ist.ABAP Grundlagen Tabelle anlegen
In seiner Serie zum Thema ABAP Grundlagen erläutert Denis Reis im Artikel "Wie Sie eine SAP Tabelle anlegen" sehr ausführlich, wie kundeneigene Tabellen angelegt werden.
Dieses aber nur am Rande und als kleine Leseempfehlung und Exkurs.
In unseren Fall geben wir also den Parameter per LIKE die gleichen Eigenschaften wie das Tabellenfeld Z_HFS_SYF-ZSYF (Feld ZSYF der Tabelle Z_HFS_SYF).
Damit ist das Feld als Selektionsfeld beim Infoset verfügbar und per F4 können die einzelnen SYF-Codes (Werte aus der Tabelle Z_HFS_SYF für das Feld ZSYF) selektiert werden.
Als Bedeutung und Selektionstext wählen wir die "SyfCode Auswertung (Variante)"
Nun soll aber mit den selektierten Wert in der Query weiter gearbeitet werden.
Zusatzfeld mit Bezug zu Abgrenzungsparameter
Nachdem der Abgrenzungsparameter ZP_SYF angelegt worden ist, kann ein Zusatzfeld angelegt werden, dass den Wert des Paramteres erhalten soll.
In unseren Fall ist dieses ein Zusatzfeld mit den Namen ZSEL_SYF und ebenfalls LIKE Z_HFS_SYF-ZSYF . Wobei hier nur die Feldeigenschaften vererbt werden. Als Langtext und Überschrift soll dieses "Syf Code Auswahl" erhalten.
Über die Schaltfläche CODING wird nun folgendes Coding hinterlegt:
CLEAR ZSEL_SYF.
ZSEL_SYF = ZP_SYF.
In der ersten Zeile wird der Inhalt des Zusatzfeldes geleert und danach mit den Inhalt des Abgrenzungsparameter gefüllt. Dieses Zusatzfeld kann in der Query dann als Selektionskriterium wie auch andere Zusatzfelder verwandt werden. Der Vorteil dabei ist, dass hier, obgleich der SYF Code an keiner anderen Stelle eingebunden ist, mit diesen Selektionsfeld gearbeitet werden kann und es auch als Bedingung für lokale Felder in der Query genutzt werden kann.
Natürlich kann dieses Feld auch für andere Zwecke genutzt werden. Denkbar ist es hier im Coding eines Zusatzfeldes per Parameter einen Preis je Stunde zu übergeben und über die Auswertung eines Sachkonto mit Personalkosten zum Beispiel für eine bestimmte Personengruppe hier aus den gebuchten Personalkosten die geleisteten Stunden zu berechnen.
Fazit
Beide vorgestellten Methoden haben ihre Vorteile und Nachteile. Während die Eingabe auf Selektionsfeld für lokale Felder schnell umgesetzt ist, ist die Option per Parameter und Zusatzfeld wesentlich flexibler und ermöglicht einige andere Möglichkeiten der Auswertung.So ist es auch nicht weiter verwunderlich, dass bestehende Query und Infoset durch solche neu entdeckten Möglichkeiten tatsächlich weiterentwickelt werden können.
Gerade im Berichtswesen ist dies einer der Punkte, die eine Weiterentwicklung gleichzeitig auch sehr spannend macht und zeigt, dass auch im Berichtswesen vieles sich weiter zu entwickeln vermag.
Persönlich freue ich mich immer wieder darüber, wenn ein Austausch in diese Richtung möglich ist und sich das gegenseitige Lernen und der Austausch von Wissen und Erkenntnisse so im beruflichen Alltag bewährt.
Hinweis:
Eine kurze Einführung in das Thema SAP Query habe ich im Artikel
"Grundlagen Kurzeinführung und Handbuch SAP Query" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
21:38 Uhr
Ups, ich spreche ja englisch - Rückblick auf das Symposium Gießen local-global

Der Schwerpunkt des Symposiums lag auf den Bereichen Jugendbeschäftigung (youth employment), Gemeinwesenarbeit (community work) und Migration. Einer anfänglichen Gesprächsrunde wurden Arbeitsgruppen mit Gästen aus El Salvador, Indien, Mexiko, Uganda, Großbritannien und Deutschland zur Seite gestellt. Die Teilnehmer*innen waren in der Lage Erfahrungen aus ihren Ländern einzubringen und neue Blickwinkel aufzuzeigen. Bei einer öffentlichen Abschlussveranstaltung zeigte sich schließlich der Erfolg des intensiven Austausches und der gegenseitigen Anregungen für eine weltweite Partnerschaft und globale Gerechtigkeit.
Was ist die Agenda 2030?
Im September 2015 haben die Mitgliedsstaaten der Vereinten Nationen (UN) einen gemeinsamen Maßnahmenkatalog für nachhaltige Entwicklung (Sustainable Development Goals) beschlossen. Dieser wurde als Agenda 2030 bekannt und enthält 17 miteinander verknüpfte Ziele die Soziales, Umwelt und Wirtschaft als drei Dimensionen der Nachhaltigkeit berücksichtigen.
Die fünf Kernbotschaften Mensch, Planet, Wohlstand, Frieden und Partnerschaft werden als handlungsleitende Prinzipien vorangestellt. Im Englischen spricht man von den "5 Ps": People, Planet, Prosperity, Peace, Partnership.
Als Kirche sehen wir in Gießen täglich die starke Verknüpfung unserer drei gewählten Themenfelder: Bei der Arbeit der Jugendwerkstatt, in der hessischen Erstaufnahmeeinrichtung (HEAE), aber auch während der vielfältigen Gemeindearbeit in unseren Kirchengemeinden. Uns beschäftigen Wohnraumfragen ebenso wie die Qualifikation von benachteiligten Jugendlichen und die Integration von jungen Migrant*innen in Arbeitsmarkt und Gesellschaft.
Während der Veranstaltung stellten wir unseren internationalen Gästen das Bewerbertraining der Jugendwerkstatt in Gießen vor und profitierten im Gegenzug vom Erfahrungsschatz aus ihren eigenen Ländern. Rolvin D'Mello von der Don Bosco Development Society, Indien (DBDS) und Ocen Godwin von der Community Empowerment for Rural Development, Uganda (CEFORD) erzählten von internationalen Maßnahmen im Bereich der Jugendbeschäftigung. Eines der Projekte beruht beispielsweise auf skillbasiertem Training und ermöglicht Jugendlichen nach einer ersten Grundausbildung eine Spezialisierung anhand ihrer Fähigkeiten und Interessen. Auch die Ziele berücksichtigen dabei die Möglichkeiten der Teilnehmer*innen und können zum Beispiel zu einer Selbständigkeit in der Videoproduktion oder der Entwicklung von Apps führen.

(Bild: Matthias Hartmann)
In der Arbeitsgruppe zum Thema Integration berichtete Jean Asipkwe (Direktorin CEFORD) davon, dass im Rahmen ihrer Initiative einzelne Flüchtlinge zu Multiplikatoren ausgebildet werden, um in der Folge anderen Flüchtlingen die Integration zu erleichtern.
Beim Thema Migration und Integration überraschte es zudem wenig, dass sich Diskussionen über Benachteiligungen der örtlichen Bevölkerung international antreffen lassen. Uganda begegnet diesem Problem unter anderem damit, 30% der Gelder für Flüchtlingshilfe in die lokale Bevölkerung zu investieren .

(Bild: Matthias Hartmann)
Weiters stellten wir fest, dass Nachbarschaftsprogramme und Begegnungsräume, die das gemeinsame Lernen aus Erfahrungen ermöglichen, auch international ein Erfolgskonzept darstellen. Wie wir selbst erleben konnten, eröffnet der Austausch mit anderen Menschen, sei es vor Ort oder auch über Länder und Kontinente hinweg, neue Blickwinkel auf das eigene Potential und kann Wege aufzeigen, mit denen sich Aufgaben meistern lassen.
In den Tagen des Symposiums hat sich besonders in den Arbeitsgruppen gezeigt, dass es nicht darum geht Wissen zu vermitteln sondern Wissen zu teilen. Gerade die gegenseitige Beratung auf Augenhöhe führte zur Erkenntnis, dass wir mit vielen der Herausforderungen, auf die wir in unserer täglichen Arbeit stoßen, nicht alleine da stehen, sondern sie in ähnlicher Form weltweit vorhanden sind. Durch die Kommunikation untereinander wurde uns bewusst, dass unsere unterschiedlichen Aufgabenbereiche miteinander zusammenhängen und auch hier Kommunikation gemeinschaftliches Handeln ermöglicht.

(Bild: Fr. Rolvin D'Mello)
Für mich nehme ich aus dieser Veranstaltung zahlreiche Denkansätze, ein neues Bewusstsein für Zusammenhänge, sowie die Erkenntnis mit: Sprache muss keine Barriere sein (und ja, man versteht mich auch auf Englisch).
Ich freue mich, dass in unserem Dekanat eine solche Veranstaltung möglich ist und bin voller Hoffnung, dass viel der vorhandenen Energie und Erfahrung in lokales Handeln umgesetzt wird. Ich möchte Sie dazu einladen, auch Ihre lokalen, kleine Schritte in einem größeren Zusammenhang zu betrachten und sie zu mehr als nur einem kleinen Schritt werden zu lassen.
Ganz besonders wünsche ich mir, dass die Erkenntnisse aus diesem Symposium und die der Agenda 2030 zugrunde liegenden Prinzipien - Mensch, Planet, Wohlstand, Frieden und Partnerschaft - Eingang in den gegenseitigen Austausch zwischen unseren bestehenden Initiativen, in unser künftiges Arbeiten und Engagement finden werden, denn für uns beginnt der Planet in Gießen.
Das Dekanat hatte damals im Artikel
"Auch wir sind entwicklungsbedürftig" Entwicklungstagung in Gießen
online wie offline berichtet.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
14:25 Uhr
Buchveröffentlichung »Berichtswesen im SAP®-Controlling«
So ist dann relativ zeitnah die Idee zum neuen Buch entstanden, dass die Möglichkeiten zum Aufbau eines internen Berichtswesen im SAP Modul Controlling beschreibt. Dabei werden sowohl vorhandene Berichte vorgestellt als auch einige praktische Kniffe zum Berichtswesen beschrieben und auch die Entwicklung eigener Berichte sei es mit Report Painter, Rechercheberichte oder auch SAP Query vorgestellt.
In guter Tradition hat mich ein Kollege schon auf das Titelbild angesprochen, dass nun nach Erbsen ein realistisches Tortendiagramm darstellt.
Paperback ISBN: 9783960127406
Für 19,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Dieses Diagramm sieht allerdings nicht nur nett anzusehen aus sondern zeigt auch einen weiteren Punkt der im Buch behandelt wird. Eine wichtige Frage ist auch wie diese Berichte den einzelnen Usern zur Verfügung gestellt werden und wo sowohl ein Informationssystem in Form eines Management-Cockpits für die einzelnen Verantwortungsbereiche zur Verfügung stellen, um an einer zentralen Stelle alle Informationen sammeln und direkt auswerten zu können. Diese Informationen sind nicht nur für die Unternehmensleitung und das Management, sondern auch für andere Verantwortliche im Unternehmen relevant.
Mein erster Blick ins Buch hat mich tatsächlich begeistert, was unschwer am Bild zu sehen ist.

Persönlich bin ich sehr zufrieden das Ergebnis in Händen zu halten und bin tatsächlich außerordentlich begeistert vom Ergebnis. Mein Buch richtet sich an erfahrenere Beschäftigte im Bereich Controlling, die im SAP-Modul CO ein Berichtswesen aufbauen oder erweitern wollen. Daneben können einzelne Beispiele nicht nur für Key-User, sondern auch für fortgeschrittene Sachbearbeiter im Controlling nützlich sein, um für regelmäßig genutzte Berichte kleinere Kniffe zur Arbeitserleichterung zu liefern. Die einzelnen Berichtsanforderungen sind im Buch so allgemein gehalten, dass es damit möglich sein sollte, die vorgestellten Methoden auf eigene Berichtsanforderungen zu übertragen bzw. als Grundlage zur Entwicklung eines eigenen Berichtswesens zu verwenden.
Ich würde mich sehr über ein entsprechendes Feedback freuen sei es hier im Blog, auf Amazon oder auch per Mail.
Sollte ich ein wenig Neugierde auf dieses Buch entfaltet haben, verweise ich gerne auf meine Seite Veröffentlichungen wo meine bisherigen Veröffentlichung aufgelistet sind sowie auf die Seite "Internes Berichtswesen im SAP ERP Modul Controlling (CO)" auf der eine ausführliche Rezension zum Buch »Berichtswesen im SAP®-Controlling« zu finden ist.
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt
14:14 Uhr
Gießen local-global 2017 - Symposium zum Reformationsjubiläum 22. bis 25. Juni 2017
Hierzu sind Entwicklungsexperten aus Afrika, Asien und Lateinamerika nach Gießen eingeladen die gemeinsam die Themenfelder Jugendbeschäftigung, Migration und Gemeinwesenarbeit in Gießen und weltweit besprechen wollen. Orientierungspunkte sind die Entwicklungsziele der „Agenda 2030“ der Vereinten Nationen.
Am Donnerstag, den 22. Juni von 18 bis 21 Uhr im Gießener Rathaus und am Samstag, den 24. Juni ab 19:30 in der Werkstattkirche Gießen, Ederstraße 13 wird diese Diskussion öffentlich geführt.

Foto:Schepp Plakat:J. Müller -
Weitere Informationen sind auf der Seite des evangelischen Dekanat Gießen im Artikel "Entwicklungstagung in Gießen zum Luther-Jubiläum Die Welt gerechter machen" sowie in folgenden verlinkten Flyer zu finden.
Flyer_Symposium_2017_Giessen-local-global.pdf
Neu auf Partnerschaft und Gerechtigkeit weltweit schauen
Interessieren Sie sich für Entwicklungspolitik? Für Partnerschaftsarbeit? Oder engagieren Sie sich in der Flüchtlingshilfe, für die Jugendwerkstatt oder für das Gemeinwesen? Welche neuen Möglichkeiten haben wir, die globalisierte Welt mitzugestalten und weltweite Beziehungen aufzubauen?
Diese Frage wird das Evangelische Dekanat Gießen auf dem Internationalen Symposium „Gießen lokalglobal: Neue Perspektiven weltweiter Partnerschaft und Gerechtigkeit. Reformatorische Herausforderungen 2017“ diskutieren und neue Möglichkeiten der Zusammenarbeit praktisch erleben.
Martin Luther fand vor 500 Jahren aus seiner Angst heraus eine neue Sichtweise auf Gott und auf eine Gerechtigkeit für den einzelnen Menschen. Heute ängstigt uns weniger die Furcht vor einem strafenden Gott, als viel mehr die Unsicherheit in der globalisierten
Welt.
Bei den Vereinten Nationen wird ein Perspektivwechsel in der Entwicklungspolitik diskutiert. Mit einer gegenseitigen Beratung auf Augenhöhe sollen die globalen Herausforderungen neu angegangen werden.
Wir bringen internationale Gäste zu den Themen Gemeinwesenarbeit, Jugendbeschäftigung und Migration zusammen. Wir tauschen mit ihnen Erfahrungen aus und wollen Denkanstöße in unsere Kirche und in unsere Stadt geben.
Dabei sind Fachleute aus der Praxis aus Lateinamerika, Afrika, unserer Partnerdiözese Amritsar Indien, und auch aus unserer Region.
Ich würde mich freuen, wenn auch Sie Interesse an dieser Veranstaltung haben und gebe auch gerne weitere Informationen weiter. Gerne können Sie beiliegenden Flyer auch vor Ort an Interessierte verteilen.
17:44 Uhr
Query zur Auswertung von Klassifizierungsmerkmale PSM Fonds zu CO Innenauftrag und Datumsfelder mit Konvertierung von FLOAT zu DATUM
Hier hatte ich über ein Zusatzfeld OBJNFOND aus Finanzkreis und FOND eine Auswertung der Klassifizierungsmerkmale beschrieben, so dass die einzelnen Felder der Tabelle CABN
In diesen Artikel habe ich über ein Zusatzfeld OBJNFOND aus Finanzkreis und einen Zusatzfeld FONDS, dass aus der CO-Innenauftragsnummer die Nummer des PSM Fond bildet, die PSM Objektnummer erstellt um hier einzelne Merkmale aus den Tabellen CABN "Merkmal" in der die einzelnen Merkmale gespeichert sind und AUSP "Ausprägungswerte der Sachmerkmale" in der zum Objekt (Fond) die Werte der einzelnen Merkmale gespeichert sind auswertete.
Im Rahmen des Artikel "Query über COEP, AUFK und FMFINCODE für Einzelposten Istkosten Innnenauftrag mit Stammdaten aus CO und PSM-FM sowie Spalten für Ertrag und Aufwand - Erster Teil Infoset als Datengrundlage" hatte ich das Coding und die Zusatzfelder noch ein wenig optimiert allerdings war hier noch der Nachteil vorhanden, dass die entstandene Query fest den Finanzkreis hinterlegt hatte und so nicht an andere Einrichtungen übertragen werden konnte.
Daher möchte ich in diesen Artikel noch einmal das Thema Verknüpfung von CO Innenauftrag und PSM Fonds sowie die Auswertung der Klassifizierung angehen um danach auf eine Besonderheit einzugehen, sofern es sich beim Merkmal um ein Datumsfeld handelt.
Verknüpfung von CO Innenauftrag und PSM Fond
Statt wie im ersten Artikel beschrieben ein kompliziertes Feld OBJNFOND anzulegen ist es wesentlich leichter mit den Zusatzfeld ZAUFNR zu arbeiten. Dieses hat gleichzeitig den Vorteil, dass die Stammdaten des Fonds problemlos als Zustztabelle eingebunden werden können.Wie schon in den anderen Artikeln erwähnt sind die beiden Stammdatentabellen von CO Innenaufträgen (AUFK) und PSM Fonds (FMFINCODE) nicht über die Auftragsnummer beziehungsweise Fond verknüpfbar. Hintergrund ist, dass das Feld AUFK-AUFNR in der Datenbank als Character mit 12 Zeichen und das Feld FMFINCODE-FINCODE als Character mit 10 Zeichen definiert ist.
Im zweiten Artikel wurde hierfür das Zusatzfeld ZAUFNR angelegt um aus der Innenauftragsnummer eine kompatibles Feld zum Fond zu machen.
Hierzu wurde das Zusatzfeld ZAUFNR mit per LIKE-Referenz FMFINCODE-FINCODE erstellt was in den folgenden Abschniten als Hilfsfeld genutzt werden kann. Nun muss "nur" noch die Auftragsnummer in dieses Feld zugewiesen werden.
Da auf Fond und Innenauftrag Drittmittelprojekte abgebildet werden, ist es das Ziel die Projektnummer vom Innenauftrag auch als Fond zu verwenden. Dazu möchte ich zwei Möglichkeiten für das Zusatzfeldcoding darstellen.
ZAUFNR mit fester Länge der Projektnummer des Innenauftrag
Für eine achtstellige Projektnummer (Innenauftrag) lautet das Coding wie folgt:ZAUFNR = AUFK-AUFNR+4(8).
Hierbei bedient sich das Coding der Technik eines Offsets.
Durch die optionalen Angaben eines Offsets +<o> und eine Länge (<l>) direkt hinter dem Feldnamen <f>, wird der Teil des Felds, der auf Position <o>+1 beginnt und die Länge <l> hat, als eigenes Datenobjekt angesprochen. In unseren Fall wird also für die Variable ZAUFNR das Feld AUFK-AUFNR (wir erinnern uns die zwölfstellige Auftragsnummer) eingelesen und ab der vierten Stelle insgesamt acht Stellen eingelesen. Da in der Datenbank die Auftragsnummer mit führenden 0000 hinterlegt wird erhalten wir also statt des Datenbankwerte 000012345678 die tatsächliche Auftragsnummer 12345678.
ZAUFNR mit festzulegender Länge der Projektnummer
Sollten Sie eine andere Länge bei den Aufträgen oder Fonds definiert haben ist das Coding natürlich entsprechend anzupassen.Damit hier nicht selbst die Länge und Position für die Offsetermittlung errechnet werden muss habe ich hier das Coding wie folgt angepasst:
Damit kann durch Zuweisung eines Zahlenwertes die Position ab der die Projektnummer gespeichert ist direkt ermittelt werden.DATA L_AUFNR type i.
DATA L_OFFSET type i.
* Tragen Sie hier die Länge ihrer Projektnummer ein
* Standard: 8 stellige Auftragsnummer
L_AUFNR = 8.
* Nun wird die Position im Feld AUFK-AUFNR ermittelt
* ab der die Projektnummer ohne 0 gespeichert ist.
L_OFFSET = 12 - L_AUFNR.
* Maximial 12 Zeichen sind in AUFK-AUFNR vorhanden
ZAUFNR = AUFK-AUFNR+L_OFFSET(L_AUFNR).
Grundsätzlich könnte die Länge der Projektnummer als Variable L_AUFNR natürlich auch als Abfrageparameter, vergleichbar zum Artikel "Neue Wertgrenze für Investitionen bei Finanzstatistik oder Abfrageparameter in SAP Query zur Übernahme von Werten aus Selektionsbild" abgefragt werden, jedoch muss für das spätere Ergänzen der Klassifizierungsmerkmale hier ohnehin das Coding angepasst werden und in der Regel ändert sich die Länge der Projektnummer nicht, so dass diese als Selektionsparameter nur zur Verwirrung und möglichen Fehler führen würde.
Stammdaten Fond ergänzen per Zusatztabelle FMFINCODE
Durch das Zusatzfeld ZAUFNR ist es uns nun wesentlich einfacher möglich die Stammdaten der Fonds aus der Tabelle FMFINCODE ergänzend zur CO Stammdatnetabelle AUFK für die Innenaufträge mit ins Infoset aufzunehmen.Ein wichtiger Punkt ist dabei die Reihenfolge der Codingabschnitte.
Beim Hinzufügen eines Zusatzfeldes oder einer Zusatztabelle kann am Punkt Reihenfolge des Codeabschnitts gewählt werden. Auch wenn die Hilfe nicht in diese Richtung zu lesen ist, verstehe ich den Punkt so, dass wenn man Bezug auf vorab definierte Zusatzfelder nehmen möchte die hier nutzenden Felder im nachgeordneten Codeabschnitt liegen sollten.
Da ich in beiden kommenden Fällen mit den neu angelegten Feld ZAUFNR gearbeitet werden soll, werden beide kommenden Fälle im Codabschnitt 2 hinterlegt.
Zusatztabelle FMFINCODE
Anstatt eines Zusatzfeld kann im Register Zusätze über die Schaltfläche ANLEGEN auch eine ganze Tabelle eingefügt werden. Hierzu tragen wir als Name FMFINCODEfür die Stammdatentabelle der Fonds ein und wählen als Art der Zusatzinformation die Option ZUSATZTABELLE..Im Feld "Reihenfolge des Codeabschnitts" wird nun eine 2 aus den geschilderten Gründen eingetragen.
Hintergrund ist dass erst das Feld ZAUFNR definiert sein soll, bevor Sie mit der Zusatztabelle arbeiten.
Nun erfolgt eine Abfrage über SELECT SINGLE * FROM FMFINCODE WHERE ...
in der folgedene (hervorgehobene) Bedingungen erfüllt sein sollen.
WHERE FIKRS = AUFK-BUKRS
da Finanzkreis und Buchungskreis identisch sind, können hier beide Felder sowohl in der Tabelle AUFK als auch FMFINCODE verwendet werden.
AND FINCODE = ZAUFNR
Hierdurch werden dann tatsächlich Fonds und Innenauftrag miteinander verknüpft und es steht die gesamte Tabelle FMFINCODE im Infoset zur Verfügung.
Klassifizierungsmerkmal aus AUSP auswerten
Bisher bin ich bei Klassifizierungsmerkmalen so verfahren, dass ich anhand ATINN den gespeicherten Merkmalswert aus der Tabelle AUSP ausgelesen habe und entsprechend mit ausgegeben habe.Welche Merkmale sind vorhanden?
Die einzelnen Merkmale sind in der Tabelle CABN hinterlegt und werden über das Feld ATINN mit der Tabelle AUSP mit entsprechenden Inhalten verknüpft.Entsprechend ist es Möglich für jedes Merkmal ein eigenes Zusatzfeld anhand der Merkmalsnummer (ATINN) zu erstellen.Die entsprechenden Einzelmerkmale können hierbei bspw. mit der Transaktion SE16 und der Auswertung der Tabelle CABN betrachtet werden.
Eines dieser Merkmale ist die Projektbewertung PBW.
Hierzu wird ebenfalls ein Zusatzfeld mit der Bezeichnung PBW für Projektbewertung mit Langtext und Überschrift Projektbewertung erstellt.
Dieses hat als Eigenschaften eine LIKE-Referenz auf AUSP-ATWRT.
Ferner wird im unteren Abschnitt des Fenster bei Reihenfolge des Codeabschnitts ebenfalls eine 2 eingetragen.
Danach wird als Coding zum Zusatzfeld ein passendes Coding zum Zusatzfeld hinterlegt, dass aus der Variable (Zusatzfeld) ZAUFNR und den Buchungskreis bzw. Finanzkreis eine Objektnummer erstellt, die dem Feld AUSP-OBJEK. entspricht.
AUSP-OBJEK Objektnummer mit vorgegebenen Finanzkreis
Unter der Annahme eines dreistelligen Finanzkreis KRK und dass das Merkmal die Interne Merkmalsnummer (Feld ATINN) folgenden Wert hat 0000000022 hat wird folgendes Coding zum Feld hinterlegt:DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_MERKMALPBW type AUSP-ATWRT.
CONCATENATE 'KRK ' ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATWRT INTO L_MERKMALPBW FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000022' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR PBW.
ELSE.
PBW = L_MERKMALPBW.
ENDIF.
Im Ergebnis enthält nun das Feld PBW die in der Klassifizierung hinterlegte Projektbewertung des Fond.
Objektnummer aus Buchungskreis identisch zum Finanzkreis ermitteln
Wesentlich eleganter ist es jedoch, sofern Finanzkreis und Buchungskreis übereinstimmen, diesen aus der Stammdatentabelle AUFK auszulesen.Hierzu habe ich das Coding an einer Zeile angepasst.
DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_MERKMALPBW type AUSP-ATWRT.
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATWRT INTO L_MERKMALPBW FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000022' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR PBW.
ELSE.
PBW = L_MERKMALPBW.
ENDIF.
Durch die Codingzeile:
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
wird der Buchungskreis unter Berücksichtigung von Leerzeichen mit den Zusatzfeld ZAUFNR verknüpft, so dass hier von dreistellige ebenso wie vierstellige Finanz- bzw. Buchungskreise berücksichtigt werden.
Datentyp beim Klassifizierungsmerkmal Unterschied AUSP-ATWRT und AUSP-ATFLP
Sofern die einzelnen Klassifizierungsmrerkmale in der Merkmalsverwaltung als Datentyp ZEICHENFORMAT definiert sind, kann hier das Thema schon abgeschlossen werden und die Query kann direkt genutzt werden.
Seitens einer anderen Hochschule bin ich jedoch darauf angesprochen worden, dass das Tabellenfeld AUSP-ATWRT leer ist und bei IHnen das Feld AUSP-ATFLP gefüllt ist. Dieses liegt daran, dass Sie als Klassifizierungsmerkmal den Datentyp DATUM gewählt haben um hier ein Datum zu hinterlegen.
Hierzu muss man wissen, dass die Tabelle AUSP "Ausprägungswerte der Sachmerkmale" die einzelnen Merkmalswerte in zwei Feldern speichert, je nachdem welcher Art die Daten sind.
Die Characterwerte (Zeichenformat) werden wie in oberen Beispiel beschrieben im Tabellenfeld AUSP-ATWRT "Merkmalswert" als Character mit 30 Zeichen gespeichert.
Handelt es sich jedoch um einen nummerischen Wert werden diese als Fließkommazahl (FLOAT) in das Tabellenfeld AUSP-ATFLV als Gleitpunktzahl mit 16 Stellen gespeichert.
Das Problem ist nun aus diesen Wert wieder ein Datumsfeld zu erhalten.
Gleitpunktzahl FLOAT in Datum (DATE) konvertieren
Zur Verdeutlichung des Problems habe ich einmal ein Merkmal als Datum definiert und den gespeicherten Wert in der Tabelle AUSP näher angesehen:| Datum | Wert als Float AUSP-ATFLV |
|---|---|
| 01.01.2018 | 2,0180101000000000E+07 |
| 14.05.2017 | 2,0170514000000000E+07 |
| 13.07.2017 | 2,0170713000000000E+07 |
Nun stellt sich für die QUery die Frage, wie aus den FLOAT Wert ein Datumswert ermittelt werden kann.
Im ersten Schritt legen wir ein Zusatzfeld mit ATFLV1 an um den Wert zum Merkmal 0000000043 welches als Datentyp Datum definiert bekommen hat auszulesen. Analog zum ATWRT lautet das Coding im Abschnitt 2 dann wie folgt:
DATA: L_objfond TYPE AUFK-AUFNR.
DATA: L_ATFLVDATUM1 type AUSP-ATFLV.
CONCATENATE AUFK-BUKRS ZAUFNR INTO L_OBJFOND RESPECTING BLANKS.
SELECT SINGLE ATFLV INTO L_ATFLVDATUM1 FROM AUSP
WHERE OBJEK = L_OBJFOND AND ATINN ='0000000043' AND KLART = '042'.
IF sy-subrc <> 0.
CLEAR ATFLV1.
ELSE.
ATFLV1 = L_ATFLVDATUM1.
ENDIF.
Nun ist also im Feld ATFLV1 das Datum als FLOAT gespeichert. Jetzt gibt es drei Möglichkeiten um daraus ein Datum zu erhalten.
Funktionsbaustein CTCV_CONVERT_FLOAT_TO_DATE
Der Funktionsbaustein CTCV_CONVERT_FLOAT_TO_DATE wandelt einen Datumswert im Gleitpunktformat (Typ F) in das Datumsformat (Typ D) um.Hier kann dann der Aufruf des Funktionsbaustein aus ATFLV1 ein Datum ausgeben.
Hierzu legen wir ein Zusatzfeld DATUM1 vom Typ D an (Länge von 8 wird automatisch vorgegeben) und können über folgendes Coding
DATA : L_datum1 LIKE ausp-atwrt,
L_datumsformat LIKE sy-datum.
CLEAR T_DATUM.
IF AUSP-ATFLV <> 0.
CALL FUNCTION 'CTCV_CONVERT_FLOAT_TO_DATE'
EXPORTING
FLOAT = ATFLV1
IMPORTING
DATE = L_datum1
.
WRITE L_datum1 TO L_datumsformat DD/MM/YYYY.
DATUM1 = L_datumsformat.
ENDIF.
Float in Integer und Integer in Datum umwandeln
Hier kann ATFLP über weitere Hilfsvariablen in ein Datumsfeld umgewandelt werden.Dazu wird ein Zusatzfeld vom Typ D für Datum angelegt und nun mit folgenden Code das ermittelte Feld ATFLV1 umgewandelt. Das Zusatzfeld erhält hier die Bezeichnung DATUM2.
DATA
ZL_integer TYPE I,
ZL_datum TYPE D.
ZL_integer = ATFLV1.
WRITE ZL_integer TO ZL_datum.
DATUM2 = ZL_DATUM.
Beide hier kurz vorgestellte Methoden sind im Formumsbeitrag "Convert float to date" unter https://archive.sap.com/discussions/thread/154147 ausführlicher beschrieben.
Umwandeln ATFLV in Datum durch lokale Felder in Query
Da wir uns bei der Verwendung obiger ABAP Coding nicht sicher waren, ob diese problemlos funktionieren haben wir eine dritte Variante genutzt in der das Feld ATFLP1 als Zusatzfeld im Infoset zur Verfügung gestellt wird und erst in der Query eine Umwandlung erfahren soll.
Hierzu erhält das Feld Datumsmerkmal auch die Kurzbezeichnung ATFLP1 in der Query. Dieses ist in der SQ01 in der Query zum Infoset über
- SPRINGEN
- FELDAUSWAHL
- FELDAUSWAHL
möglich indem über
- BEARBEITEN
- KURZBEZEICHNUNGEN
- EIN/AUSSCHALTEN
diese eingeschaltet werden und das Feld eine entsprechende Kurzbezeichnung erhält.
Nun ist es erforderlich über
- BEARBEITEN
- LOKALE FELD
- ANLEGEN
mehrere lokale Zusatzfelder mit Formeln und Bedingungen anzulegen.
Als erstes wird ein Feld angelegt, dass die Gleitpunktzahl in eine bearbeitbare Zahl verwandelt.
Dazu legen wir das Feld DATUM als Rechenfeld mit 9 Ziffern und 8 Dezimalstellen an.
Als Berechnungsvorschrift erhält es
ATFLV1/100000000
und als Bedingung
ATFLV1<>0
Damit haben wir nun statt
2,0180101000000000E+07
die Dezimalzahl
0,20180101
erhalten.
Mit dieser arbeiten wir nun weiter und legen für die Datumsbestandteile folgende lokale Felder an.
Das lokale Feld DATUMTXT erhält die Eigenschaften Textfeld mit 10 Zeichen.
und als Berechnungsvorschrift
DATUM
bei der Bedingung
DATUM<>0
Hierduch ist aus der Zahl ein String entstanden und dieser String kann wie im Artikel "Query Stammdatenvergleich Profit-Center und Auslesen von Textbestandteilen (Teilstring aus Variable)" ausgelesen werden.
Dieses nutzen wir für drei lokale Felder die Teile der Dezimalzahl verwenden um Jahr, Monat und Tag zu erhalten.
DATUMTXT[3:6]
bei der Bedingung DATUM <>0
Folgerichtig ist das Feld Monat ein Textfeld mit 2 Zeichen und der Formel DATUMTXT[7:8] bei Datum <> 0.
Abschliessend fehlt noch der Tag als Textfeld mit zwei Zeichen und der Formel DATUMTXT[9:10] ebenfalls bei DATUM <>0.
Aus Jahr Monat und Tag lässt sich das Datum zumindest als Zahl ausdrücken.
Hierzu wird das Feld DATUMZAHL als Textfeld mit 8 Zeichen definiert und bekommt folgende Formel JAHR * 10000 + MONAT * 100 + TAG bei DATUM <> 0
Im Ergebnis ist das Datum hier statt 0,20180101 als 20180101 hinterlegt.
Das spannende ist nun aber das Feld DATUMATFLV1 dieses ist als Datumsfeld definiert und hat folgende Formel DATUMZAHL bei Datum<>0.
Zur besseren Übersicht habe ich die einzelnen Felder noch einmal in folgender Tabelle aufgeführt.
| Feld | Format | Berechnungsvorschrift | Bedingung |
|---|---|---|---|
| ATFLV1 | Zusatzfeld aus Infoset entspricht AUSP-ATFLV | ||
| DATUM | Rechenfeld 9 Ziffern 8 Dezimalstellen |
ATFLV1/100000000 | ATFLV1<>0 |
| DATUMTXT | Textfeld 10 Zeichen |
DATUM | DATUM<>0 |
| JAHR | Textfeld 4 Zeichen |
DATUMTXT[3:6] | DATUM<>0 |
| MONAT | Textfeld 2 Zeichen |
DATUMTXT[7:8] | DATUM<>0 |
| TAG | Textfeld 2 Zeichen |
DATUMTXT[9:10] | DATUM<>0 |
| DATUMZAHL | Textfeld 8 Zeichen |
JAHR * 10000 + MONAT * 100 + TAG | DATUM<>0 |
| DATUMATFLV1 | Datumsfeld | DATUMZAHL | DATUM<>0 |
Damit ist das Feld ATFLV1 erfolgreich in ein Datum umgewandelt worden.
Der entsprechende Abschnitt der Query (inklusive der Hilfsfelder, die man sonst natürlich nicht mit in der Grundliste übernehmen würde sieht wie folgt aus:
| ATFLV1 | DATUM | DATUMTXT | JAHR | MONAT | TAG | DATUMZAHL | DATUMATFLV1 |
|---|---|---|---|---|---|---|---|
| 2,0180101000000000E+07 | 0,20180101 | 0.20180101 | 2018 | 01 | 01 | 20180101 | 01.01.2018 |
| 2,0170514000000000E+07 | 0,20170514 | 0.20170514 | 2017 | 05 | 14 | 20170514 | 14.05.2017 |
Im Ergebnis ist hier also tatsächlich ein korrekt beziehungsweise lesbares Datum aus den Feld entstanden. Somit können also auch Datumswerte innerhalb der Klassifizierung mit ausgewertet werden. Allerdings sind diese allerdings etwas umständlicher gespeichert. Dafür hat das Erarbeiten einer gemeinsamen Lösung tatsächlich Freude gemacht.
Glücklicherweise haben wir keine als Datum formatierten Merkmale, sonst würde das je Datumsfeld ein etwas umständliches Coding erfordern. Vermutlich würde ich mich dann auch eher mit den oben erwähnten Funktionsbaustein beschäftigen, aber so war dieses für ein einzelnes Datum auch eine praktische Übung beziehungsweise Herausforderung durch die Kollegen an einer anderen Hochschule.
Hinweis:
In der späteren Query bietet es sich dann allerdings tatsächlich an das Feld in der Grundliste mit der Option Feld nur ausgegeben wenn <>0 zu markieren. Andernfalls wird als Dautm 00.00.0000 ausgegeben.
Hinweis:
Eine kurze Einführung in das Thema SAP Query habe ich im Artikel
"Grundlagen Kurzeinführung und Handbuch SAP Query" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/


Keine Kommentare - Permalink - SAP