Unterschiede in der ABAP-Länge

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

Unterschiede in der ABAP-Länge

Beitrag von ABAPMeff (ForumUser / 5 / 2 / 0 ) » 5. Dez 2012 10:00

Hallo zusammen,

ich habe zwei "gleiche" Strukturen angelegt. Einmal mit Includes und einmal nur die Felder (der Includes), die Dictionary-Länge ist gleich jedoch gibt es unterschiede bei der ABAP-Länge. Hintergrund ist, dass diese Struktur für einen RFC verwendet wird und die Felder auf dem Zielsystem verschoben sind. Es scheint an dieser unterschiedlichen ABAP-Länge zu liegen, denn wenn ich die Struktur ohne Includes verwende funktioniert es ohne Probleme. Kann jemand diesen Fehler erklären oder hatte ein ähnliches Problem?

Danke & Gruß


Re: Unterschiede in der ABAP-Länge

Beitrag von a-dead-trousers (Top Expert / 3220 / 81 / 800 ) » 5. Dez 2012 10:37

hi!

Ich weiß jetzt nicht, wie die RFC-Schnittstelle auf unterschiedliche Strukturdefinition in Hinblick auf die Reihenfolge reagiert.
Persönlich würde ich erwarten, dass die Strukurlänge entscheidend ist. Sprich ist die Länge gleich, werden die Felder von links nach rechts aufgefüllt und das unabhängig von ihrer Reihenfolge. Dadurch kann es mitunter sein, dass der Inhalt eines Quell-Feldes auf mehrere Zielfelder aufgeteilt wird bzw. die Inhalte mehrerer Quellfelder in ein und demselben Zielfeld landen.
Aber ich kann mich auch täuschen ;)

Wie hast du denn die Struktur mit den INCLUDES definiert?
Mit INCLUDE TYPE (.INCLUDE im DDIC) oder ist jedes Teil-Include als eigenes Feld per Name eingebunden?

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Unterschiede in der ABAP-Länge

Beitrag von ABAPMeff (ForumUser / 5 / 2 / 0 ) » 5. Dez 2012 10:58

Hi,

die Felder sind in der gleichen Reihenfolge und haben die gleiche Strukturlänge... Nur wenn ich im Dictionary unter Zusätze->Strukturbreite gehe kommt eine unterschiedliche ABAP-Länge, trotz das es die gleichen Felder sind :?
Die Struktur ist mit .INCLUDE Types definiert.

Re: Unterschiede in der ABAP-Länge

Beitrag von a-dead-trousers (Top Expert / 3220 / 81 / 800 ) » 5. Dez 2012 11:52

Aus der Hilfe zur Strukturlänge:
Die hier angezeigten Längen haben folgende Bedeutung:

In der Spalte 'Dictionary' ist die Summe der Angaben aus der Spalte
'Länge' der Komponentenanzeige aufaddiert. Strukturierte Komponenten
werden dabei expandiert, sofern sie nicht Type ... Boxed sind.

Die Spalte ABAP liefert die Gesamtlänge in der Laufzeitumgebung. Sie wird
aus dem zugehörigen Laufzeitobjekt übernommen.

Im Laufzeitobjekt muss je nach Komponententyp die Komponente ausgerichtet
werden, was die Gesamtlänge beeinflusst. Daher können sich die Summen
voneinander unterscheiden.
Das erklärt zumindest den Unterschied zwischen DB und DDIC aber der Unterschied zwischen zwei Strukturen mit denselben Feldern eher nicht.
(Hier gehts vor allem darum wenn man Zahlenfelder verwendet, dass die im Speicher mitunter anders verwaltet werden)

Wie schauen denn deine Strukturen aus? Kannst du die mal posten?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Unterschiede in der ABAP-Länge

Beitrag von ABAPMeff (ForumUser / 5 / 2 / 0 ) » 17. Dez 2012 09:59

Okay das Problem wurde gefunden, es erklärt zwar immer noch nicht warum die Längen auseinander gehen, aber wenigstens funktioniert die Übertragung. 8)

Tiefe Strukturen können bei der Übergabe per "Tables" Probleme bei der Übertragung machen, stattdessen sollten entweder flache Strukturen oder die Tabelle per Ex bzw. Importing übertragen werden.

Danke und Gruß

Re: Unterschiede in der ABAP-Länge

Beitrag von Frank Dittrich (Expert / 674 / 0 / 16 ) » 18. Dez 2012 12:18

a-dead-trousers hat geschrieben:Das erklärt zumindest den Unterschied zwischen DB und DDIC aber der Unterschied zwischen zwei Strukturen mit denselben Feldern eher nicht.
Doch, auch das wird damit erklärt.

Denn wenn eine Struktur als erste Komponente ein Feld vom Typ X mit Länge 1 hat (oder in Nicht-Unicode-Systemen ein Feld vom Typ C mit Länge 1), danach ein Feld vom Typ I, dann wird es dazwischen eine Alignment-Lücke von 3 Bytes geben (mal angenommen, die Architektur verlangt 4-Byte-Alignment für Integers).
Wenn nun diese Include-Struktur in eine andere Struktur eingebunden wird, dürfte auch die Struktur selbst an 4-Byte-Grenzen ausgerichtet werden, d.h., je nach Länge der vorherigen Komponenten incl. Alignment-Lücken gibt es unmittelbar vor der Struktur auch eine Alignment-Lücke. (Das kann man mit einem Mini-ABAP-Report und dem Befehle DESCRIBE DISTANCE ... leicht prüfen.)
Wenn statt des Includes nun aber Einzelfelder in die Struktur aufgenommen werden, wird das erste Feld vom Typ X ohne Alignment-Lücke direkt an das vorherige Feld geklebt. Dann hätte man also eine Abweichung der Gesamtlänge, die durch ein Alignment vor dem Feld mit Typ X verursacht wird, falls nicht die Einzelfelder eingebunden werden, sondern die komplette Struktur.
Auch zwischen diesem Feld vom Typ X und dem nachfolgenden vom Typ I muss beim Einbinden von Einzelfeldern die Alignment-Lücke nicht unbedingt 3 Bytes sein. Sie kann auch kleiner sein oder ganz entfallen, je nachdem, welche Gesamtlänge in Bytes erreicht ist, bevor das Feld vom Typ I kommt.

Frank

Seite 1 von 1

Aktuelle Forenbeiträge

Konstruktoren-Probleme.... gelöst
vor 21 Stunden von AdrianSchm 8 / 325
Workflow über Report starten
vor 22 Stunden von LostDarkness 2 / 73
Liste Angebote/ Aufträge nach ERNAM = sy-uname
Gestern von wreichelt 4 / 122
DOCVARIABLE in Worddokument setzen (OLE?)
Gestern von msfox 2 / 113
BAPI_PO_CREATE1 und Einkaufsinfosatz
Gestern von whaslbeck 2 / 155

Unbeantwortete Forenbeiträge

WCOCO: Gruppe für Betragsfelder 0S01
vor einer Woche von SAP_ENTWICKLER 1 / 95
CAS-Nr.: Chemical Abstracs Service
vor 3 Wochen von SAP_ENTWICKLER 1 / 124
Interaktives Skript, Rolle IC-Manager
vor 4 Wochen von erubadhron86 1 / 170
Wie findet man das Rahmenprogramm eines Infosets?
vor 4 Wochen von DeathAndPain 1 / 171