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 / 109 / 27 / 44 ) »
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 / 4102 / 128 / 945 ) »
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 / 1956 / 260 / 415 ) »
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.
2937
Views
COND in Schleife
von SaskuAc » 18.06.2018 08:08 • Verfasst in ABAP® für Anfänger
0
Antw.
1559
Views
ABAP-interner Bug bei COND-Operator?
von DeathAndPain » 10.08.2018 19:16 • Verfasst in ABAP® für Anfänger
2
Antw.
794
Views
COND #( WHEN x IS NOT INITIAL THEN y ) funktioniert nicht
von Romaniac » 22.05.2022 14:58 • Verfasst in ABAP® Core
12
Antw.
3803
Views
Value mit Corresponding und cond Operator, funktioniert nicht bei gleichen Feldnamen
von Romaniac » 04.09.2024 15:13 • Verfasst in ABAP® Core

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.