Wie haltet ihr es mit ABAP Sprachneuerungen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
16 Beiträge • Seite 1 von 2 (current) Nächste
16 Beiträge Seite 1 von 2 (current) Nächste

Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von black_adept (Top Expert / 3350 / 63 / 629 ) » 23.11.2015 10:02
Die Spracherweiterungen, die SAP seit 7.0 und vor allem in 7.4 mit ihren Enhancementpacks eingeführt hat, ändern das Aussehen von ABAP-Coding ja schon deutlich. Und auch wenn ich einige der Änderungen ( bei mir z.B. die Inline-Deklaration LOOP AT .. ASSSIGNING FIELD-SYMBOL(<ls..>) ) nicht mehr missen möchte, bin ich bei einigen anderen Änderungen durchaus zwiegespalten.
Einerseits eröffnen sich zwar neue Möglichkeiten und einige andere Sachen werden endlich normalisiert - aber die Lesbarkeit wird für das ungeübte Auge nicht gerade erhöht.
Allein wenn ich mir die Beispiele für die neuen Features in der Doku ansehe bin ich immer recht lange am Überlegen, was genau da eigentlich passiert und bei einigen bin ich mir recht unsicher, ob ich es überhaupt verstanden habe.

Was tun um mit der neuen Situation umzugehen:
Einerseits versuche ich häufig die Neuerungen einzusetzen - einfach um Übung im Gebrauch und Lesen zu bekommen oder um festzustellen was die Fallstricke/Einschränkungen sind, die sich erst mit dem Gebrauch ergeben.
Andererseits ist mir als Freelancer deutlich bewusst, dass irgendwann die Wartung meiner Programme an jemand anderen übergehen wird. Und genau hier ist ein Problem: Darf ich annehmen, dass die Ausbildung derjenigen, die die Wartung gewonnen haben, so ist, dass sie mit den Neuerungen gut klar kommen. Insbesondere in Abetracht der Tatsache, dass ich immer wieder Sachen höre wie "Bei uns darf nicht objekt-orientiert programmiert werden - das kann keiner bei uns".

Oder etwas allgemeiner: Das folgende auf das Wesentliche reduzierte Beispiel bringt einfach eine kleine SALV-Liste auf den Bildschirm aber verwendet diverse Inlinedeklarationen. Würde bei eurem Arbeitgeber/ in euren Projekten so etwas gegenüber dem herkömmlichen Stil eher begrüßt oder abgelehnt werden:

Code: Alles auswählen.

REPORT.

END-OF-SELECTION.
  SELECT SPRAS,
         LAND1,
         LANDX
    INTO TABLE @DATA(gt_data)
    FROM t005t.
  TRY.
      cl_salv_table=>factory( EXPORTING
                                r_container    = cl_gui_container=>screen0
                              IMPORTING
                                r_salv_table   = DATA(go_salv)
                              CHANGING
                                t_table        = gt_data ).
*        lo_salv->get_columns( )->set_exception_column( 'HUGO' ).  " Force error
      go_salv->display( ).
    CATCH cx_root INTO DATA(go_cx_root).
      WRITE:/ |Error: { go_cx_root->get_longtext( ) }| COLOR 6.
      RETURN.
  ENDTRY.
  WRITE:/ '.'.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de


Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von wreichelt (Expert / 769 / 18 / 134 ) » 23.11.2015 10:51
Hallo,

ich kenne ABAP schon seit R/2. Ich möchte ehrlich sein, ich komme mit den neuen Sprachelementen nicht zurecht und
finde die Lesbarkeit auch nicht gut.
Bisher habe ich auch noch keine gute Hilfe gefunden die alte und neue Sprachelemente gegenüber stellt und mir
damit diese neuen Möglichkeiten erläutert.

Gruß
Wolfgang

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von SAP_ENTWICKLER (Specialist / 445 / 219 / 6 ) » 23.11.2015 12:29
Hallo,

da kann ich mich nur Wolfgang anschließen.

