Itab kopieren mit corresponding

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

Itab kopieren mit corresponding

Beitrag von rob_abc (ForumUser / 55 / 11 / 18 ) »
Hallo zusammen

Ab und zu habe ich den Fall, dass ich eine interne Tabelle kopieren möchte, wobei einige wenige Felder konvertiert werden sollen. Mittels CORRESPONDING können auch Tabellen kopiert werden, allerdings vermisse ich die Möglichkeit wie bei Strukturen, einzelne Felder einer Methode zu übergeben, oder wie in diesem Fall, die Alpha-Konvertierung zu nutzen.

Gibt es eine Möglichkeit die Methode correspondingBeforeLoop() ohne Loop/For zu bauen? Nur mit einem CORRESPONDING-Statement?

Grüsse

Code: Alles auswählen.

REPORT.

CLASS Report DEFINITION.

  PUBLIC SECTION.
    TYPES:
      BEGIN OF ty_data,
        vbeln       TYPE vbeln,
        description TYPE c LENGTH 50,
      END OF ty_data,
      tty_data TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY.

    CLASS-METHODS:
      main.

  PRIVATE SECTION.
    CLASS-METHODS:
      createRawData,
      correspondingBeforeLoop,
      correspondingInsideLoop,
      correspondingInsideFor,
      outputData.

    CLASS-DATA:
      raw TYPE tty_data.

ENDCLASS.

CLASS Report IMPLEMENTATION.

  METHOD main.

    createRawData( ).
    correspondingBeforeLoop( ).
    correspondingInsideLoop( ).
    correspondingInsideFor( ).
    outputData( ).

  ENDMETHOD.


  METHOD createRawData.

    raw = VALUE #(
      ( vbeln = '1' description = 'Lorem ipsum dolor sit amet' )
      ( vbeln = '2' description = 'Fusce aliquet purus quis porttitor varius' )
      ( vbeln = '3' description = 'Sed molestie lacus orci' )
      ( vbeln = '4' description = 'Proin maximus sagittis tortor' ) ).

  ENDMETHOD.


  METHOD correspondingBeforeLoop.

    DATA(output) = CORRESPONDING tty_data( raw ).
    LOOP AT output ASSIGNING FIELD-SYMBOL(<row>).
      <row>-vbeln = |{ <row>-vbeln ALPHA = IN }|.
    ENDLOOP.
    cl_demo_output=>write(
      name = 'correspondingBeforeLoop'
      data = output ).

  ENDMETHOD.


  METHOD correspondingInsideLoop.

    DATA(output) = VALUE tty_data( ).
    LOOP AT raw ASSIGNING FIELD-SYMBOL(<row>).
      INSERT VALUE #( BASE
        CORRESPONDING #( <row> )
        vbeln = |{ <row>-vbeln ALPHA = IN }| ) INTO TABLE output.
    ENDLOOP.
    cl_demo_output=>write(
      name = 'correspondingInsideLoop'
      data = output ).

  ENDMETHOD.


  METHOD correspondingInsideFor.

    DATA(output) = VALUE tty_data( FOR x IN raw ( VALUE #( BASE
      CORRESPONDING #( x )
      vbeln = |{ x-vbeln ALPHA = IN }| ) ) ).
    cl_demo_output=>write(
      name = 'correspondingInsideFor'
      data = output ).

  ENDMETHOD.


  METHOD outputData.

    cl_demo_output=>display( ).

  ENDMETHOD.

ENDCLASS.

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

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


Re: Itab kopieren mit corresponding

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Jein. Du wirst den CORRESPONDING nicht motivieren können, eine Ausgabewandlung Deiner Feldwerte durchzuführen (da kann ja ein kompletter Conversion Exit-Funktionsbaustein dahinter hängen). Ohne LOOP sollte es aber trotzdem machbar sein, und zwar mit FOR und VALUE. Also statt

Code: Alles auswählen.

    DATA(output) = CORRESPONDING tty_data( raw ).
    LOOP AT output ASSIGNING FIELD-SYMBOL(<row>).
      <row>-vbeln = |{ <row>-vbeln ALPHA = IN }|.
    ENDLOOP.
einfach

Code: Alles auswählen.

DATA(output) = VALUE tty_data( FOR <row> IN CORRESPONDING #( raw ) ( vbeln = |{ <row>-vbeln ALPHA = IN }| ) ).
(Ich habe Obenstehendes nicht ausprobiert, bin aber der Meinung, dass es funktionieren müsste.)

Re: Itab kopieren mit corresponding

Beitrag von rob_abc (ForumUser / 55 / 11 / 18 ) »
Lässt sich nur ausführen, wenn das corresponding ebenfalls typisiert ist. Allerdings wird nur vbeln kopiert, andere Felder bleiben leer. Oben hatte ich ja schon eine Funktionierende Lösung mit FOR geschrieben, aber deine wäre von der Syntax etwas schöner gewesen :/

Re: Itab kopieren mit corresponding

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
rob_abc hat geschrieben:
27.02.2023 08:08
Allerdings wird nur vbeln kopiert, andere Felder bleiben leer.
Das ist doch aber in seinem Beispielcode

Code: Alles auswählen.

    DATA(output) = VALUE tty_data( FOR x IN raw ( VALUE #( BASE
      CORRESPONDING #( x )
      vbeln = |{ x-vbeln ALPHA = IN }| ) ) ).
auch nicht anders, oder? Insofern stellt sich mir die Frage, was er will. Ich habe nur versucht, seinen Beispielcode schöner zu formulieren. Wobei mir nicht so recht klar ist, wozu die Tabelle raw dient und weshalb sie in der Methode correspondingInsideFor genutzt wird, in den beiden anderen jedoch nicht.

Sofern es noch andere Spalten gibt, die man (ohne Conversion Exit) übernehmen möchte, kann man immer auf die MAPPING-Erweiterung der CORRESPONDING-Funktion zurückgreifen.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3105
Views
Mehrere itab_zeilen in einem Schritt in andere itab kopieren
von Niekohle » 26.04.2007 13:48 • Verfasst in ABAP® für Anfänger
30
Antw.
12681
Views
move itab 1 nach itab 2 mit bedingung
von c oco » 17.04.2012 14:39 • Verfasst in ABAP® für Anfänger
5
Antw.
3608
Views
Instanzen kopieren, ohne Referencen zu kopieren
von markudo » 25.04.2008 09:16 • Verfasst in ABAP Objects®
1
Antw.
1515
Views
itab in itab
von dimes » 07.02.2007 12:27 • Verfasst in ABAP® Core
2
Antw.
116
Views
itab?
von DerAzubi » 19.10.2022 16:44 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141