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 / 1500 / 165 / 337 ) »
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?


Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von ewx (Top Expert / 4311 / 208 / 468 ) »
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 / 1500 / 165 / 337 ) »
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 / 3472 / 68 / 682 ) »
@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 / 1500 / 165 / 337 ) »
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 / 3552 / 167 / 243 ) »
Das ist genau MEIN Problem @DeathAndPain


Ralf

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von ralf.wenzel (Top Expert / 3552 / 167 / 243 ) »
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

Re: CORRESPONDING auf strukturloser Tabelle

Beitrag von black_adept (Top Expert / 3472 / 68 / 682 ) »

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 / 1500 / 165 / 337 ) »
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

Aktuelle Forenbeiträge

Report in ein Programm integrieren
vor 3 Stunden von kaim77 3 / 37
SAP Logon Theme ermitteln
vor 6 Stunden von black_adept 3 / 40

Vergleichbare Themen

Inhalt einer internen Tabelle in andere Tabelle schreiben
von Renato » 20.05.2003 14:26
DD-Tabelle, Meldung ausgeben nach Füllen einer Tabelle
von Aggu » 13.06.2004 13:33
Join über Tabelle trotz Pool/Cluster Tabelle
von em.tie » 04.12.2006 18:38
Inhalt einer internen Tabelle in eine transparente Tabelle?
von Gast » 19.10.2004 14:23