Logical expression IN

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Logical expression IN

Beitrag von hbahnen (ForumUser / 3 / 0 / 0 ) »
Hi,

hab da mal ein Problem.

Ich will prüfen (in einen FuBa, deswegen kann ich die Ranges nicht über select-option deklarieren) on ein Wert in einer Rangetabelle enthalten ist.

Das tolle Beispiel der Online doku funktioniert nur, wenn der Wert über sy-index zugewiesen wird. Warum? Ich will prüfen, ob in er Rangetabelle der Wert '004' enthalten ist.

Anbei mal das etwas erweiterte beispiel von SAP mit dem part von mir, der schon nicht mehr funzt.

Was muss ich denn machen, damit diese logik "richtig" funktioniert?

Gruß, Hendrik

Code: Alles auswählen.

REPORT  YTEST_HB3.

DATA number TYPE i.
DATA number2 TYPE i.

ranges: s_number FOR number.

s_number-sign   = 'I'.
s_number-option = 'EQ'.
s_number-low    = 9.
APPEND s_number TO s_number.

s_number-sign   = 'I'.
s_number-option = 'BT'.
s_number-low    = 3.
s_number-high   = 7.
APPEND s_number TO s_number.

s_number-sign   = 'E'.
s_number-option = 'EQ'.
s_number-low    = 6.
APPEND s_number TO s_number.

s_number-sign   = 'E'.
s_number-option = 'BT'.
s_number-low    = 1.
s_number-high   = 4.
APPEND s_number TO s_number.

DO 10 TIMES.
  number = 9.
  IF number in s_number.
    WRITE: / sy-index, ' number = 9'.
  ENDIF.
ENDDO.

DO 10 TIMES.
  number = sy-index.
  IF number in s_number.
    WRITE: / sy-index, ' number = sy-index'.
  ENDIF.
ENDDO.

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


Funzt nicht einmal so:

Beitrag von hbahnen (ForumUser / 3 / 0 / 0 ) »
Habs noch mal so ausprobiert. Klappt aber auch nicht :(
(Als Beispiel in meinem Fuba)

Code: Alles auswählen.

SELECTION-SCREEN BEGIN OF SCREEN 100.
select-options:  car_inc for vcar_inc no-display.
select-options:  csr_inc for vcsr_inc no-display.
select-options:  cst_inc for vcst_inc no-display.
select-options:  plt_inc for vplt_inc no-display.
select-options:  ov_inc for vov_inc no-display.
select-options:  sdifc_cr for vsdifc_cr no-display.
select-options:  sdifc_ls for vsdifc_ls no-display.
select-options:  sdifc_oc for vsdifc_oc no-display.
select-options:  sdifc_ot for vsdifc_ovt no-display.
SELECTION-SCREEN END OF SCREEN 100.

Beitrag von ChrisB (Specialist / 406 / 8 / 20 ) »
Hallo,

wieso machst Du um die erste Prüfung eine Schleife? Der Teil

Code: Alles auswählen.

number = 9.
IF number IN s_number.
  WRITE: / sy-index, ' number = 9'.
ENDIF.
funktioniert ohne die DO-Schleife. Hier prüfst Du ja nur gegen einen festen Wert... und da sollte ein Durchlauf reichen :wink:

Oder welcher Teil Deines Ergebnisses gefällt Dir nicht?

Gruß,
Chris

PS: Ohne die Schleife erhalte ich folgendes Ergebnis:
0 number = 9
5 number = sy-index
7 number = sy-index
9 number = sy-index
Und das ist, soweit ich das sehe, völlig korrekt.

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
ChrisB hat geschrieben:Und das ist, soweit ich das sehe, völlig korrekt.
Ja.
Bestimmt hat Hendrik da etwas übersehen.


@Hendrik

Füll doch mal deine SELECT-OPTION zu INITIALIZATION und prüfe, ob Dir das Ergebnis einleuchtet, wenn Du den Ihnalt der Select-Option nach einen CALL SELECTION-SCREEN prüfst.
Gültig sind (wegen der beiden INCLUDING-Einträge
3-7 und 9.
Durch die EXCLUDING-Einträge werden 1-4 und 6 verboten, bleiben 5, 7 und 9.

Oder Du sagst einfach mal, was Du erwartet hättest.

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Mein Vorschlag für die erste DO-Schleife:

Code: Alles auswählen.

number = 0.
DO 10 TIMES.
  number = number + 1.
  IF number IN s_number.
    WRITE: / sy-index, ' number = number'.
  ENDIF.
ENDDO.
Dann sieht das Gesamtergebnis wie folgt aus:

Code: Alles auswählen.

 5   number = number  
 7   number = number  
 9   number = number  
 5   number = sy-index
 7   number = sy-index
 9   number = sy-index
Und wie Frank und Chris schon bemerkt haben: Das Ergebnis ist völlig korrekt.
Siehe SAP-Doku:

Code: Alles auswählen.

Die durch die gesamte Tabelle sel festgelegte Menge ist dieVereinigungsmenge der "Inclusive-Mengen" (Zeilen mit SIGN = 'I')abzüglich der Vereinigungsmenge der "Exclusive-Mengen" (Zeilen mitSIGN = 'E'). 
Gruß
donny

Ach du meine Güte

Beitrag von hbahnen (ForumUser / 3 / 0 / 0 ) »
Jungs,

ich habe totalen Mist gemacht.

Ihr habt ja alle völlig Recht. Das funktioniert wie gewünscht.

Ich habs dann auch erst gemerkt, als ich Eure Antworten sah :oops:

Gruß, Hendrik

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1078
Views
Regular Expression ?
von HStev » 12.04.2005 08:47 • Verfasst in ABAP® Core
1
Antw.
6128
Views
CDS View, Problem mit Case expression
von RaCDigger » 02.02.2017 15:36 • Verfasst in ABAP® Core
12
Antw.
4846
Views
Regulär Expression Stringsuche inkl. Sonderzeichen
von VB2012 » 24.09.2012 14:45 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor 11 Stunden von tar 8 / 265
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1553
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 200
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 442

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.

Aktuelle Forenbeiträge

Regex in where
vor 11 Stunden von tar 8 / 265
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1553
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 200
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 442

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 145
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3321
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9874