FOR mit CORRESPONDING

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

FOR mit CORRESPONDING

Beitrag von rob_abc (Specialist / 132 / 35 / 55 ) »
Hallo zusammen,

Ich würde gerne FOR mit CORRESPONDING kombinieren, aber zusätzlich noch für einen oder mehrere Werte eine Konvertierung durchführen. Geht das irgendwie? Wenn ich FOR verwende, müsste ich alle Felder einzeln auflisten und kann nicht auf CORRESPONDING zurückgreifen.

In einem LOOP kann ich problemlos erst ein CORRESPONDING machen und anschliessend die Felder konvertieren

Code: Alles auswählen.

REPORT.

CLASS lcl_report DEFINITION CREATE PRIVATE.

  PUBLIC SECTION.
    TYPES: BEGIN OF ty_1,
             werks TYPE string,
             desc  TYPE string,
           END OF ty_1.
    TYPES: BEGIN OF ty_2,
             werks       TYPE string,
             longer_desc TYPE string,
           END OF ty_2.
    TYPES tty_plants        TYPE SORTED TABLE OF ty_1 WITH UNIQUE KEY werks.
    TYPES tty_plants_longer TYPE SORTED TABLE OF ty_2 WITH UNIQUE KEY werks.

    CLASS-METHODS main.

    CLASS-METHODS enhance
      IMPORTING i_desc          TYPE string
      RETURNING VALUE(r_result) TYPE string.

ENDCLASS.


CLASS lcl_report IMPLEMENTATION.
  METHOD main.
    DATA(plants) = VALUE tty_plants( ( werks = '1000' desc = 'Plant 1' )
                                     ( werks = '2000' desc = 'Plant 2' ) ).

    cl_demo_output=>write( plants ).

    " Konvertierung von DESC findet nicht statt
    DATA plants_longer TYPE tty_plants_longer.
    plants_longer = VALUE #( FOR <x> IN plants
                             ( CORRESPONDING #( <x> MAPPING longer_desc = desc ) ) ).
    cl_demo_output=>write( plants_longer ).

    " TBL kann auhc direkt kopiert werden.
    plants_longer = CORRESPONDING #( plants MAPPING longer_desc = desc ).
    cl_demo_output=>write( plants_longer ).

    " Ohne CORRESPONDING müssen alle Felder aufgelistet werden, was viele sein können
    " Aber Felder können konvertiert werden
    DATA plants_longer2 TYPE tty_plants_longer.
    plants_longer2 = VALUE #( FOR <x> IN plants
                              ( werks       = <x>-werks
                                longer_desc = enhance( <x>-desc ) ) ).
    cl_demo_output=>write( plants_longer2 ).

*    " Zusätzliches Klammernpaar fügt zusätzliche Zeile ein
*    DATA plants_longer3 TYPE tty_plants_longer.
*    plants_longer3 = VALUE #( FOR <x> IN plants
*                            ( CORRESPONDING #( <x> ) )
*                            ( longer_desc = enhance( <x>-desc ) ) ).
*    cl_demo_output=>write( plants_longer3 ).

*    " Im Mapping können Werte nicht verändert werden
*    DATA plants_longer4 TYPE tty_plants_longer.
*    plants_longer4 = VALUE #( FOR <x> IN plants
*                             ( CORRESPONDING #( <x> MAPPING longer_desc = enhance( desc ) ) ) ).
*    cl_demo_output=>write( plants_longer4 ).

    " Nur im LOOP kann ich es mir ersparen, evtl. hunderte Felder aufzulisten
    DATA plants_longer5 TYPE tty_plants_longer.
    DATA new_line       TYPE ty_2.
    LOOP AT plants ASSIGNING FIELD-SYMBOL(<line>).
      new_line = CORRESPONDING #( <line> ).
      new_line-longer_desc = enhance( <line>-desc ).
      INSERT new_line INTO TABLE plants_longer5.
    ENDLOOP.
    cl_demo_output=>write( plants_longer5 ).

    cl_demo_output=>display( ).
  ENDMETHOD.

  METHOD enhance.
    r_result = |{ i_desc } in long|.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_report=>main( ).

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


Re: FOR mit CORRESPONDING

Beitrag von LeMinion (ForumUser / 21 / 1 / 7 ) »
Moin.
Wenn im (klassischen) Loop möglich ist, was Du willst/brauchst, wieso willst Du eine FOR-Schleife bauen? Ernst gemeinte und einfach nur aus Interesse gestellte Frage.
Ansonsten könntest Du sowas hier bauen:

Code: Alles auswählen.

DATA(longerPlants) = VALUE tty_plants_longer(
  FOR plant IN plants
  ( VALUE #( BASE CORRESPONDING #( plant )  desc = enhance( plant-descending ) ) )
).
Viele Grüße,
LeMinion

Folgende Benutzer bedankten sich beim Autor LeMinion für den Beitrag:
rob_abc


Re: FOR mit CORRESPONDING

Beitrag von msfox (Specialist / 389 / 58 / 76 ) »
LeMinion hat geschrieben:
Gestern 11:46
Loop möglich ist, was Du willst/brauchst, wieso willst Du eine FOR-Schleife bauen?
Weils Leute gibt, die das GEIL finden... Solche Experten hat bei uns auch, die bestehenden Code unbedingt von LOOP auf FOR umstellen müssen, damit alles in einer Anweisung steht. Mache ich inzwischen auch, damit es im Coding einheitlich bleibt und nicht nachträglich meine Coding immer umgeschrieben wird.

Re: FOR mit CORRESPONDING

Beitrag von rob_abc (Specialist / 132 / 35 / 55 ) »
LeMinion hat geschrieben:
Gestern 11:46

Code: Alles auswählen.

DATA(longerPlants) = VALUE tty_plants_longer(
  FOR plant IN plants
  ( VALUE #( BASE CORRESPONDING #( plant )  desc = enhance( plant-descending ) ) )
).
Ach, VALUE im FOR mit BASE CORRESPONDING, vielen Dank.

LeMinion hat geschrieben:
Gestern 11:46
Wenn im (klassischen) Loop möglich ist, was Du willst/brauchst, wieso willst Du eine FOR-Schleife bauen?
Weil ich damit viel prägnanter ausdrücken kann was passiert und damit für den Leser später leichter verständlich ist. Das mit einer Reihe Hilfsvariablen und LOOP zu bauen geht natürlich, dauert in dem Fall aber meiner Meinung nach länger in der Erfassung.
Hier das Beispiel, bei dem ich es eingebaut habe. Variablennamen sind anonymisiert.

Code: Alles auswählen.

      e_export = VALUE #( FOR <x> IN mat->get_itab( )
        ( value #( base corresponding #( <x> ) 
                   menge  = zconverter=>to_string( CONV #( <x>-menge ) ) ) ) ).

Seite 1 von 1

Über diesen Beitrag



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

Aktuelle Forenbeiträge

Web Feature Services (WFS) im SAP
vor 7 Stunden von msfox 1 / 46
FOR mit CORRESPONDING
vor 8 Stunden von rob_abc 4 / 164

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

Web Feature Services (WFS) im SAP
vor 7 Stunden von msfox 1 / 46
FOR mit CORRESPONDING
vor 8 Stunden von rob_abc 4 / 164

Unbeantwortete Forenbeiträge

Web Feature Services (WFS) im SAP
vor 7 Stunden von msfox 1 / 46
Erweiterung in ME51N/ME52N:
vor 3 Wochen von ABAPlerv 1 / 1996
Erweiterung in ME51N/ME52N:
vor 3 Wochen von ABAPlerv 1 / 1835