Was zum Knobeln....

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

Was zum Knobeln....

Beitrag von ralf.wenzel (Top Expert / 3948 / 201 / 281 ) »
Moin,

ich stelle mal ein gelöstes Problem zum Knobeln hier rein:

Die Anweisung

Code: Alles auswählen.

SWITCH #( datum_1 WHEN value dats( ) THEN datum_2 ELSE datum_1 ).
wirft einen Syntaxfehler aus. Wer weiß, warum? 😉

Und: Wie kann man das Problem umgehen, ohne ein Literal zu verwenden?

Tipp:

Code: Alles auswählen.

SWITCH #( datum_1 WHEN '00000000' THEN datum_2 ELSE datum_1 ).
funktioniert!

Viel Spaß beim Knobeln

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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


Re: Was zum Knobeln....

Beitrag von a-dead-trousers (Top Expert / 4450 / 227 / 1196 ) »
Easy:
ABAP-Hilfe hat geschrieben: Syntax

... SWITCH type( [let_exp]
operand
WHEN const1 THEN [ let_exp] result1
[ WHEN const2 THEN [ let_exp] result2 ]
...
[ ELSE [ let_exp] resultn ] ) ...
https://help.sap.com/doc/abapdocu_750_i ... switch.htm

An besagter Stelle sind laut Syntax nur KONSTANTEN erlaubt.
(Steht etwas weiter unten im Hilfe-Text)

Was du suchst/brauchst ist entweder COND für einen dynamischen Vergleich oder eine Konstante für das "initiale" Datum.

P.S.: Theoretisch sind auch Datum-Felder mit Leerzeichen möglich. Deswegen hab ich mir angewöhnt auf CN ' 0' (contains not only space and 0) anstatt IS INITIAL abzufragen. Dasselbe gilt auch für Zeit- und andere NUMC-Felder.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Was zum Knobeln....

Beitrag von ralf.wenzel (Top Expert / 3948 / 201 / 281 ) »
Ein Schuss, ein Treffer 😉 Warum value d( ) aber kein Festwert ist, erschließt sich mir nicht.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Was zum Knobeln....

Beitrag von a-dead-trousers (Top Expert / 4450 / 227 / 1196 ) »
ABAP-Hilfe hat geschrieben: VALUE - Wertoperator

Syntax

... VALUE type( ... ) ...

Wirkung

Ein Konstruktorausdruck mit dem Wertoperator VALUE erzeugt ein Resultat eines mit type angegebenen Datentyps.
https://help.sap.com/doc/abapdocu_751_i ... _value.htm

Sprich, das Ding landet im Heap (oder doch Stack?) und nicht im globalen Datenbereich wo Konstanten beheimatet sind.
(Laut ChatGPT)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Was zum Knobeln....

Beitrag von a-dead-trousers (Top Expert / 4450 / 227 / 1196 ) »
Okay, VALUE( ) landet im Stack.

Code: Alles auswählen.

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    METHODS get_reference
      RETURNING VALUE(rr_value) TYPE REF TO i.

  PRIVATE SECTION.
    METHODS get_reference_internal
      IMPORTING !id_value       TYPE i
      RETURNING VALUE(rr_value) TYPE REF TO i.

ENDCLASS.

CLASS lcl_test IMPLEMENTATION.

  METHOD get_reference.

    rr_value = me->get_reference_internal( id_value = VALUE i( ) ).
* RR_VALUE = "->0"
  ENDMETHOD.

  METHOD get_reference_internal.

    rr_value = REF #( id_value ).
* RR_VALUE = "->0"
  ENDMETHOD.

ENDCLASS.

DATA:
  lr_value TYPE REF TO i,
  lr_test  TYPE REF TO lcl_test.

lr_test = NEW #( ).
lr_value = lr_test->get_reference( ).
* LR_VALUE = "FREED STACK:{A:1*\TYPE=I}"
Warum so kompliziert?
"REF #( value i( ) )" sowie "get reference of value i( )" sind syntaktisch nicht erlaubt.
Daher braucht man das "per Referenz" übergebene ID_VALUE.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Über diesen Beitrag



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

Aktuelle Forenbeiträge

WM: Transportauftrag quittieren - drucken
vor 18 Stunden von JHM 4 / 742
line_exists evaluieren
Gestern von Radinator gelöst 6 / 182
Was zum Knobeln....
vor 2 Tagen von a-dead-trousers 5 / 363

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

WM: Transportauftrag quittieren - drucken
vor 18 Stunden von JHM 4 / 742
line_exists evaluieren
Gestern von Radinator gelöst 6 / 182
Was zum Knobeln....
vor 2 Tagen von a-dead-trousers 5 / 363

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1553
Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1466