Ob Feld etwas beinhaltet

Getting started ... Alles für einen gelungenen Start.
24 Beiträge • Seite 1 von 2 (current) Nächste
24 Beiträge Seite 1 von 2 (current) Nächste

Ob Feld etwas beinhaltet

Beitrag von cschmoel (ForumUser / 84 / 26 / 0 ) »
Hallo alle zusammen :)

Habe folgende Frage, und zwar, bei C# gibt es die Möglichkeit, ob eine Variable etwas beeinhaltet

z.B. IF <Variable> == NULL

Wie wende ich so etwas in ABAP an?
Bzw. wäre es nett wenn sich jemand die Mühe machen würde und einen kleinen Beispiel Quellcode posten könnte :)

Anfangs versuchte ich es mit IS NOT INITIAL, aber das hat irgendwie nicht so ganz funktioniert, da es immer nur geprüft hat ob etwas im Eingabefeld steht :o

Code: Alles auswählen.

IF s_bps_fr IS NOT INITIAL.
   MESSAGE 'Keine Kontaktdaten vorhanden' TYPE 'I'
.

Wäre sehr dankbar, wenn mir jemand ein Muster schicken könnte :)

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Ob Feld etwas beinhaltet

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
hmm wie wäre es mit

Code: Alles auswählen.

if s_bps_fr eq ''.
<:: XING-Gruppe Tricktresor::>

Re: Ob Feld etwas beinhaltet

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
cschmoel hat geschrieben:

Code: Alles auswählen.

IF s_bps_fr IS NOT INITIAL.
   MESSAGE 'Keine Kontaktdaten vorhanden' TYPE 'I'
.
der Ansatz ist ja schon richtig, du musst nur folgendes beachten:
IF s_bps_fr IS NOT INITIAL --> das Ergebnis ist TRUE, wenn in dem Feld etwas drin steht, es also NICHT INITIAL ist
IF s_bps_fr IS INITIAL --> das Ergebnis ist TRUE, wenn das Feld leer, also INITIAL ist
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Ob Feld etwas beinhaltet

Beitrag von cschmoel (ForumUser / 84 / 26 / 0 ) »
Nein, das meinte ich nicht ...

Ich meinte, wie man abprüft, ob werte in einer bestimmten Variable vorhanden sind :)

Re: Ob Feld etwas beinhaltet

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hi,

Alexander hat Recht!
Wenn du prüfen willst, ob eine V leer oder gefüllt ist, dann am einfachsten mit is initial.

Code: Alles auswählen.

    IF s_bps_fr IS NOT INITIAL.
       MESSAGE 'Keine Kontaktdaten vorhanden' TYPE 'I'
Macht keinen Sinn:
Richtig:

Code: Alles auswählen.

If s_bps_fr IS INITIAL.
Message: Es ist leer!
Gruße coco

Re: Ob Feld etwas beinhaltet

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
In ABAP werden alle Variablen mit der Deklaration initialisiert --> es gibt kein NULL.
Ausnahme: Referenzen / Feldsymbole ( Zeiger ). Ob diese auf ein existierendes Objekt/Variable zeigen kann man mit der Prüfung "IS BOUND oder IS ASSIGNED" prüfen. Beim Lesen/Schreiben von ins Nirvana zeigenden Zeigern kommt es zu einem Kurzdump.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Ob Feld etwas beinhaltet

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
cschmoel hat geschrieben:

Code: Alles auswählen.

IF s_bps_fr IS NOT INITIAL.
   MESSAGE 'Keine Kontaktdaten vorhanden' TYPE 'I'
.
Ist s_bps_fr per SELECT-OPTION definiert?
Gruß Hendrik

Re: Ob Feld etwas beinhaltet

Beitrag von cschmoel (ForumUser / 84 / 26 / 0 ) »
S_bps_to ist in einem SELECTION-SCREEN als PARAMETER definiert :)

Sorry normal sollte es p_bps_to heißen zum leichteren Verständnis :P

Re: Ob Feld etwas beinhaltet

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
cschmoel hat geschrieben:Nein, das meinte ich nicht ...

Ich meinte, wie man abprüft, ob werte in einer bestimmten Variable vorhanden sind :)
ich denke schon, dass es die Antwort auf deine Frage war. Hier ein Beispiel zum Nachvollziehen:

Code: Alles auswählen.

PARAMETERS: p_bps_to TYPE c LENGTH 1.

