Type "REF TO" is incompatible with type "REF TO ..."

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

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

Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Hallo zusammen!

ich stehe vor einem Rätsel:

Aus der SAPMV45A heraus möchte ich Referenzen der internen Tabellen an eine Klasse übergeben, also z.B. XVBAP[].
Egal, wie ich die Datenreferenz in der Klasse definiere, ich erhalte immer den Fehler
ABAP Compiler hat geschrieben:Type "REF TO" is incompatible with type "REF TO ..."
Hier ein Beispielprogramm, dass den Fehler nachstellt:

Code: Alles auswählen.

TYPES t_t000 TYPE STANDARD TABLE OF t000 WITH NON-UNIQUE DEFAULT KEY.

DATA b TYPE REF TO t_t000.
DATA BEGIN OF a OCCURS 0.
INCLUDE STRUCTURE t000.
DATA END OF a.

b = REF #( a[] ).
Offensichtlich wird eine interne Tabelle, die mit OCCURS definiert wird, technisch anders abgebildet, als eine Tabelle mit TYPES (Kopfzeile mal außen vor gelassen).
normalerweise kann ich immer mit [] auf den Body der itab zugreifen.
nur hier bei REFERENCE geht es nicht.

Hat jemand eine Ahnung, warum das so ist, bzw. wie man die itab mit TYPE definieren muss, damit es geht?

Ja, es gibt einen Workaround, in dem man TYPE REF TO DATA verwendet und beim Zugriff mit ASSIGN arbeitet. Das möchte ich mir aber erstens sparen und zweitens interessiert mich, was für technische Unterschiede es gibt.

eigentlich habe ich alle Zusätze in jeglicher Kombination schon durch:
  • WITH [NON-UNIQUE] EMPTY KEY
  • INITITAL SIZE 0
  • WITHOUT FURTHER SECONDARY KEYS

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


Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von msfox (Specialist / 374 / 57 / 76 ) »
Wenn enno das als Problem meldet, weiß ich gar nicht, ob meine Idee sinnvoll sind :).
1) Ist in ABAP OO eine Tabelle mit Kopfzeile überhaupt noch erlaubt?
2) Klappt dein Vorhaben, wenn du für "a" eine Tabelle ohne Kopfzeile nimmst?
Wenn ja, kannst du ja mal probieren, ob die aus "a" nur die Tabelle nimmst.
also DATA(b) = a[]. Dann hast du zwar die Daten kopiert, aber für den Test würde es erst einmal reichen.

Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Danke für deine Antwort!
1) die SAPMV45A ist voll davon... ;)
2) a ist leider vorgegeben durch die Deklaration in der SAPMV45A

Re: Type "REF TO" is incompatible with type "REF TO ..."

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

das Verhaltent ist normal, einfach weil die Struktur von t_t000 und die von a zwar gleich aussehen, aber eben nicht gleich sind. Ich glaube das wird klarer, wenn du dir folgendes Programm anschaust, wo ich deine Situation vielleicht noch ähnlicher nachgestellt habe, und wo dann die Fehlermeldung klarer ist.

Code: Alles auswählen.

REPORT.

TYPES: BEGIN OF type_a,
         matnr TYPE matnr,
       END OF type_a.

TYPES: BEGIN OF type_b,
         matnr TYPE matnr,
       END OF type_b.


DATA: a TYPE type_a.

DATA:ref_b TYPE REF TO type_b.

ref_b = REF #( a ).
Fehlermeldung hat geschrieben:Type "REF TO TYPE_A" is incompatible with type "REF TO TYPE_B".
Und da ich mir denken kann wo und warum du das brauchst:
Das Problem ist, dass der ref type(dobj) an Stelle des dobj eine Variable erwartet und keine expression.
Aber da du wahrscheinlich eine Schnittstelle sauber typisieren möchtest kannst du das eigentlich genau so machen wie es dir vorschwebt, da SAP bei Übergabe an die Schnittstelle etwas laxer mit den Prüfungen ist und hier quasi implizit ein conv auf den korrekten Zieltyp vornimmt:
Beispiel:

Code: Alles auswählen.

REPORT.

CLASS demo DEFINITION FINAL.
  PUBLIC SECTION.
    TYPES t_t000 TYPE STANDARD TABLE OF t000 WITH NON-UNIQUE DEFAULT KEY.
    CLASS-METHODS: test IMPORTING it_data        TYPE t_t000
                        RETURNING VALUE(rr_data) TYPE REF TO t_t000.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD test.
    rr_data = ref #( it_data ).
  ENDMETHOD.
ENDCLASS.

END-OF-SELECTION.
  DATA BEGIN OF a OCCURS 0.
  INCLUDE STRUCTURE t000.
  DATA END OF a.

  demo=>test( a[] ).
Beim Aufruf von demo=>test( a[] ) prüft SAP, ob a[] und t_t000 kompatibel sind ( wenn du a als Tabelle von T005 statt T000 definierst, meckert SAP ) und castet dementsprechend. Wenn du also XVBAP[] oder was auch immer an eine eigene Schnittstelle übergibst, wird das so funktionieren wie es dir vorschwebt.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 4):
IHeewxqyurryusMurdock

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Danke Stefan! Du hast natürlich Recht: Die beiden Typen haben die gleiche Struktur, aber sie sind deswegen nicht gleich.
Aus der SAP-Community habe ich den Tipp bekommen, NEW anstelle von REF zu verwenden. funktioniert ebenfalls wunderbar und ohne Umwege über eine spezielle Methode. Zumal mir in meinem speziellen Fall die Methode auch nicht helfen würde, da bereits die Datenreferenzen übergeben werden. Und dann kann man die Referenzen zwar zuweisen (keine Syntaxfehler), aber es gibt eben den Short dump MOVE_CAST_ERROR.

Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von Murdock (Specialist / 126 / 60 / 10 ) »
ewx hat geschrieben:
03.02.2022 09:22
Aus der SAP-Community habe ich den Tipp bekommen, NEW anstelle von REF zu verwenden. funktioniert ebenfalls wunderbar und ohne Umwege über eine spezielle Methode.
Könntest Du den Link zu dem Beitrag posten?
Danke vorab!

Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Ja, natürlich.
https://answers.sap.com/questions/13577 ... r-13578483

Zumal NEW nicht funktioniert, da NEW eine Kopie der Tabelle erstellt und die Referenz zu der neuen Tabelle zurück liefert.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Murdock


Re: Type "REF TO" is incompatible with type "REF TO ..."

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

ich hatte dein 1. Posting falsch interpretiert was den Satz mit ASSIGN angeht. Daher hier ein weitere Lösungsvorschlag:
Statt

Code: Alles auswählen.

b = REF #( a[] ).
kannst du doch auch folgendes machen:

Code: Alles auswählen.

FIELD-SYMBOLS: <lt_a> type t_t000.
assign a[] to <lt_a>. 
b = ref #( <lt_a> ).
Der Assign geht auch ohne CASTING,da die beiden Strukturen de facto gleich sind. Jetzt hast du in <lt_a> ein Feldsymbol was auf a[] zeigt, aber den für dich relevanten Typ hat

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
ewxqyurryus

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Type "REF TO" is incompatible with type "REF TO ..."

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Danke Stefan! Probiere ich ebenfalls aus!


Seite 1 von 1

Vergleichbare Themen

18
Antw.
3970
Views
type incompatible
von Spookykid » 28.06.2011 09:52 • Verfasst in ABAP® für Anfänger
4
Antw.
862
Views
Type aus Type ermitteln
von akosch » 13.02.2023 14:03 • Verfasst in ABAP® für Anfänger
2
Antw.
1856
Views
type und like
von Gast » 05.04.2005 13:50 • Verfasst in ABAP® für Anfänger
4
Antw.
2588
Views
Type oder Like
von kostonstyle » 16.07.2007 09:47 • Verfasst in ABAP® für Anfänger
3
Antw.
11997
Views
TYPE-POOLS
von bohne » 21.12.2006 21:52 • Verfasst in ABAP® für Anfänger

Ü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

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

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2242
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4063