Andreas Unkelbach
Logo Andreas Unkelbach Blog

Andreas Unkelbach Blog

ISSN 2701-6242

Artikel über Controlling und Berichtswesen mit SAP, insbesondere im Bereich des Hochschulcontrolling, aber auch zu anderen oft it-nahen Themen.


Werbung
SAP S/4HANA Migration Cockpit - Datenmigration mit LTMC und LTMOM (📖)

Für 29,95 € direkt bestellen

Oder bei Amazon ** Oder bei Autorenwelt



Samstag, 18. Mai 2024
11:37 Uhr

SAP Query ABAP Coding zum Zusatzfeld Inhalt eines Strings auswerten

Das Thema Zusatzfeld und passendes Coding hatte ich schon im Artikel "Auswertung sprechender Nummernkreisintervalle von CO Innenaufträgen mit Query Zusatzfeldcoding und Unterscheidung numerischer oder alphanumerischer Schlüssel" besprochen.

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:

IF AUFK-AUFNR CO  '1234567890'.
* Innenauftrag hat nur Nummern
ELSEIF.
*Innenauftrag ist alphanumerisch
ENDIF.

Damit kann nun mit den vorhandenen Zahlenwerten weitergearbeitet werden.

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.
 
ABAP Vergleichsoperatoren
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
Dabei werden siebenstellige Kostenstellenschlüssel verwendet.

 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.
 
Berichtswesen im SAP®-Controlling
Verlag: Espresso Tutorials GmbH
1. Auflage
(01. Juni 2017) Paperback ISBN: 9783960127406

Für 19,95 € direkt bestellen

Oder als SAP Bibliothek-Flatrate *

Oder bei Amazon *
 
Vielleicht finden sich hier ja auch noch weitere Anregungen für den Aufbau eines Berichtswesen mit SAP nicht nur für CO im Buch.

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.




Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionen und Bestellmöglichkeit zu finden.
SAP Weiterbildung
ein Angebot von Espresso Tutorials
SAP Weiterbildung - so wirksam wie eine gute Tasse Espresso

unkelbach.link/et.books/

unkelbach.link/et.reportpainter/

unkelbach.link/et.migrationscockpit/



Tags: ABAP Query CO

Keine Kommentare - - SAP

Artikel datenschutzfreundlich teilen

🌎 Facebook 🌎 Twitter 🌎 LinkedIn


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

Diesen und weitere Texte von finden Sie auf http://www.andreas-unkelbach.de


Keine Kommentare

Kommentieren?


Beim Versenden eines Kommentars wird mir ihre IP mitgeteilt. Diese wird jedoch nicht dauerhaft gespeichert; die angegebene E-Mail wird nicht veröffentlicht: beim Versenden als "Normaler Kommentar" ist die Angabe eines Namen erforderlich, gerne kann hier auch ein Pseudonyme oder anonyme Angaben gemacht werden (siehe auch Kommentare und Beiträge in der Datenschutzerklärung).

Eine Rückmeldung ist entweder per Schnellkommentar oder (weiter unten) als normalen Kommentar möglich. Eine persönliche Rückmeldung (gerne auch Fragen zum Thema) würde mich sehr freuen.

Schnellkommentar (Kurzes Feedback, ausführliche Kommentare bitte unten als normaler Kommentar)





Ich nutze zum Schutz vor Spam-Kommentaren (reine Werbeeinträge) eine Wortliste, so dass diese Kommentare nicht veröffentlicht werden. Sollte ihr Kommentar nicht direkt veröffentlicht werden, kann dieses an einen entsprechenden Filter liegen.

Im Zweifel besteht auch immer die Möglichkeit eine Mail zu schreiben oder die sozialen Medien zu nutzen. Meine Kontaktdaten finden Sie auf »Über mich« oder unter »Kontakt«. Ansonsten antworte ich tatsächlich sehr gerne auf Kommentare und freue mich auf einen spannenden Austausch.












* Amazon Partnerlink/Affiliatelinks/Werbelinks
Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
Weitere Partnerschaften sind unter Onlineshop und unter Finanzierung und Transparenz aufgeführt. Hinauf






Logo Andreas-Unkelbach.de
Andreas Unkelbach Blog
ISSN 2701-6242

© 2004 - 2024 Andreas Unkelbach
Gießener Straße 75,35396 Gießen,Germany
andreas.unkelbach@posteo.de

UStID-Nr: DE348450326 - Kleinunternehmer im Sinne von § 19 Abs. 1 UStG

Andreas Unkelbach

Stichwortverzeichnis
(Tagcloud)


Aktuelle Infos (Abo)

Facebook Twitter XING

Linkedin Mastodon Bluesky

Amazon Autorenwelt Librarything

Buchempfehlung
Schnelleinstieg ins SAP®-Controlling (CO) – 2., erweiterte Auflage

29,95 € Amazon* Autorenwelt

Espresso Tutorials

unkelbach.link/et.reportpainter/

unkelbach.link/et.migrationscockpit/

Privates

Kaffeekasse 📖 Wunschliste