neue Schreibweise COND für if then else

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

neue Schreibweise COND für if then else

Beitrag von Micha_ela (ForumUser / 29 / 0 / 0 ) »
Ich bin gerade etwas verwirrt. Über einen Produktionsfehler bin ich auf eine mir nicht bekannte Auswirkung des COND Befehls gestoßen:
Feld ist char länge 36.
vplaufendenr = '10'.
Feld = 'FELD1' && '-' && COND #( WHEN vplaufendenr = '' THEN '0'
ELSE vplaufendenr )
ergibt für Feld: FELD1-1 obwohl vplaufendenr = '10'.

Feld = 'FELD1' && '-' && COND #( WHEN vplaufendenr = '' THEN '00'
ELSE vplaufendenr )
ergibt für Feld: FELD1-10

kann mir das bitte jemand erklären ?

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


Re: neue Schreibweise COND für if then else

Beitrag von rob_abc (Specialist / 139 / 38 / 57 ) »
Unabhängigkeit von der Prüfung wird die Zielvariable mit der Länge der ersten Variable in COND typisiert. Wenn man die Abfrage umdreht oder statt # den Zieltyp fest mit gibt, funktioniert es.

"If the operand type is not known completely, an operand with a type known statically must be specified after the first THEN, except when passing the constructor parameter to an actual parameter with a generically typed formal parameter, and this type is then used. No THROW statement can be specified after THEN in this case."

Code: Alles auswählen.

REPORT.

DATA Feld type c length 36.
DATA(vplaufendenr) = '10'.
Feld = 'FELD1' && '-' && COND #( WHEN vplaufendenr = '' THEN '0'
ELSE vplaufendenr ).
cl_demo_output=>write( feld ). "FELD1-1

Feld = 'FELD1' && '-' && COND #( WHEN vplaufendenr = '' THEN '00'
ELSE vplaufendenr ).
cl_demo_output=>write( feld ). "FELD1-10

Feld = 'FELD1' && '-' && COND #( WHEN vplaufendenr <> '' THEN vplaufendenr
ELSE '0' ).
cl_demo_output=>write( feld ). "FELD1-10

Feld = 'FELD1' && '-' && COND char2( WHEN vplaufendenr = '' THEN '0'
ELSE vplaufendenr ).
cl_demo_output=>write( feld )."FELD1-10

cl_demo_output=>display( ).

Re: neue Schreibweise COND für if then else

Beitrag von Micha_ela (ForumUser / 29 / 0 / 0 ) »
Super, vielen Dank, das erklärts.....

Re: neue Schreibweise COND für if then else

Beitrag von black_adept (Top Expert / 4135 / 131 / 956 ) »
Einfachster Fix: Statt

Code: Alles auswählen.

THEN '0'
nimm

Code: Alles auswählen.

THEN `0`
- damit definierst du einen String und der hat keine Längenprobleme

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
tar

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: neue Schreibweise COND für if then else

Beitrag von DeathAndPain (Top Expert / 1977 / 264 / 418 ) »
Sauberer fände ich allerdings, die Raute durch einen geeigneten Typ zu ersetzen. Raute ist eine Schreibvereinfachung, die man in meinen Augen nur nutzen sollte, wenn der Typ wirklich eindeutig ist, so dass es zu Effekten wie diesen nicht kommen kann.

Davon abgesehen finde ich COND hier eine schlechte Wahl; SWITCH würde dasselbe in übersichtlicherer Form leisten. Das Rautenproblem wäre allerdings dasselbe.

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3642
Views
COND in Schleife
von SaskuAc » 18.06.2018 08:08 • Verfasst in ABAP® für Anfänger
0
Antw.
2095
Views
ABAP-interner Bug bei COND-Operator?
von DeathAndPain » 10.08.2018 19:16 • Verfasst in ABAP® für Anfänger
2
Antw.
1744
Views
COND #( WHEN x IS NOT INITIAL THEN y ) funktioniert nicht
von Romaniac » 22.05.2022 14:58 • Verfasst in ABAP® Core
12
Antw.
11768
Views
Value mit Corresponding und cond Operator, funktioniert nicht bei gleichen Feldnamen
von Romaniac » 04.09.2024 15:13 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

IBAN und BUT0BK
vor 26 Minuten von DeathAndPain gelöst 7 / 7121
SAPGui 8.00 32 Bit vs 64 Bit
vor 30 Minuten von DeathAndPain 3 / 703
Programm per Fremdtransport einspielen
vor 2 Stunden von IHe 3 / 131
Splitter-AlV erscheint nicht
vor 5 Stunden von qyurryus 2 / 145
Speichern Popup in MM42 verhindern
vor 9 Stunden von Noodl 1 / 173

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

IBAN und BUT0BK
vor 26 Minuten von DeathAndPain gelöst 7 / 7121
SAPGui 8.00 32 Bit vs 64 Bit
vor 30 Minuten von DeathAndPain 3 / 703
Programm per Fremdtransport einspielen
vor 2 Stunden von IHe 3 / 131
Splitter-AlV erscheint nicht
vor 5 Stunden von qyurryus 2 / 145
Speichern Popup in MM42 verhindern
vor 9 Stunden von Noodl 1 / 173