IF p_bps_to IS INITIAL.
  MESSAGE 'KEINE Werte vorhanden, Variable ist INITIAL' TYPE 'I'.
ENDIF.

IF p_bps_to IS NOT INITIAL.
  MESSAGE 'Werte vorhanden, Variable ist NICHT INITIAL' TYPE 'I'.
ENDIF.
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Ob Feld etwas beinhaltet

Beitrag von Murdock (Specialist / 115 / 55 / 8 ) »
Da das ein Thema ist, welches mich an ABAP auch stört / irritiert, krame ich den Thread noch mal nach oben :)

Um es auf den Punkt zu bringen, es gibt kein NULL (wie black_adept schon angemerkt hat) und "is initial" ist ein schlechter Ersatz.

Code: Alles auswählen.

DATA: x TYPE i.      

IF x IS INITIAL.
  WRITE: / 'Kein Wert in X'.
ELSE.
  WRITE: /  'X hat einen Wert'.
ENDIF.

* Äusserst komplizierte Berechnungen...
x = 10 - ( 20 / 2 ).

IF x IS INITIAL.
  WRITE: / 'Kein Wert in X nach Berechnung'.
ELSE.
  WRITE: /  'X hat einen Wert nach Berechnung'.
ENDIF.
Und die Ausgabe ist, wie vom SAP Fachmann erwartet und vom Anfänger / Laien kopfschütteln zur Kenntnis genommen:

Code: Alles auswählen.

Kein Wert in X
Kein Wert in X nach Berechnung
Das ist falsch würde ich mal behaupten. Mit "is NULL" wäre das nicht passiert.

Gruß,
Murdock.

Re: Ob Feld etwas beinhaltet

Beitrag von cschmoel (ForumUser / 84 / 26 / 0 ) »
Ja genau !!!!!!

Da hast du vollkommen Recht :D genau so hab ich das auch gemeint

Re: Ob Feld etwas beinhaltet

Beitrag von ewx (Top Expert / 4786 / 294 / 629 ) »
Murdock hat geschrieben:Kein Wert in X nach Berechnung
Das ist falsch würde ich mal behaupten.
Da wirst du aber viele Diplom-Mathematiker auf den Plan rufen (mindestens einen...) mit der Behauptung "0" sein kein Wert!

Wenn man eine Berechnung durchführt, dann kommt immer ein Ergebnis dabei raus.
Es sei denn, mach versucht durch "keinen Wert" zu dividieren.
Dann kracht's.

Ich persönlich kenne keinen Fall, in dem es nötig wäre in einem Programm erkennen kennen zu müssen, ob eine Variable tatsächlich "gefüllt" ist (oder wurde) oder nicht.

Klar, wenn ich eine Methode aufrufe und "keinen Wert" zurück bekomme, dann weiß ich im Zweifelsfall nicht, ob der Wert so berechnet wurde oder ob eine Berechnung gar nicht statt gefunden hat.
Im zweiten Fall muss aber die berechnende Funktion eine Fehlermeldung zurück liefern. Oder eben nicht, weil der Programmierer der Funktion entschieden hat, dass es für den Aufrufer egal ist, ob ein Wert ermittelt wurde oder nicht. Für beides gibt es sicherlich genug Beispiele.
Beispiel 1 "Berechnung Versandkosten"
Eingabe: Länge, Höhe, Breite des zu versendenden Kartons
Rückgabe: Versandkosten
Wenn keine Breite übergeben wird, dann können keine Versandkosten ermittelt werden. Dies muss durch einen Fehler deutlich gemacht werden. Schließlich weiss nur die Funktion, warum keine Versandkosten berechnet werden konnten. Wäre eine "Rückgabe ohne Wert" erfolgt, könnte zwar der Aufrufer erkennen: oha. der hat nix berechnet, aber er wüsste nicht warum.
Beispiel 2 "Vorschlagswerte ermitteln"
Eingabe: Vertriebsbereich
Rückgabe: Vorschlagswert für Auftragsart
Wenn hier keine Werte ermittelt werden, dann ist halt wirklich "egal", denn es hat keine weiteren Auswirkungen auf den Prozess. Da ist es auch irrelevant, ob der Vorschlagswert "space" gefunden wurde, oder ob für den Vertriebsbereich gar keine Vorschlagswerte vorhanden waren.

