CHECK STATEMENT ohne Vergleichsoperator (?)

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von Dominic (ForumUser / 33 / 8 / 1 ) »
Hallo,

Vorab, bin im HR-Umfeld unterwegs.
Habe gerade einen Report in die Finger bekommen mit folgender Methode.
Mir ist nicht ganz klar was dieses CHECK hier macht.
Es gibt keinen Vergleichsoperator.
Bei lgart1, etc. handelt es sich um Ranges (Select-Options).

Worauf wird hier geprüft?
Es ist keine lgart Variable vorhanden bei der geprüft werden könnte
ob sie in diesen Ranges drin ist.

Code: Alles auswählen.

*Gueltige Lgart
form check-lgart
  using gueltig spalte.
  gueltig = false.
  case spalte.
    when '1'. check lgart1.
    when '2'. check lgart2.
    when '3'. check lgart3.
    when '4'. check lgart4.
    when '5'. check lgart5.
**    when '8'. check lgart8.           "20050329F#RÖ       "20171211F#RÖ
**    when '9'. check lgart9.           "20050329F#RÖ       "20171211F#RÖ
    when '10'. check lgart10.         "20060811F#RÖ
    when others.
  endcase.
* check lgart.
  gueltig = true.
endform.  " CHECK-LGART.


Hier noch die SELECT-OPTIONS:

Code: Alles auswählen.

data:
  begin of inttab occurs 10.           " für indirekte Bewertung
    include structure pbwla.
select-options:
        lgart1   for inttab-lgart,              
        lgart2   for inttab-lgart,             
        lgart3   for inttab-lgart,             
        lgart4   for inttab-lgart,              
        lgart5   for inttab-lgart,             
        lgart10  for inttab-lgart,              

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


Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Schau dir mal die F1 Hilfe zu CHECK an, spezifisch CHECK SELECT-OPTIONS.

Folgende Benutzer bedankten sich beim Autor Legxis für den Beitrag:
Dominic

( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von Dominic (ForumUser / 33 / 8 / 1 ) »
Ok danke. Ich hatte hier nicht spezifisch auf die CHECK SELECT-OPTIONS geschaut.
Allerdings eine Frage noch zu Klarstellung.
Der Aufruf erfolgt ja nicht (wie in der F1-Hilfe beschrieben) in direkter Verbindung mit einem GET-Aufruf. Ich vermute mal es wird hier mit der P0008 dann gegengeprüft. Kann ich das irgendwie prüfen ob dem wirklich so ist?

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von DeathAndPain (Top Expert / 1797 / 214 / 396 ) »
CHECK SELECT-OPTIONS. ist hier nicht die richtige Antwort. Zum einen setzt er die Verwendung einer logischen Datenbank voraus, zum anderen kann er nur atomar ohne Parameter angegeben werden.

Dominic, Deine Frage ist berechtigt. CHECK darf man so nicht verwenden. Ich habe das gerade mal getestet. Anscheinend ist der CHECK erfolgreich, wenn die Komponente LOW der Selektionsoption initial und SIGN = 'I' ist. Wahrscheinlich versucht ABAP das Feld irgendwie anders zu interpretieren und achtet dabei nur auf das erste Feld. Das ist aber auf jeden Fall eine unsaubere Vergewaltigung, die ich nicht nachmachen würde, ebenso wie einer Form einen Namen mit Bindestrich drin zu geben, was hier ja auch der Fall ist.

Die Programmlogik ist dementsprechend auch nicht zu Ende gedacht, denn ich glaube nicht, dass er die Zuweisung seines Feldes GUELTIG davon hat abhängig machen wollen.

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
DeathAndPain hat geschrieben:
13.03.2020 15:34
CHECK SELECT-OPTIONS. ist hier nicht die richtige Antwort. Zum einen setzt er die Verwendung einer logischen Datenbank voraus, zum anderen kann er nur atomar ohne Parameter angegeben werden.

das ist nicht richtig.
Siehe folgendes Beispiel ohne log. DB:

Code: Alles auswählen.

DATA gtest TYPE i..
PARAMETERS ptest TYPE i DEFAULT 4.
SELECT-OPTIONS stest FOR gtest DEFAULT 1 TO 10.
SELECT-OPTIONS unam FOR sy-uname DEFAULT sy-uname.

START-OF-SELECTION.

  gtest = ptest.
  WRITE: / 'Liegt', ptest, 'zwischen', stest-low, 'und', stest-high, '??'.
  IF stest.
    WRITE: 'JA'.
  ELSE.
    WRITE: 'NEIN'.
  ENDIF.

  IF unam.
    WRITE: / 'du bist es!'.
  ELSE.
    WRITE: / 'du bist es nicht!'.
  ENDIF.
Zugegeben, nicht sehr schön, aber möglich.

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von Thomas R. (Expert / 754 / 74 / 34 ) »
Hallo Enno
Du verwirrst mich.
Hier wird über CHECK diskutiert und Dein Code enthält dies nicht...
MfG
Thomas R.

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hi Thomas, das tut mir leid, dass ich dir Montagmorgen diese Transferleistung abverlange... ;)

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von DeathAndPain (Top Expert / 1797 / 214 / 396 ) »
Mich überforderst Du damit genauso. Ich sage, dass CHECK SELECT-OPTIONS nicht die Antwort sei, Du sagst, das stimme nicht und bietest dazu einen Beispielcode, der noch nicht mal CHECK, geschweige denn CHECK SELECT-OPTIONS beinhaltet? 😳

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
ach Jungs...
CHECK oder IF sind gefolgt von einem logischen Ausdruck.
Wichtig ist hier der log. Ausdruck, nicht das Statement.