Dazu kommt noch, dass man ja in der Regel in alten Programmen rumwühlt, in denen die neuen Sprachelemente natürlich nicht vorkommen. Ich habe die Erfahrung gemacht, dass die Beispiele der SAP oft auch nicht gut und nur schwer verständlich sind. Insgesamt bringt einem das nur weiter, wenn man in Bereichen zu tun hat in den schon mit den neuen Elementen gearbeitet wird.


Viele Grüße

Norbert

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von Dele (Specialist / 307 / 4 / 47 ) » 23.11.2015 14:28
Bin auch schon seit R/2 dabei und habe die Neuerungen in ABAP und auch sonst (ALV, Controls, RFC, HTTP, Contexte und die vielen Sterne am SAP-Himmel) immer nach einem alten biblischen Motto behandelt: "Prüft alles und behaltet das Gute".

Kann dem Gesagten nur zustimmen. Mir ist die Lesbarkeit enorm wichtig. Nicht nur für "nachfolgende" Entwickler, sondern auch für mich selbst. Denn ich will ein paar Monate oder Jahre später mein eigenes Coding noch verstehen können.
Deshalb bevorzuge ich bis heute den klassischen Aufruf von Methoden (nicht die funktionale Schreibweise) und bemühe mich meine Programme mit ausrechenden Kommentaren zu bestücken. Außerdem halte ich immer noch die 72 Spaltengrenze ein, weil ich bevorzuge, alles auf einen Blick zu sehen. Im Idealfall kann dann sogar noch ein Berater ohne große Programmierkenntnisse nachvollziehen, was passiert.

Fazit: ich verwende die Neuerung gerne, da wo es mir sinnvoll erscheint. Sollte dabei einmal die Lesbarkeit bzw. Nachvollziehbarkeit beeinträchtig werden, dann muss das entsprechend kommentiert werden.

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ST22 (Specialist / 249 / 28 / 30 ) » 24.11.2015 08:51
Morgen Zusammen,

als ich vor 10 Jahren(?) das erste mal mit ABAP-OO konfrontiert wurde, war mein erster Gedanke, dass geht ja gar nicht, das kann man ja nicht mal vernünftig debuggen (was natürlich völliger Unsinn war).
Heute mache ich fast alles in OO, obwohl es sicher oft auch noch mit alten Techniken ginge.

Was will ich damit sagen?
Man muss die Neuerungen halt nutzen und dann wird es auch zur Routine. Ich finde die Entwicklung nach wie vor spannend und finde es manchmal auch etwas "bequem" sich auf so einer "old style" Position auszuruhen.
Wenn mir heute ein altgedienter Kollege sagt, das kann er nicht, weil es OO ist, wundere ich mich ehrlich gesagt immer ein wenig, in 10 Jahren kann man sich das durchaus aneignen. Mich ärgert es, wenn ich immer noch(!) in SAPScript-Formularen rumbasteln muss, obwohl es jetzt schon die zweite Folgetechnologie gibt.

Aber klar, es gibt auch Dinge, wo ich für mich den Sinn noch nicht drin sehe. Mühsam habe ich irgendwann Eclipse installiert und stelle doch immer wieder fest, dass ich mich im GUI -Umfeld einfach schneller und effizienter bewege.

Nun denn, wir bekommen nächstes Jahr 7.4, und dann schauen wir mal :up: - ich freu mich ;-)

Grüße
Frank

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ralf.wenzel (Top Expert / 3505 / 157 / 232 ) » 24.11.2015 12:50
Also, ich verwende die 7.40-Sprachkonstrukte sehr oft und gern, weil das Coding deutlich kompakter wird und man sich ganze Bündel von Hilfsvariablen schenken kann.

Wie nicht jede triviale Anweisung, gehört natürlich ein gescheiter, ausführlicher Kommentar dazu (das ist vielen Entwicklern nicht beizubringen), aber das ist dann immer noch deutlich lesbarer als umkommentiert und mit x Hilfsvariablen, die dann noch h_var1, h_var2, etc. heißen.

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 24.11.2015 16:55
ralf.wenzel hat geschrieben:Also, ich verwende die 7.40-Sprachkonstrukte sehr oft und gern, weil das Coding deutlich kompakter wird und man sich ganze Bündel von Hilfsvariablen schenken kann.

