Interne Tabelle mit FOR-Operator aufbauen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Interne Tabelle mit FOR-Operator aufbauen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Hallo zusammen,

ich stehe gerade vor einer eigentlich trivialen Aufgabe, aber bei dieser Aufgabe drängt es sich mir auf, den FOR-Operator mal auszuprobieren, um eine besonders schlanke und elegante Lösung zu erhalten.

In der internen Tabelle M befinden sich in der Spalte PERNR Personalnummern. Es soll ein Email-Text in einer internen Tabelle aufgebaut werden, der diese Personalnummern alle auflistet. Ich habe bereits eine funktionierende Lösung gefunden:
(Eckige Klammern wurden durch geschweifte ersetzt, damit das Forum das darstellen kann)

Code: Alles auswählen.

  MAILTEXT{} = VALUE #( ( LINE = 'Hello,' )
                        ( LINE = '' ).

  APPEND LINES OF VALUE SRM_T_SOLISTI1( FOR J = 1 UNTIL J = LINES( M ) ( LINE = M{ J }-PERNR ) ) TO MAILTEXT.

  APPEND LINES OF VALUE SRM_T_SOLISTI1( ( LINE = '' )
                                        ( LINE = 'This email was sent automatically by the SAP system.' ) ) TO MAILTEXT.
Was mir daran nicht gefällt, ist, dass ich die Tabelle aus drei Teilbefehlen zusammenstückeln muss. Mir hat eigentlich eine einzige Zuweisung vorgeschwebt, in der ich der Reihe nach die Zeilen aufzähle und in der ich in der Mitte dann den FOR drinne habe, der mir dynamisch die Personalnummern einfügt. Also eigentlich folgendes:

Code: Alles auswählen.

  MAILTEXT{} = VALUE #(                                ( LINE = 'Hello,' )
                                                       ( LINE = '' ) )
                        FOR J = 1 UNTIL J = LINES( M ) ( LINE = M{ J }-PERNR ) ) 
                                                       ( LINE = '' )
                                                       ( LINE = 'This email was sent automatically by the SAP system.' ) ).
Leider funktioniert das so nicht: "FOR ist kein zulässiger Operator an dieser Stelle des Berechnungsausdrucks." Gibt es eine andere Art und Weise, das so zu schreiben, dass es funktioniert? Oder ist meine erste Lösung das beste, was die Syntax hergibt?
Zuletzt geändert von DeathAndPain am 30.04.2018 11:25, insgesamt 1-mal geändert.

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


Re: Interne Tabelle mit FOR-Operator aufbauen

Beitrag von black_adept (Top Expert / 3944 / 105 / 886 ) »
Du hattest es fast geschafft. Du musst dein FOR-Schleifen-Konstrukt lediglich als Tabellenerzeuger sehen und dann mittels "LINES OF" einfügen

Code: Alles auswählen.

mailtext{} = VALUE #( ( line = 'Hello,' )
                      ( line = '' )
                      ( LINES OF VALUE #( FOR j = 1 UNTIL j = lines( m ) ( line = m{ j }-pernr ) ) )
                      ( line = '' )
                      ( line = 'This email was sent automatically by the SAP system.' )
                    ).

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Interne Tabelle mit FOR-Operator aufbauen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Cool, danke, das funktioniert! Ich glaube, auf den Ansatz war ich im Prinzip auch schon gekommen, bin dabei aber an etwas gescheitert, was ich auch jetzt noch für unlogisch halte, und zwar dass das LINES OF-Konstrukt selbst nochmal in Klammern stehen muss. LINES OF definiert ja Zeilen einer Tabelle (weswegen es z.B. auch bei APPEND LINES OF nicht in Klammern steht). Dass die Syntax das hier fordert, macht aus meiner Sicht wenig Sinn. Ich glaube, ohne Klammern hatte ich es schon ausprobiert, aber ging halt nicht.

Aber wenn es so ist, dann ist es halt so. Deine Lösung funktioniert und ist natürlich um eine Größenordnung eleganter, als die Tabelle aus drei Teilbefehlen zusammenzustückeln. Vielen Dank dafür!

Re: Interne Tabelle mit FOR-Operator aufbauen

Beitrag von black_adept (Top Expert / 3944 / 105 / 886 ) »
DeathAndPain hat geschrieben:und ist natürlich um eine Größenordnung eleganter, als die Tabelle aus drei Teilbefehlen zusammenzustückeln.
Das ist Ansichtssache - ich mag auch die "gestückelte" Version.
Aber wenn es dir um Eleganz geht, würde ich an deiner Stelle nicht die Version mit FOR ... UNTIL verwenden sondern die Version FOR...IN weil die genau auf deinen Fall zugeschnitten ist.

Code: Alles auswählen.

mailtext{} = VALUE #(                                 ( line = 'Hello,' )
                                                      ( line = '' )
                      ( LINES OF VALUE #( FOR x1 IN m ( line = x1-pernr ) ) )
                                                      ( line = '' )
                                                      ( line = 'This email was sent automatically by the SAP system.' )
                    ).
oder - falls es zwar "modern" sein soll aber nicht notwendigerweise mit FOR laufen muss kann man hier auch schön mit CORRESPONDING und MAPPING arbeiten.

Code: Alles auswählen.

mailtext{} = VALUE #(                                     ( line = 'Hello,' )
                                                          ( line = '' )
                      ( LINES OF CORRESPONDING #( m MAPPING line = pernr ) )
                                                          ( line = '' )
                                                          ( line = 'This email was sent automatically by the SAP system.' )
                    ).

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Interne Tabelle mit FOR-Operator aufbauen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Whoa - unglaublich, wie gut Du den neuen 7.40-Kram draufhast. Diese Syntaxen muss ich mir mal in einer ruhigen Minute detailliert reinziehen, da gibt es auf jeden Fall was zum Lernen für mich.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
236
Views
5
Antw.
1271
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
3012
Views
interne Tabelle in andere interne Tabelle (Format)
von Gast » 20.10.2004 14:44 • Verfasst in ABAP® Core
5
Antw.
311
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 75

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

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 75

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 132
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 166