11:37 Uhr
SAP Query ABAP Coding zum Zusatzfeld Inhalt eines Strings auswerten
Das Beispiel von damals sollte verwnedet werden, damit eine IF Schleife nur bei Zahlenwerten (ohne Buchstaben) erfolgt.
ABAP: Enthält Variable nur Zahlenwerte
Vorab sollte man sich jedoch bewust sein, dass ein Innenauftrag als Schlüsselfeld durchaus alphanumerische Werte enthalten kann. Hier stellt sich also die Frage, wie es möglich ist die Auftragsnummer zu überprüfen, ob tatsächlich nur Zahlenwerte enthalten sind.Hier kann eine Wenn Funktion (IF) mit der vergleichendenen Anweisung CO (contains only) weiter helfen. ABAP hat einige Vergleichsoperatoren, so dass hier Variablen mit Variablen oder aber auch mit bestimmten Werten verglichen werden können. Zu diesen logischen Ausdrücken gehört unter anderen CO (contians only), CN (contains not only) und weitere. Diese liefern ein Wahr wenn der Vergleich erfolgreich war und nur die Zeichen des Vergleichsparameter vorhanden war (CO) oder aber wenn noch weitere Zeichen dabei sind (CN). Interessant ist auch noch die Möglichkeit CS (contains string) womit vergleicht werden kann, ob eine bestimmte Zeichenfolge in einen Wert vorhanden ist.
Ein ausführliches Beispiel wäre
DATA: L_ZAHLEN(10) TYPE c VALUE = '0123456789'.
* L_zahlen enthaelt Zahlenwerte Leerzeichen
DATA: L_innenauftrag type AUFK-AUFNR.
IF L_innenauftrag CO L_ZAHLEN.
* Reine Auftragsnummer
ELSEIF.
* Alphanumerischer Innenauftrag
ENDIF.
Selbstverständlich lässt sich dieses auch ohne Definition einer Konstanten regeln. Hierzu kann folgende Anweisung erstellt werden:
Damit kann nun mit den vorhandenen Zahlenwerten weitergearbeitet werden.IF AUFK-AUFNR CO '1234567890'.
* Innenauftrag hat nur Nummern
ELSEIF.
*Innenauftrag ist alphanumerisch
ENDIF.
Auch sonst wurden hier noch weitere Übersetzungen der Aufrtragsnummer in einen sprechenderen Schlüssel / Text vorgestellt.
ABAP Vergleichsoperatoren
Isa Bodur hat im Artikel "Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel" einige Vergleichsmöglichkeiten mit Erläuterungen vorgestellt.Diese mag ich hier kurz als Tabelle aufführen.
Operator | Bedeutung |
---|---|
CO | Contains Only / Enthält nur … |
CN | Contains Not only / Enthält nicht nur … |
CA | Contains Any / Enthält mindestens eines der folgenden Zeichen |
NA | Contains Not Any / enthält keines der Zeichen |
CS | Contains String / enthält Zeichenkette |
NS | contains No String / enthält Zeichenkette nicht |
CP | Covers Pattern: passend zum Muster |
NP | No Pattern: keine Übereinstimmung zum Muster |
Beim Pattern / Muster ist zu beachten, dass * eine Zeichenkette und + für ein beliebiges Zeichen steht.
Zum besseren Verständnis nehmen wir eine Variable html als Zeichenkette und geben hier HTML Code als Inhalt.
DATA html TYPE string.
html ='Dieser Text ist <i>kursiv</i>.'
Hier ist das HTML Tag <i> und </i> für kursive Schrift verantwortlich.
In der Prüfung kann nun per
IF html CP '*<*>*'.
darauf reagiert werden, dass die Variable html HTML Code enthält.
Praxisbeispiel CS enthält Zeichenkette
Die CO Innenaufträge sind sowohl über das zugeordnete Profitcenter als auch über die verantwortliche Kostenstelle weiteren Bereichen zugeordnet.Abhängig vom zugeordneten Profitcenter soll nun eine weitere Information (zum Beispiel der im Kostenstellenschlüssel hinterlegte Abteilung) mit in einer Stammdatenliste ausgegeben werden. Dies soll aber nur bei solchen Innenaufträgen erfolgen die zu bestimmten Buch-Profitcentern gehören ausgegeben werden.
Hier sind die Profitcenter B-SAP, B-OFFICE, B-BWL jeweils für eine bestimmte Sparte von Büchern unseres Verlages hinterlegt.
Nun haben wir ein Zusatzfeld ZABTEILUNG (Type C, Länge 030, Ausgabelänge 030) angelegt und werden hier durch folgendes Coding eine Prüfung durchführen.
Schritt 1:
Leeren der Variable ZABTEILUNG:
CLEAR ZABTEILUNG.
Schritt 2:
Ist das zugeordnete Profitcenter keines mit der Zeichenkette 'B-' soll als Wert NR ausgegeben werden:
IF AUFK-PRCTR NS 'B-'.
ZABTEILUNG = 'NR'.
ENDIF.
Schritt 3:
Enthält das Profitcenter doch B- soll anhand der verantwortlichen Kostenstelle der sprechende Schlüssel übersetzt werden:
IF AUFK-PRCTR CS 'BS-'.
Schritt 4:
Die Übersetzung des Kostenstellenschlüssels soll jedoch nur bei numerischen Kostenstellen erfolgen:
IF AUFK-KOSTV CO '1234567890'.
Schritt 5:
Diverse Bedingungen (IF Schleife) zur Übersetzung des Kostenstellenschlüssels, wobei die Kostenstelle hier mit führenden 0 auf zehn Zeichen geprüft wird.Die Unterscheidung der Abteilungen ist anhand der ersten Ziffer der Kostenstellenummer zu sehen:
- 1 = Verwaltung
- 2 = Einkauf
- 3 = Gebäude
- 4 = Redaktion
- 5 = Produktion
IF
AUFK-KOSTV BETWEEN '0001000000' AND '0001999999'.
ZABTEILUNG = 'Verwaltung'.
ELSEIF
AUFK-KOSTV BETWEEN '0002000000' AND '0002999999'.
ZABTEILUNG = 'Einkauf'.
ELSEIF
AUFK-KOSTV BETWEEN '0003000000' AND '0003999999'.
ZABTEILUNG = 'Gebäude'.
ELSEIF
AUFK-KOSTV BETWEEN '0004000000' AND '0004999999'.
ZABTEILUNG = 'Redaktion'.
ELSEIF
AUFK-KOSTV BETWEEN '0005000000' AND '0005999999'.
ZABTEILUNG = 'Produktion'.
ENDIF.
Schritt 6:
Die Prüfung des Intervalles der Kostenstelle ist damit abgeschlossen und wir schließen beide IF Schleifen (Nummernschlüssel Kostenstelle und Profitcenterprüfung)
ENDIF.
ENDIF.
Dieses Zusatzfeld kann nun in der Grundliste der Query mit aufgenommen werden.
Das vollständige Coding zum Zusatzfeld lautet also:
CLEAR ZABTEILUNG.
IF AUFK-PRCTR NS 'B-'.
ZABTEILUNG = 'NR'.
ENDIF.
IF AUFK-PRCTR CS 'BS-'.
IF AUFK-KOSTV CO '1234567890'.
IF
AUFK-KOSTV BETWEEN '0001000000' AND '0001999999'.
ZABTEILUNG = 'Verwaltung'.
ELSEIF
AUFK-KOSTV BETWEEN '0002000000' AND '0002999999'.
ZABTEILUNG = 'Einkauf'.
ELSEIF
AUFK-KOSTV BETWEEN '0003000000' AND '0003999999'.
ZABTEILUNG = 'Gebäude'.
ELSEIF
AUFK-KOSTV BETWEEN '0004000000' AND '0004999999'.
ZABTEILUNG = 'Redaktion'.
ELSEIF
AUFK-KOSTV BETWEEN '0005000000' AND '0005999999'.
ZABTEILUNG = 'Produktion'.
ENDIF.
ENDIF.
ENDIF.
Weitere Beispiele ABAP Code im Zusatzfeldcoding
Ein umfangreicheres Beispiel inklusiver einer SELECT Abfrage über alle passenden Ergebnisse zur Abfrage über die verantwortliche Kostenstelle des CO Innenauftrags und eines Feld innerhalb der Kostenstellenstammdaten ist im folgenden Coding zu sehen. Dabei sind im folgenden Code die Regeln als Kommentar mit vorangestellten * im Coding hinterlegt.Zusatzfeld VLE (Typ C und Länge 030).
DATA: L_CSKSTELTX type CSKS-TELTX.
* Regel 1 Für das Intervall der Kostenstellen 10000000 bis 12345678
IF AUFK-KOSTV => '0010000000' AND AUFK-KOSTV =< '0012345678'.
* Regel 1.1 Die ersten Ziffern der Kostenstelle ohne führende 00
WRITE AUFK-KOSTV(6) TO VLE NO-ZERO .
* Regel 1.2 Sonderfälle einzelner Kostenstelle
ELSEIF AUFK-KOSTV => '0011110000' AND AUFK-KOSTV =< '0011119999'.
VLE = '1111BE'.
ELSEIF AUFK-KOSTV = '0012340000'.
VLE = '1234BE'.
* Regel 2 Verantwortliche Kostenstelle ohne führende 00
ELSE.
WRITE AUFK-KOSTV TO VLE NO-ZERO .
ENDIF.
* Regel 3 Feld Teletexnummer (Stammdaten Kostenstelle - Tabelle CSKS) ist gefüllt
SELECT teltx FROM csks INTO L_CSKSTELTX up to 1 rows
WHERE kokrs = AUFK-KOKRS
AND kostl = AUFK-KOSTV
and datbi >= SY-DATUM
and teltx ne space.
ENDSELECT.
IF sy-subrc = 0.
VLE = L_CSKSTELTX.
ENDIF.
Eine inhaltliche Erläuterung ist im Artikel "Query über COEP, AUFK und FMFINCODE für Einzelposten Istkosten Innnenauftrag mit Stammdaten aus CO und PSM-FM sowie Spalten für Ertrag und Aufwand - Erster Teil Infoset als Datengrundlage" im Abschnitt "Zusatzfeld VLE zur Darstellung virtueller Lehreinheit aus Teilstring der verantwortlichen Kostenstelle, sofern nicht in einem anderen Feld ein Wert steht" erläutert.
Gerade im Berichtswesen ist es hilfreich, sich einige Werkzeuge zum Reporting und ihre Möglichkeiten näher anzusehen.
Im Buch »Berichtswesen im SAP®-Controlling« bin ich ausführlich auf dies Thema eingegangen.
(01. Juni 2017) Paperback ISBN: 9783960127406
Für 19,95 € direkt bestellen
Oder als SAP Bibliothek-Flatrate *
Oder bei Amazon *
Dabei sind SAP Query und Report Painter für mich noch immer praktische Tools um Berichte zu erstellen.
Hinweis:
Eine kurze Einführung in das Thema SAP Query habe ich im Artikel
"Grundlagen Kurzeinführung und Handbuch SAP Query" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können.
ein Angebot von Espresso Tutorials
unkelbach.link/et.books/
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
Diesen Artikel zitieren:
Unkelbach, Andreas: »SAP Query ABAP Coding zum Zusatzfeld Inhalt eines Strings auswerten« in Andreas Unkelbach Blog (ISSN: 2701-6242) vom 18.5.2024, Online-Publikation: https://www.andreas-unkelbach.de/blog/?go=show&id=1347 (Abgerufen am 3.10.2024)
Keine Kommentare - Permalink - SAP
Artikel datenschutzfreundlich teilen
🌎 Facebook 🌎 Twitter 🌎 LinkedIn