Wie nicht jede triviale Anweisung, gehört natürlich ein gescheiter, ausführlicher Kommentar dazu (das ist vielen Entwicklern nicht beizubringen), aber das ist dann immer noch deutlich lesbarer als umkommentiert und mit x Hilfsvariablen, die dann noch h_var1, h_var2, etc. heißen.
Sehe ich exakt genau so.
Natürlich trägt z.B. übertriebenes Command-Chaining nicht gerade zur Übersichtlichkeit des Codes bei. Da sollte man dann eben versuchen, den goldenen Mittelweg zu finden.

...und bezüglich der Kommentare kann ich Ralf ebenfalls nur beipflichten. Vernünftige Kommentare sind deutlich besser und mMn wichtiger als eine ausführliche Offline-Dokumentation, die eh nach 5 Minuten veraltet ist... ;-)

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ralf.wenzel (Top Expert / 3505 / 157 / 232 ) » 24.11.2015 17:05
Die Frage ist: Was ist übertrieben? Wenn es exakt einen Gedankengang abbildet, ist es in meinen Augen nicht übertrieben ;)

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ewx (Top Expert / 4167 / 185 / 429 ) » 24.11.2015 17:26
Ein Gedankengang eines Mathematikers entspricht ca. 34 Enno-Gedankengängen...
Insofern ist auch das wieder relativ.

Hat aber mE erst mal nix mit den neuen Sprachelementen zu tun.
Ein Design Pattern ist im Grunde auch EIN Gedankengang.
Kommt darauf an, wieviel Wissen und Erfahrung der andere hat.

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ralf.wenzel (Top Expert / 3505 / 157 / 232 ) » 24.11.2015 17:32
ewx hat geschrieben:Ein Gedankengang eines Mathematikers entspricht ca. 34 Enno-Gedankengängen...
Insofern ist auch das wieder relativ.

Hat aber mE erst mal nix mit den neuen Sprachelementen zu tun.
Ein Design Pattern ist im Grunde auch EIN Gedankengang.
Kommt darauf an, wieviel Wissen und Erfahrung der andere hat.
Ich meinte sowas wie "ich mach jetzt aus einer Liste von Partnerrollen eine Selektionstabele mit Partnerrollen" ;)

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) » 25.11.2015 17:19
In den neuen Konstrukten wird viel Ideologie die aus dem
Java-Umfeld stammt untergebracht. Ich denke dabei immer
an die Worte von Herrn Plattner der sinngemäß gesagt hat:
"Programmier sind alle religiös, jeder vertritt seine Sprache
als die ultimativ richtige".
Viele der Konstrukte sind schlicht Unsinn, die meisten sehr
schlecht lesbar. Etwas mehr Konzentration auf das was
wirklich wichtig ist wäre der bessere Weg.
Die Dinge die wirklich eine Bereicherung darstellen nehme
ich an, die anderen vermeide ich.

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von ralf.wenzel (Top Expert / 3505 / 157 / 232 ) » 25.11.2015 18:30
Daniel hat geschrieben:Viele der Konstrukte sind schlicht Unsinn, die meisten sehr
schlecht lesbar.
Das liegt im Auge des Betrachters. Ich verliere mich schnell in Programmen, die hier und da ständig Hilfsvariablen verwenden (oft nur einmal) oder wo plötzlich in sy-tfill ein 'X' vom Himmel fällt. Bei sowas werde ich wahnsinnig, besonders wenn die dann h_var1 (Hilfsvariable 1) heißen.

Ich kann dein Coding genauso wenig lesen wie du meines - ich finde deins zu kleinteilig und du findest meins zu grobteilig.

Ich kann kompakteres Coding deutlich besser lesen. Anderen mag das anders gehen, aber bei mir ist es so, dass ich 7.40er Coding allein schon deshalb viel besser lesen kann, weil es eben nicht so kleinteilig ist. In den einen Programm kommt ein LOOP (für das man eine WA oder ein FS deklarieren muss, womit der Deklarationsblock total überläuft, weil das ja nicht nur eine Einmalvariable ist, sondern viele) wo tierisch viel Gedöns gemacht wird, nur für ein bisschen Konvertierung.