DAP, du hast Recht, der Hinweis zum Befehl CHECK SELECT-OPTIONS passt nicht. Es gibt aber ein CHECK <select-option>. und den darf man durchaus zu verwenden. Siehe dazu mein Beispiel.

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von DeathAndPain (Top Expert / 1797 / 214 / 396 ) »
Das ist schon sehr interessant. Ich hatte schon mit eigenen Tests festgestellt, dass es sowas gibt, es aber inhaltlich nicht genau eingrenzen können. SELECT-OPTIONS benötigen ja immer ein Referenzfeld. Wenn das SELECT-OPTIONS-Feld als Bool ausgewertet wird, wird demnach also geprüft, ob der aktuelle Wert des Referenzfeldes in der SELECT-OPTION liegt?

Was passiert, wenn ich eine RANGES-Tabelle mit LIKE RANGE OF oder gar mit TYPE RANGE OF definiere? Dann gibt es ja kein explizites Referenzfeld. Ist dann dennoch eine boolesche Verwendung möglich, und wenn ja, was wird da dann ausgewertet?

Nur, wie gesagt, CHECK SELECT-OPTIONS ist eine atomare Anweisung, also unveränderlich (und damit parameterfrei) und hier nicht zu gebrauchen. Mehr hatte ich nicht gesagt. Dass es Ausdrücke gibt, die sich in ABAP boolesch interpretieren lassen, wusste ich, kannte aber nicht die genauen Zusammenhänge (die ich in der F1-Hilfe von ABAP trotz Suche bisher auch nicht gefunden habe).

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
DeathAndPain hat geschrieben:
16.03.2020 16:02
Das ist schon sehr interessant. Ich hatte schon mit eigenen Tests festgestellt, dass es sowas gibt, es aber inhaltlich nicht genau eingrenzen können. SELECT-OPTIONS benötigen ja immer ein Referenzfeld. Wenn das SELECT-OPTIONS-Feld als Bool ausgewertet wird, wird demnach also geprüft, ob der aktuelle Wert des Referenzfeldes in der SELECT-OPTION liegt?
ja.
DeathAndPain hat geschrieben:
16.03.2020 16:02
Was passiert, wenn ich eine RANGES-Tabelle mit LIKE RANGE OF oder gar mit TYPE RANGE OF definiere? Dann gibt es ja kein explizites Referenzfeld. Ist dann dennoch eine boolesche Verwendung möglich, und wenn ja, was wird da dann ausgewertet?
ausprobieren.
DeathAndPain hat geschrieben:
16.03.2020 16:02
Nur, wie gesagt, CHECK SELECT-OPTIONS ist eine atomare Anweisung, also unveränderlich (und damit parameterfrei) und hier nicht zu gebrauchen. Mehr hatte ich nicht gesagt. Dass es Ausdrücke gibt, die sich in ABAP boolesch interpretieren lassen, wusste ich, kannte aber nicht die genauen Zusammenhänge (die ich in der F1-Hilfe von ABAP trotz Suche bisher auch nicht gefunden habe).
In der ABAP-Hilfe habe ich auch nichts Genaues dazu gefunden. Die Anweisung ist aber auch sowas von obsolet - ist vielleicht ganz gut, dass der nicht dokumentiert ist...

Re: CHECK STATEMENT ohne Vergleichsoperator (?)

Beitrag von DeathAndPain (Top Expert / 1797 / 214 / 396 ) »
ausprobieren.
Fragt sich nur wie, wenn man nichts zum Vergleichen hat. Ausprobieren kann man allenfalls, ob der Interpreter einem da eine Fehlermeldung wirft.

Nützliche Anwendungsfälle würden mir schon einfallen. Beispielsweise könnte man sich auf dem Wege funktionale Methoden mit booleschem Rückgabewert basteln, die innen sicherlich etwas seltsam aussehen würden (weil sie als Rückgabewert künstlich eine RANGES-Tabelle zusammenbasteln würden, die mit dem eigentlich geprüften Kriterium gar nichts zu tun hat), deren Aufruf aber voll 1337 😎 aussehen würde.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1638
Views
Vergleichsoperator CP
von cut1 » 28.12.2006 12:09 • Verfasst in ABAP® Core
12
Antw.
4011
Views
Vergleichsoperator im Inner Join
von ManMan » 16.08.2017 16:31 • Verfasst in ABAP® für Anfänger
13
Antw.
4285
Views
Select-Statement
von Chilledkroete » 01.07.2013 12:23 • Verfasst in ABAP® für Anfänger
5
Antw.
2121
Views
LOCK Statement
von DoGaS » 22.03.2006 15:28 • Verfasst in ABAP® Core
1
Antw.
1067
Views
Frage zu einfachem SQL Statement
von Spookykid » 23.03.2011 11:42 • Verfasst in ABAP® für Anfänger

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.