SAPScript: IF-Abfrage funktioniert nicht

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

SAPScript: IF-Abfrage funktioniert nicht

Beitrag von piemo (ForumUser / 40 / 0 / 0 ) »
Hallo allerseits,

in meinem SAPScript-Bestellformular soll die Incoterms-Klausel (EKKO-INCO1) nur ausgeben werden, wenn sie alphabetisch anstatt numerisch ist. Habe daher ein IF-Statement geschrieben wie folgt:

/: IF &EKKO-INCO1& = '1' OR &EKKO-INCO1& > '1'
ZN ErsteBedingung
/: ELSE
ZN ZweiteBedingung
/: ENDIF

Leider funktioniert das so nicht - es wird überhaupt kein Wert mehr ausgegeben, auch wenn alphabetisch (z. B. CIF). Was mache ich falsch?

Gruß, piemo

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


SAPscript

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,
ich würde die Abfrage umstellen evtl. so:

/: IF &EKKO-INCO1& ca '1234567890'.
Damit abfragen ob nur numerische Zeichen vorkommen.
die Abfrage könnte auch CS statt CA lauten.
Bitte probieren.
Gruß Wolfgang

Beitrag von piemo (ForumUser / 40 / 0 / 0 ) »
Hallo,

danke für die schnelle Antwort.
Leider funktionieren beide Varianten nicht.
Es werden dann beide Zeilen ausgegeben, also ErsteBedingung + ZweiteBedingung - egal, ob ich die Klausel numerisch od. alphabetisch setze. :(

Gruß, piemo

Beitrag von piemo (ForumUser / 40 / 0 / 0 ) »
Habe es jetzt mit einem CASE-Konstrukt hinbekommen:

/: CASE &EKKO-INCO1(1)&
/: WHEN '0'
ZN ErsteAnweisung
/: WHEN '1'
ZN ErsteAnweisung
/: WHEN '2'
usw. ...
/: WHEN OTHERS
ZN ZweiteAnweisung
/: ENDCASE

Dadurch ergibt sich allerdings ein ziemlicher "Rattenschwanz". Ich kann mir aber denken, dass es da sicherlich eine sauberere Lösung gibt, oder?
Bitte lasst mich nicht dumm sterben! :P

Gruß, piemo

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Das IF sollte eigentlich gehen. Ich würde mir das Feld mal im Formular andrucken lassen um zu sehen was drin steht (einmal komplett und einmla nur das 1. Zeichen). Vielleicht fängt dein Feld ja mit Blank an.
Zum anderen kann man das > auch mal durch GE ersetzen, dann brauchst du dein OR nicht mehr.

MfG

Thomas

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo zusammen,

bedenkt bitte, dass das IF-Kommando im SAPScript in keinster Weise mit dem IF-Befehl im ABAP zusammenhängt.
Das IF-Kommando versteht nur recht einfache Konstrukte und vor allen keine Zeichenketten-Operatoren à la CS oder CA...

In der Hilfe zu SAPScript (Release 4.6C) steht folgendes:
SAP hat geschrieben:Bedingte Textausgabe: IF

Mit dem IF-Steuerkommando können Sie erreichen, daß Textzeilen nur unter bestimmten Bedingungen ausgegeben werden. Wenn der beim IF-Kommando angegebene logische Ausdruck erfüllt ist, werden die durch IF... ENDIF eingeschlossenen Textzeilen ausgegeben, ansonsten werden sie ignoriert.

Syntax:

/: IF Bedingung
:
:
/: ENDIF

In der Bedingung sind die folgenden Vergleichsoperatoren möglich:

= EQ gleich
< LT kleiner
> GT größer
<= LE kleiner oder gleich
>= GE größer oder gleich
<> NE ungleich

Als logische Verknüpfungsoperatoren können Sie verwenden:

* NOT

* AND

* OR

Die Abarbeitungsreihenfolge der logischen Vergleichsoperatoren sowie die Auswertungsreihenfolge der Bedingungen ist immer von links nach rechts. Es gibt keine Bindungsstärke. Klammerungen werden nicht unterstützt.

Der Vergleich wird immer als Literalvergleich durchgeführt, d.h., Symbole werden in ihrer aufbereiteten Form als Zeichenkette verglichen und nicht mit ihrer internen Darstellung. Dies muß besonders bei Programmsymbolen beachtet werden, deren Aufbereitung von unterschiedlichen Parametern abhängt. Als Beispiel seien hier Währungsfelder genannt, die je nach Währungsschlüssel mit unterschiedlicher Dezimalstellenanzahl ausgegeben werden, oder das Dezimaltrennzeichen, das je nach Einstellung ein Punkt oder ein Komma sein kann.

Das IF-Kommando kann durch das ELSE-Kommando zu einer zweitseitigen Fallunterscheidung erweitert werden. Ist die beim IF angegebene Bedingung wahr, so werden die zwischen IF und ELSE aufgeführten Textzeilen aufbereitet, andernfalls die zwischen ELSE und ENDIF.

Syntax:

/: IF Bedingung
:
/: ELSE
:
/: ENDIF

Durch das ELSEIF-Kommando ist eine mehrstufige Fallunterscheidung möglich.

Syntax:

/: IF Bedingung
:
/: ELSEIF Bedingung
:
/: ELSE
:
/: ENDIF

Es können beliebig viele ELSEIF-Kommandos verwendet werden. Die Angabe eines ELSE-Kommandos ist in diesem Fall optional.

Anmerkungen:

* Die Bedingung darf sich nicht über mehrere Zeilen erstrecken, sondern muß zusammen mit dem IF- bzw. ELSEIF-Kommando in einer Zeile Platz haben.

* IF-Kommandos können auch geschachtelt werden.

* Ein IF-Kommando muß immer durch ein ENDIF abgeschlossen werden. Wird dies vergessen, so wird nach dem IF-Kommando nichts mehr ausgegeben, wenn die Bedingung falsch ist.

* Wird bei Interpretation dieser Kommandos ein Syntaxfehler festgestellt, so wird das entsprechende Kommando nicht ausgeführt. Dies kann verschiedene Auswirkungen auf die nachfolgende Textausgabe haben. Ist z.B. das IF-Statement falsch aufgebaut, so werden die folgenden ELSEIF- bzw. ELSE-Kommandos ignoriert, da das öffnende IF fehlt. In diesem Fall werden alle Textzeilen ausgegeben.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von index (ForumUser / 17 / 0 / 0 ) »
Hi

ekko-inco1 ist ein 3-stelliges charfeld das ihr versucht mit ='1' ind > '1' abzufragen.

Kann es sein, dass da 001 drinsteht ?
Ich würde im Programm eine Variable mit dem Vergleichswert füllen und
im Form dann diese vergleichen

if ekko-inco1 = myekkoinco or ekko-inco1 > myekkoinco.

Weiter wäre zu prüfen, was > '1' bei einem Feld heissen soll, wo auch 'ABC' drinstehen kann.

Schaut man sich am besten im DEBUGGER an um zu sehen, was tatsächlich in inco1 drinsteht.

Beitrag von piemo (ForumUser / 40 / 0 / 0 ) »
Hallo alle,

vielen Dank für eure Antworten.
Scheint mein "CASE-Rattenschwanz" also wohl die einzige Lösung zu sein? Na ja, immerhin funzt es so.

@index: Ich habe die IF-Abfrage zuvor auch mit '0' versucht, mit Verknüpfungsoperatoren, mit ELSEIF ... auch nur die erste Stelle abzufragen (EKKO-INCO1(1) ), aber hat alles nicht funktioniert.
Im Druckprogramm durfte ich leider nichts ändern - laut Anweisung "von ganz oben" sollte ich ausschließlich im Formular ändern, deshalb ...
Ich war jedenfalls der Meinung, alles ausgereizt zu haben in puncto "IF".
Falls aber doch noch jemand eine elegantere Lösung wissen sollte, nur zu! :wink:

Gruß, piemo

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
piemo hat geschrieben:Falls aber doch noch jemand eine elegantere Lösung wissen sollte, nur zu! :wink:
"elegant" ist in dem Fall vielleicht nicht so gaaaanz treffend, aber: Es gibt noch den externen Perform...

Code: Alles auswählen.

PERFORM ABC IN PROGRAM XYZ USING/CHANGING...
Damnit könntest du per ABAP deine Bedingung vereinfachen, so dass z.B. Werte "A", "B" oder "C" rauskommen.
Die kannst du dann in Einernichtganzsolangencaseanweisung vielleicht besser abfragen.
Ich finde die PERFORMS im SAPSkript nicht so doll, da sie recht umständlich sind, aber: wer Änderungen im Druckprogramm kategorisch verbietet, der verdient es nicht besser... :lol:

Beitrag von piemo (ForumUser / 40 / 0 / 0 ) »
@Enno: Vielen Dank für den tollen Tipp (sorry, lese jetzt erst dein Posting, da ich in Urlaub war)!

Gruß, piemo

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3525
Views
SQL Abfrage - group by funktioniert nicht
von b0rsti » 16.06.2008 10:42 • Verfasst in ABAP® für Anfänger
5
Antw.
3416
Views
Sapscript: IF Befehl funktioniert irgendwie nicht
von alicemal » 17.07.2008 10:19 • Verfasst in ABAP® Core
9
Antw.
2952
Views
SQL-Abfrage
von abap-strizi » 23.02.2006 14:08 • Verfasst in ABAP® Core
4
Antw.
1930
Views
DB-Abfrage
von Paule » 02.02.2006 11:27 • Verfasst in ABAP® für Anfänger
2
Antw.
2481
Views
Komplexe SQL-Abfrage
von km216 » 14.03.2011 15:52 • 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 2 Stunden von tar 8 / 181
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

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 2 Stunden von tar 8 / 181
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822