Beispiel:
Ich habe einen Text in einer TLINE-Tabelle, brauche ihn aber in einer SOLI_TAB-Tabelle, weil ich ihn mailen will.

Alt:

Code: Alles auswählen.

   FIELD-SYMBOLS:
   " nur die hier Deklarationen, die wir nur 
   " für diese Lösung brauchen:
      <txt> type tline,
      <sol>  type soli.

   LOOP AT mailtxt-txt ASSIGNING <txt>.
      APPEND INITIAL LINE TO mailtext-sol
      ASSIGNING <sol>.
      <sol> = <txt>-tdline.
   ENDLOOP.
Acht Zeilen Coding (ohne Leerzeilen und Kommentare). Viel Verständlicher:

Code: Alles auswählen.

   " konvertiere Textinhaltsspalte in Emailtext-Tabelle
    mailtext-sol = value #( for <i> in mailtext-txt ( line = <i>-tdline ) ).
Was macht diese Anweisung? Es ist eine FOR-Schleife, die mailtext-txt durchläuft und einem Feldsymbol <i> zuweist (das automatisch deklariert wird (macht Sinn, weil es nur da benutzt wird) und die Spalte tdline jeder Zeile von <i> dem Feld line der Zieltabelle zuweist.

Ich hab eine ähnliche Anweisung, nur noch deutlich komplexer, wo ich nicht die Datenfelder anspreche, sondern die Methoden, die diese Datenfelder ermitteln. Drei statt (ich glaube es waren 15) Zeilen Coding, drei Zeilen Kommentar drüber und alle sind glücklich - außer denen, die nicht glücklich zu machen sind.

Gerade wenn man das häufig anwendet, kann man das Coding zum Teil um 1/3 (in Extremfällen wie oben noch mehr) kürzen. Und wenn man nicht so viel tippt, hat man auch eher Lust, Kommentare zu schreiben (ich zeig jetzt mal auf keinen Bestimmten ;) ). Und die helfen dann wirklich weiter. Viel weiter als ausuferndes Coding mit Hilfsvariable hier, Konvertierungsstruktur da, Umsatztabelle woanders. Solches Coding zu lesen ist wie Piet Klocke zuzuhören - man denkt immer "und wann gehts jetzt wirklich los"?

BTW: Auf eine Liste der unsinnigen Konstrukte von dir warte ich immer noch ;)

Wirklich unsinnige Konstrukte finde ich im alten ABAP, aber auch das ist subjektiv. Tabellen mit Kopfzeilen findest du praktisch, weil du weniger tippen musst. Ich finde es furchtbar, dass es zwei Datenobjekte mit gleichem Namen gibt. Oder REFRESH itab, der das gleiche macht wie CLEAR itab (bei Tabellen ohne Kopfzeilen) oder CLEAR itab[] (bei Daniel-Tabellen). Völlig überflüssig. Die Liste ist endlos.

Ich finde es auch furchtbar, dass die conversion exits mein Coding zerschneiden. Ständig conversion input/output, so dass der rote Faden vom Leser ständig neu aufgenommen werden muss - wir (die Young Guns des Kunden** und ich) kapseln das gerade in Methoden, weil man die mitten im Befehl verwenden kann. Sprich: Nicht "konvertiere, dann übergib", sondern "übergib den konvertierten Wert" (wie man es ja auch einem Menschen sagen würde, natürliches Denken und Sprechen ist nicht so kleinteilig wie die Programmierung im alten ABAP).

** Daniel sitzt mir gerade gegenüber ;)

Den Mist mit den AT/ENDAT in LOOP-Anweisungen: Ich hab noch keinen gesehen, der das auf Anhieb verstanden hat, das Netz ist voller Leute, die fragen "warum hab ich da lauter Sterne drin". Wenn viele die gleiche Frage stellen, ist das offensichtlich kein bisschen selbsterklärend. Aber Rettung naht - bald kommt "LOOP AT itab GROUP BY".