Bei Batchinput gibt es tatsächlich den Wert "Kein Wert vorhanden": "/"

Bei Schnittstellen habe ich es mal gelernt, dass man nicht "X" und "space" für Werte setzt, weil man dann bei "leer" tatsächlich nicht erkennen kann, ob der Parameter "nicht gesetzt" oder ob er "nicht geliefert" wurde. Deshalb wurden dann "0" und "1" verwendet. Alternative wären "Y/N" oder "J/N" etc.

Verwirrender Weise gibt es "INITIAL" auf der Datenbank. Aber nur in besonderen Fällen. Und zwar dann, wenn ein Feld an eine Tabelle gehängt wird und das Flag "initialisieren" nicht gesetzt wird.
Alle vorhandenen Datensätze bekommen dann für dieses Feld den Wert "INITIAL".
Möchte man nun einen Datensatz selektieren mit "WHERE feld = SPACE", dann bekommt man keine Werte! Erst mit "WHERE feld IS INITIAL" funktioniert es.

Re: Ob Feld etwas beinhaltet

Beitrag von Murdock (Specialist / 115 / 55 / 8 ) »
ewx hat geschrieben:
Murdock hat geschrieben:Kein Wert in X nach Berechnung
Das ist falsch würde ich mal behaupten.
Da wirst du aber viele Diplom-Mathematiker auf den Plan rufen (mindestens einen...) mit der Behauptung "0" sein kein Wert!
Nur um Missverständnisse zu vermeiden: Ich behaupte nicht 0 sei kein Wert, sondern SAP / ABAP. Deshalb habe ich ja auch drunter geschrieben, dass die Ausgabe falsch sei.
Etwas vom Mathe LK ist doch noch hängen geblieben :D

Gruß,
Murdock.

Re: Ob Feld etwas beinhaltet

Beitrag von ewx (Top Expert / 4786 / 294 / 629 ) »
Murdock, in ABAP kannst du auch schreiben IF x IS INITIAL. WRITE 'X=100'...
Nichts anderes hast du mit "Kein Wert nach Berechnung" gemacht.
IS INITIAL heißt in ABAP nun mal, dass die Variable den INITIALWERT enthält aber eben nicht, dass der Variablen noch nie ein Wert zugewiesen wurde.
Das geht dann nur mit Feldsymbolen.
Hier könnte man z.B. definieren:

Code: Alles auswählen.

data X type i.
field-symbols <x> type i.
If irgendeine Bedingung.
assign ('X') to <x>.
<x> = 0.
else.
ich mach nix
endif.
If <x> is assigned.
write 'X wurde berechnet'.
else.
write 'Kein Wert für X'.
endif.
Ist aber halt recht umständlich...

Re: Ob Feld etwas beinhaltet

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
ewx hat geschrieben:Verwirrender Weise gibt es "INITIAL" auf der Datenbank. Aber nur in besonderen Fällen. Und zwar dann, wenn ein Feld an eine Tabelle gehängt wird und das Flag "initialisieren" nicht gesetzt wird.
Alle vorhandenen Datensätze bekommen dann für dieses Feld den Wert "INITIAL".
Möchte man nun einen Datensatz selektieren mit "WHERE feld = SPACE", dann bekommt man keine Werte! Erst mit "WHERE feld IS INITIAL" funktioniert es.
Das stimmt so nicht. Die Selektionsabfrage muss dann "...WHERE feld IS NULL" lauten. Aber wenn man solche Werte selektiert hat, so ist der Feldinhalt der Variablen, die den Wert aufnimmt nicht NULL sondern INITIAL.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vergleichbare Themen

2
Antw.
1430
Views
Überprüfen ob einer Rolle auch User beinhaltet
von chnollu » 03.03.2010 14:32 • Verfasst in ABAP® Core
0
Antw.
3575
Views
IDoc-Datei beinhaltet Segmente weniger als 1063 Byte
von genua » 10.01.2008 13:06 • Verfasst in Java & SAP®
2
Antw.
1893
Views
Feld sperren, wenn in and. Feld gerade etwas eingegeben wird
von kbit100 » 18.07.2018 11:41 • Verfasst in ABAP® für Anfänger
0
Antw.
345
Views
Setze EMARA Feld in Bapi bei IDOC Verarbeitung. Feld aber nachher leer
von Woelli » 12.02.2021 16:32 • Verfasst in ABAP® Core
0
Antw.
1733
Views

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.