CORRESPONDING auf strukturloser Tabelle

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

CORRESPONDING auf strukturloser Tabelle

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Hallo zusammen,

immer wieder ärgere ich mich darüber, dass man anscheinend bei internen Tabellen ohne Struktur den CORRESPONDING-Befehl nicht verwenden kann. Anstelle eines eleganten (und mutmaßlich auch performanteren)

Code: Alles auswählen.

DATA planstellen TYPE STANDARD TABLE OF PLANS.

mitarbeiter[] = CORRESPONDING #( planstellen MAPPING plans = table_line ).
muss ich daher eine Krücke mit FOR und VALUE bauen, die einzeln durch die Zeilen von planstellen hechelt und deren table_line der Komponente von mitarbeiter zuweist.

Übersehe ich etwas, oder hat die SAP das wirklich so blöd gemacht? (Der Ausweg über eine Tabellenstruktur mit nur einer Spalte, nur um nachher CORRESPONDING einsetzen zu können, gefällt mir auch nicht wirklich.) Oder gibt es eine schönere Alternative?

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


Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Es ist definitiv nicht möglich:
SAP Hilfe hat geschrieben:Note
The pseudo component table_line cannot be specified as a component of an internal table in the mapping rule.
Wenn es dich immer wieder ärgert, dann baue dir doch eine simple Helfer-Methode dafür.
Eine elegante Alternative kenne ich auch nicht.

Mich ärgert viel mehr, dass FILTER nicht so ohne Weiteres einsetzbar ist, wenn die Tabelle ohne Schlüssel definiert ist. In dem Fall - und das ist meistens der Fall - muss man eine separate Filtertabelle definieren.

Und ja, ich weiß, dass dich das Thema interne Tabelle ohne Schlüsseldefinition triggert... ;)

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Wenn es dich immer wieder ärgert, dann baue dir doch eine simple Helfer-Methode dafür.
Das ist dann aber nur Kosmetik, wenn in der Helfermethode dann doch wieder der FOR sitzt. Damit mache ich nur die Performance noch schlechter.

Tatsächlich nutze ich WITH EMPTY KEY sehr häufig. Ein Key muss nützlich sein, sonst hat er keine Daseinsberechtigung. FILTER hingegen kann ich fast nie nutzen, weil beide beteiligten Tabellen exakt identisch typisiert sein müssen. Sowas kommt bei effizienter Programmierung nur sehr selten vor, und obwohl FILTER recht schnell sein soll, stelle ich mir die Krücke mit in CORRESPONDING geschachteltem FILTER nicht wirklich effizient vor, weil da eine Hilfstabelle aufgebaut wird, nur damit deren Inhalt dann doch wieder zeilenweise in eine andere Tabelle übertragen wird. Vielleicht irre ich mich aber auch, müsste man mal messen.

Bei FILTER kommt aber auch erschwerend hinzu, dass man nicht nur den Schlüssel exakt einhalten muss, sondern für die Vergleiche auch nur AND und kein OR oder IN zur Verfügung hat, was in fast allen Fällen, bei denen ich FILTER bislang nutzen wollte, unzureichend gewesen ist. Bei sortiertem Schlüssel sollen laut Onlinehilfe alle Operatoren zulässig sein, was m.E. keinen Sinn macht, da man einen Schlüssel nur dann performancefördernd nutzen kann, wenn alle Vergleiche bis auf die letzte Schlüsselspalte auf Gleichheit erfolgen (so ist es auch bei den WHERE-Bedingungen von LOOP und SELECT). Wenn sie das erlauben, hätten sie gar nicht erst die Schlüsselnutzung zu fordern brauchen.

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
@D&P: Die von dir präferierte Syntax

Code: Alles auswählen.

mitarbeiter[] = CORRESPONDING #( planstellen MAPPING plans = table_line ).
ist ja von SAP vorgesehen ab Release 7.52. -> Doku : Nach unten scrollen - da ist ein Beispiel.
Das Dumme dabei ist aber: Wenn man das Democoding nimmt und ausprobiert werden keine 3 Zeilen dargstellt sondern gar nichts.... - d.h. es ist zwar da aber es funktioniert nicht. Zumindest nicht auf dem System wo ich das zur Verfügung habe (7.54) [ Könnte das mal jemand auf einem anderen System ausprobieren und entweder widerlegen oder bestätigen )

Als weitere Alternative ( auch ab Release 7.52 ) könntest du aber den SELECT verwenden.

Code: Alles auswählen.

SELECT t~table_line AS plans from @planstellen as t INTO CORRESPONDING FIELDS OF TABLE @mitarbeiter
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Vielen Dank. Leider sieht es nicht danach aus, als ob ich jemals von 7.50 runterkommen würde, und es liegt nicht an meiner Firma, sondern an der SAP: ERP 6.0 EHP8 basiert auf 7.50, und es gibt nichts Neueres, und das schon seit 2018. SAP HCM läuft aber nun mal auf ERP 6.0. Also ist ein Upgrade gar nicht möglich.

Die Krücke, SAP HCM unter S/4 HANA zu kapseln, wird bei uns nicht umgesetzt werden.

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von ralf.wenzel (Top Expert / 3946 / 201 / 281 ) »
Das ist genau MEIN Problem @DeathAndPain


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

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von ralf.wenzel (Top Expert / 3946 / 201 / 281 ) »
DeathAndPain hat geschrieben:
05.01.2021 16:17
muss ich daher eine Krücke mit FOR und VALUE bauen, die einzeln durch die Zeilen von planstellen hechelt und deren table_line der Komponente von mitarbeiter zuweist.
Ich habe das Problem genau umgekehrt - die Zieltabelle ist vom Typ einer Spalte der Quelltabelle. Da ich immer noch mit FOR so meine Schwierigkeiten habe: Wie müsste eine solche Konstruktion mit FOR und VALUE denn aussehen?

Beispiel: zieltab type matnr, quelltab type mara, ich möchte aus der quelltab alle MATNRn in die zieltab kopieren.


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

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »

Code: Alles auswählen.

DATA(lt_matnr) = VALUE table_matnr( FOR wa IN lt_mara (  wa-matnr ) )  .
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Wobei wir aber brav die Performance im Auge haben und daher Feldsymbole statt Workareavariablen verwenden 😉 , also:

Code: Alles auswählen.

DATA(lt_matnr) = VALUE table_matnr( FOR <wa> IN lt_mara ( <wa>-matnr ) ).
Erfreulicherweise reichen die Winkelsymbole hier aus, um dem System zu sagen, dass es ein Feldsymbol draus machen soll. Man muss also nicht extra irgendwo ein Schlüsselwort FIELD-SYMBOL schreiben, wie man das anderswo tun muss.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
a-dead-trousers


Seite 1 von 1

Vergleichbare Themen

5
Antw.
1075
Views
1
Antw.
699
Views
2
Antw.
4716
Views
Join über Tabelle trotz Pool/Cluster Tabelle
von em.tie » 04.12.2006 18:38 • Verfasst in ABAP® für Anfänger
6
Antw.
4182
Views
Range Tabelle vom Typ RRRANGESID in eine DB-Tabelle füllen
von kaim77 » 15.09.2014 12:32 • Verfasst in ABAP® Core

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.