Überhaupt: Ich hab SO oft mit READ ... BINARY KEY in einer ITAB vorlesen müssen, um einen LOOP an einer bestimmten Stelle beginnen zu lassen (vorher muss man die natürlich sortieren), damit der nicht so zeitaufwendig wird. Jeder normale Mensch denkt "Durchlaufe die Tabelle nach den Feldern x, y, und z". Und dank sortierter Tabellen, die ich fast nur noch verwende, geht das auch im ABAP (und noch gar nicht SO lange). Das ist schnell und einfach und ich spare einen Haufen Kommandos, die nur verwirren, weil sie andere Kommandos vorbereiten (quasi Hilfskommandos). Eine sortierte Tabelle muss ich nicht mal so und mal so sortieren (könnte ich auch gar nicht), die bekommt einfach einen weiteren Key und fertig. Das finde ich viel einfacher.

Gerade bei diesen Dingen, die beiläufig gemacht werden, z. B. SHIFT gibt es jetzt als Funktionen, so dass ich nicht Variable 1 in Variable 2 kopieren* und dann shiften muss, sondern ich sag einfach "nimm den geshifteten Wert von Variable 1", so wie man es auch einem natürlichen Gegenüber sagen würde.

* weil Input-Parameter oder weil der ungeshiftete Wert noch gebraucht wird oder, oder, oder....

Ich weiß, dass du das unübersichtlich findest, ich weiß aber auch, dass das erstens subjektiv ist und zweitens (das nenne ich den Ribbon-Effekt) weil man sich nicht drauf einlässt. Wenn man Windows < 8 gewohnt ist, kommt einem 8 vor wie von einem anderen Planeten. Wenn man sich von der alten Denkweise löst, merkt man plötzlich, dass Windows 8 viel besser ist als sein Ruf (das sage ich als Mac-Anwender!). Genauso war es mit den Ribbons im MS Office. Erst steht man da wie doof, aber wenn man sich das einmal richtig antut und sich richtig damit auseinandersetzt, versteht man die Philosophie dahinter und dann will man nicht mehr zurück. Man muss halt mal runter von seiner alten Denkweise, weil sich irgendwann rausstellt, dass der alte Kram Mist war. MS Windows hat durch die Ribbons deutlich an Bedienbarkeit gewonnen - nur bei denen nicht, die immer noch an den alten Stellen gesucht haben.

So ging es mir mit den Ribbons, mit Windows 8 und mit ABAP 7.40 auch (wenngleich gerade dort der Widerstand gering war, weil die genau das geändert haben, was mich immer wahnsinnig gemacht hat, ich habe die Beispiel ja gebracht).

Das ist wie bei Henry Ford: "Hätte ich die Leute gefragt, was sie brauchen, hätten sie gesagt, ein schnelleres Pferd". Endlich hat die SAP den Mut, das schnelle Pferd gegen ein Auto zu tauschen, auch wenn einige meckern (wie Kaiser Wilhelm, der gesagt hat, das Auto werde sich nicht durchsetzen, weil es nicht genug Chauffeure gebe). Das ist klassisches "in alten Strukturen"-Denken. Das funktioniert nicht, wenn es neue Strukturen gibt.

Fragwürdig ist allerdings, dass ABAP 7.40 mit Service Patches ausgeliefert wurden, das ist unschön. Aber das hat man bei der SAP ja auch erkannt, 7.50 gibt es auf einen Rutsch und nur mit dem neuen Releasestand (da ist dann insbesondere der ganze S/4-Kram dabei).

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag (Insgesamt 4):
ewxwreicheltblack_adeptHaubi


Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von black_adept (Top Expert / 3350 / 63 / 629 ) » 25.11.2015 21:31
Das Beispiel von Ralf ist wirklich Klasse, denn damit kann man wirklich gut demonstrieren, wie die Sprache sich ändert.
Vielleicht mal die Frage an die Runde - welche Version würdet ihr verwenden. Welche Versionen ohne viel nachzudenken verstehen.
Ich normiere mal den Ansatz von Ralf und packe noch ein paar Versionen hinzu die mir ad hoc einfallen und die de facto auch das gleiche tun aber mit anderen Sprachelementen arbeiten. ( Ob die Zieltabelle jetzt initialisiert oder erweitert wird sei hier ohne Belang ) Dabei wird die Anzahl der neuen Möglichkeiten von Version zu Version etwas gesteigert - startend beim klassischen Ansatz und endend bei Ralfs avantgardistischer Version.

Version a) konservativer Ansatz. Vorteil: Von allen lesbar, auf wohl jedem System lauffähig:

Code: Alles auswählen.

FIELD-SYMBOLS:
  <txt> TYPE tline,
  <sol> TYPE soli.
LOOP AT t_lines ASSIGNING <txt>.
  APPEND INITIAL LINE TO t_soli ASSIGNING <sol>.
  <sol> = <txt>-tdline.
ENDLOOP.
Version b) Leichte Mischung mit "einfachen" neuen Sprachelementen ( aber etwas geschummelt )

Code: Alles auswählen.

LOOP AT t_lines ASSIGNING FIELD-SYMBOL(<ls_line>).
  APPEND <ls_line>-tdline TO t_soli.
ENDLOOP.
Version c)Leichte Mischung mit mehr neuen Sprachelementen ohne schummeln

Code: Alles auswählen.

LOOP AT t_lines ASSIGNING FIELD-SYMBOL(<ls_line>).
    APPEND value #( line = <ls_line>-tdline ) TO t_soli.
ENDLOOP.
Version d) Ralfs hypermoderner Ansatz - aber sehr kompakt

Code: Alles auswählen.

t_soli = VALUE #( FOR <i> IN t_lines ( line = <i>-tdline ) ).
Version e) Wie d) - aber andere Sprachemelente

Code: Alles auswählen.

t_soli = CORRESPONDING #( t_lines MAPPING line = tdline ).
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von black_adept (Top Expert / 3350 / 63 / 629 ) » 25.11.2015 21:34
Ach ja - wenn ich schon frage hier auch mein Kommentar zu den Versionen:

Selbst verwenden würde ich für meine "normalen" Kunden b, c und evtl. e.
Wenn ich für ABAP2XLSX schreibe würde ich a) verwenden, damit es auch auf älteren Sytemen lauffähig ist.
Verstehen würde ich leicht a-c, mittelgut e) weil schon ein paar mal verwendet, noch nicht gut d), weil ich mit FOR bisher kaum etwas gemacht habe. Sollte sich aber in Zukunft ändern.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Wie haltet ihr es mit ABAP Sprachneuerungen

Beitrag von black_adept (Top Expert / 3350 / 63 / 629 ) » 25.11.2015 21:54
Daniel hat geschrieben:Viele der Konstrukte sind schlicht Unsinn, die meisten sehr
schlecht lesbar
.
So ganz unrecht hat Daniel aber auch nicht. Hier mal der Ausschnitt des Beispielcodings welches SAP zum neuen Befehl "FILTER" anbietet.
Wer möchte hier gerne hervortreten und verraten was das macht (und warum die Typ- und Variablenbenamung für ein Beispiel hervorragend ist )

Code: Alles auswählen.

    TYPES: BEGIN OF filter,
             cityfrom TYPE spfli-cityfrom,
             cityto   TYPE spfli-cityto,
           END OF filter,
           filter_tab TYPE HASHED TABLE OF filter
                 WITH UNIQUE KEY cityfrom cityto.

    DATA(filter_tab) = VALUE filter_tab(
        ( cityfrom = cityfrom cityto = cityto )
        ( cityfrom = cityto   cityto = cityfrom ) ).

    SELECT carrid, connid, cityfrom, cityto
          FROM spfli
          ORDER BY carrid, connid, cityfrom, cityto
          INTO TABLE @DATA(spfli_tab).

    cl_demo_output=>display(
      FILTER #( spfli_tab IN filter_tab
                  WHERE cityfrom = cityfrom  AND cityto = cityto ) ).

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de